Professional Documents
Culture Documents
05 GDL Reference Guide PDF
05 GDL Reference Guide PDF
GRAPHISOFT®
Visit the GRAPHISOFT website at http://www.graphisoft.com for local distributor and product availability information.
GDL Reference Guide
Copyright© 2012 by GRAPHISOFT, all rights reserved. Reproduction, paraphrasing or translation without express prior written permission
is strictly prohibited.
Trademarks
ArchiCAD® is a registered trademark and PlotMaker, Virtual Building and GDL are trademarks of GRAPHISOFT. All other trademarks are
the property of their respective holders.
Introduction
Introduction
This manual is a complete reference to the GRAPHISOFT's proprietary scripting language, GDL (Geometric Description Language). The manual is recommended
for those users who wish to expand on the possibilities presented by the construction tools and object libraries in GRAPHISOFT software. It gives a detailed description
of GDL, including syntax definitions, commands, variables, etc.
Table of Contents
General Overview ........................................................................................................................................................... 1
Starting Out .......................................................................................................................................................... 1
Scripting ............................................................................................................................................................... 1
3D Generation ....................................................................................................................................................... 7
GDL Syntax ................................................................................................................................................................ 10
Rules of GDL Syntax ............................................................................................................................................ 10
Statements ........................................................................................................................................................... 10
Line ................................................................................................................................................................... 10
Label .................................................................................................................................................................. 10
Characters ........................................................................................................................................................... 10
Strings ................................................................................................................................................................ 11
Identifiers ............................................................................................................................................................ 11
Variables ............................................................................................................................................................. 11
Parameters ........................................................................................................................................................... 12
Simple Types ........................................................................................................................................................ 12
Derived Types ...................................................................................................................................................... 12
Conventions used in this book ................................................................................................................................ 13
Coordinate Transformations ............................................................................................................................................ 14
2D Transformations .............................................................................................................................................. 14
ADD2 ........................................................................................................................................................ 14
MUL2 ......................................................................................................................................................... 14
ROT2 ......................................................................................................................................................... 15
3D Transformations .............................................................................................................................................. 15
ADDX ....................................................................................................................................................... 15
ADDY ........................................................................................................................................................ 15
ADDZ ........................................................................................................................................................ 15
ADD .......................................................................................................................................................... 15
MULX ........................................................................................................................................................ 16
MULY ........................................................................................................................................................ 16
MULZ ........................................................................................................................................................ 16
MUL .......................................................................................................................................................... 16
ROTX ........................................................................................................................................................ 16
ROTY ........................................................................................................................................................ 16
ROTZ ........................................................................................................................................................ 17
ROT .......................................................................................................................................................... 17
XFORM ..................................................................................................................................................... 17
Managing the Transformation Stack .......................................................................................................................... 18
DEL .......................................................................................................................................................... 18
DEL TOP ................................................................................................................................................... 18
NTR .......................................................................................................................................................... 18
3D Shapes ................................................................................................................................................................... 20
Basic Shapes ........................................................................................................................................................ 20
BLOCK ...................................................................................................................................................... 20
BRICK ....................................................................................................................................................... 20
CYLIND ..................................................................................................................................................... 21
SPHERE ..................................................................................................................................................... 21
ELLIPS ...................................................................................................................................................... 22
CONE ........................................................................................................................................................ 23
PRISM ........................................................................................................................................................ 23
PRISM_ ...................................................................................................................................................... 24
CPRISM_ .................................................................................................................................................... 27
CPRISM_{2} ............................................................................................................................................... 28
BPRISM_ .................................................................................................................................................... 29
FPRISM_ .................................................................................................................................................... 30
HPRISM_ ................................................................................................................................................... 32
SPRISM_ .................................................................................................................................................... 33
SPRISM_{2} ................................................................................................................................................ 34
SLAB ......................................................................................................................................................... 35
SLAB_ ........................................................................................................................................................ 36
CSLAB_ ...................................................................................................................................................... 36
CWALL_ ..................................................................................................................................................... 37
BWALL_ ..................................................................................................................................................... 40
XWALL_ .................................................................................................................................................... 42
XWALL_{2} ................................................................................................................................................ 45
BEAM ........................................................................................................................................................ 48
CROOF_ .................................................................................................................................................... 48
CROOF_{2} ............................................................................................................................................... 51
MESH ........................................................................................................................................................ 52
ARMC ........................................................................................................................................................ 54
ARME ........................................................................................................................................................ 55
ELBOW ...................................................................................................................................................... 55
Planar Shapes in 3D .............................................................................................................................................. 56
HOTSPOT .................................................................................................................................................. 57
HOTLINE .................................................................................................................................................. 57
HOTARC .................................................................................................................................................... 57
LIN_ .......................................................................................................................................................... 57
RECT ......................................................................................................................................................... 57
POLY ......................................................................................................................................................... 58
POLY_ ....................................................................................................................................................... 58
PLANE ...................................................................................................................................................... 59
PLANE_ ..................................................................................................................................................... 59
CIRCLE ...................................................................................................................................................... 59
ARC ........................................................................................................................................................... 60
Shapes Generated from Polylines ............................................................................................................................. 60
EXTRUDE ................................................................................................................................................. 62
PYRAMID .................................................................................................................................................. 65
REVOLVE .................................................................................................................................................. 67
REVOLVE{2} ............................................................................................................................................. 69
RULED ...................................................................................................................................................... 73
RULED{2} ................................................................................................................................................. 74
SWEEP ...................................................................................................................................................... 77
TUBE ........................................................................................................................................................ 79
TUBEA ...................................................................................................................................................... 84
COONS ...................................................................................................................................................... 86
MASS ......................................................................................................................................................... 90
POLYROOF ................................................................................................................................................ 93
EXTRUDEDSHELL ..................................................................................................................................... 97
REVOLVEDSHELL ..................................................................................................................................... 99
REVOLVEDSHELLANGULAR .................................................................................................................... 101
RULEDSHELL .......................................................................................................................................... 102
Elements for Visualization ..................................................................................................................................... 104
LIGHT ..................................................................................................................................................... 104
PICTURE .................................................................................................................................................. 108
3D Text Elements ............................................................................................................................................... 110
TEXT ....................................................................................................................................................... 110
RICHTEXT ............................................................................................................................................... 111
Primitive Elements ............................................................................................................................................... 111
VERT ....................................................................................................................................................... 112
TEVE ....................................................................................................................................................... 112
VECT ....................................................................................................................................................... 112
EDGE ...................................................................................................................................................... 113
PGON ...................................................................................................................................................... 113
PGON{2} ................................................................................................................................................. 114
PIPG ........................................................................................................................................................ 114
COOR ...................................................................................................................................................... 114
BODY ...................................................................................................................................................... 116
BASE ........................................................................................................................................................ 119
Cutting in 3D ..................................................................................................................................................... 120
CUTPLANE .............................................................................................................................................. 120
CUTPLANE{2} ......................................................................................................................................... 120
CUTPLANE{3} ......................................................................................................................................... 120
CUTPOLY ................................................................................................................................................. 123
CUTPOLYA ............................................................................................................................................... 126
CUTSHAPE ............................................................................................................................................... 129
CUTFORM ................................................................................................................................................ 129
Solid Geometry Commands ................................................................................................................................... 131
GROUP - ENDGROUP .............................................................................................................................. 135
ADDGROUP ............................................................................................................................................. 135
SUBGROUP .............................................................................................................................................. 136
Parameters for Morphs - available for listing and labels only ................................................................................. 286
Free users’ globals ....................................................................................................................................... 287
Example usage of global variables ................................................................................................................... 289
Old Global Variables .................................................................................................................................... 289
REQUEST Options ............................................................................................................................................. 291
Doors and Windows ............................................................................................................................................ 301
General Guidelines ...................................................................................................................................... 302
Creation of Door/Window Library Parts .......................................................................................................... 302
Rectangular Doors/Windows in Straight Walls ........................................................................................... 303
3D Related Challenges .......................................................................................................................... 305
Non-Rectangular Doors/Windows in Straight Walls ............................................................................ 305
WALLHOLE ...................................................................................................................... 305
WALLNICHE .................................................................................................................... 308
Rectangular Doors/Windows in Curved Walls ................................................................................... 309
Non-Rectangular Doors/Windows in Curved Walls ............................................................................ 311
2D Related Challenges .......................................................................................................................... 314
Cutting custom wall opening .......................................................................................................... 314
WALLHOLE2 .................................................................................................................... 314
WALLHOLE2{2} ............................................................................................................... 315
Extending the wall polygon ........................................................................................................... 315
WALLBLOCK2 .................................................................................................................. 315
WALLBLOCK2{2} ............................................................................................................. 316
WALLLINE2 ..................................................................................................................... 316
WALLARC2 ....................................................................................................................... 316
GDL Created from the Floor Plan ......................................................................................................................... 316
Keywords ........................................................................................................................................................... 317
Common Keywords ..................................................................................................................................... 317
Reserved Keywords ...................................................................................................................................... 319
3D Use Only .............................................................................................................................................. 320
2D Use Only .............................................................................................................................................. 324
2D and 3D Use .......................................................................................................................................... 326
Non-Geometric Scripts ................................................................................................................................. 326
Properties Script .................................................................................................................................. 326
GENERAL OVERVIEW
GDL is a parametric programming language, similar to BASIC. It describes 3D solid objects like doors, windows, furniture, structural
elements, stairs, and the 2D symbols representing them on the floor plan. These objects are called library parts.
STARTING OUT
The needs of your design, your background in programming and your knowledge of descriptive geometry will all probably influence where
you start in GDL.
Do not start practicing GDL with complicated objectives in mind. Rather, try to learn GDL through experimenting step by step with all of its
features to best utilize them to your advantage. Follow the expertise level recommendations below.
If you are familiar with a programming language like BASIC, you can get acquainted with GDL by observing existing scripts. You can also learn
a lot by opening the library parts shipped with your software and taking a look at the 2D and 3D GDL scripts. Additionally, you can save floor
plan elements in GDL format and see the resulting script.
If you are not familiar with BASIC, but have played with construction blocks, you can still find your way in GDL through practice. We advise
trying the simplest commands right away and then checking their effect in the 3D window of the library part.
Several books and materials have been published on GDL and object library development.
• “Object Making with ArchiCAD” is the perfect guide for beginners.
• “Creating GDL Objects” e-Guide gives a basic overview of the object creation methods.
• David Nicholson Cole’s “GDL Cookbook” is the most popular course book for entry level and advanced GDL programmers for a long time.
• A more recent learning material is “GDL Handbook” by Andrew Watson for novice and experienced users as well.
• “GDL Technical Standards” contains GRAPHISOFT’s official standards for professional library developers; this document can be downloaded
free of charge from GRAPHISOFT’s website: http://www.graphisoft.com/support/developer/documentation/LibraryDevKit.
SCRIPTING
Library Part Structure
Every library part described with GDL has scripts, which are lists of the actual GDL commands that construct the 3D shape and the 2D
symbol. Library parts also have a description for quantity calculations in ArchiCAD.
Master script commands will be executed before each script.
The 2D script contains parametric 2D drawing description. The binary 2D data of the library part (content of the 2D symbol window) can
be referenced using the FRAGMENT2 command. If the 2D script is empty, the binary 2D data will be used to display the library part on
the floor plan.
The 3D script contains a parametric 3D model description. The binary 3D data (which is generated during an import or export operation)
can be referenced using the BINARY command.
The Properties script contains components and descriptors used in element, component and zone lists. The binary properties data described
in the components and descriptors section of the library part can be referenced using the BINARYPROP command. If the properties script
and the master script are empty, the binary properties data will be used during the list process.
The User Interface script allows the user to define input pages that can be used to edit the parameter values in place of the normal parameter list.
In the Parameter script, sets of possible values can be defined for the library part parameters.
The parameter set in the Parameters section are used as defaults in the library part settings when placing the library part on the plan.
In the Forward Migration script you can define the conversion logic which can convert placed instances of older elements.
In the Backward Migration script you can define a backward conversion to an older version of an element.
The Preview picture is displayed in the library part settings dialog box when browsing the active library. It can be referenced by the PICTURE
and PICTURE2 commands from the 3D and 2D script.
ArchiCAD provides a helpful environment to write GDL scripts, with on-the-fly visualization, syntax and error checking.
Analyze, Deconstruct and Simplify
No matter how complex, most objects you wish to create can be broken down into building blocks of simple geometric shapes. Always start
with a simple analysis of the desired object and define all the geometric units that compose it. These building blocks can then be translated into
the vocabulary of the GDL scripting language. If your analysis was accurate, the combination of these entities will form the desired object. To
make the analysis, you need to have a good perception of space and at least a basic knowledge of descriptive geometry.
Elaboration
Depending on your purpose, your custom parametric objects may vary in elaboration. Custom objects for internal studio use may be less refined
than the ones for general use or for commercial distribution.
If your symbols have little significance on the floor plan, or if parametric changes do not need to appear in 2D, then you can omit parametric
2D scripts.
Even if parametric changes are intended to be present in 2D, it is not absolutely necessary to write a parametric 2D script. You can perform
parametric modifications in the 3D Script window or use the 3D top view of the modified object as a new symbol and save the modified object
under a new name. Parametric changes to the default values will result in several similar objects derived from the original.
The most complex and sophisticated library parts consist of parametric 3D descriptions with corresponding parametric 2D scripts. Any changes
in the settings will affect not only the 3D image of the object, but also its floor plan appearance.
Entry Level
These commands are easy to understand and use. They require no programming knowledge, yet you can create very effective new objects
using only these commands.
Simple Shapes
Shapes are basic geometric units that add up to a complex library part. They are the construction blocks of GDL. You place a shape in the
3D space by writing a command in the GDL script.
A shape command consists of a keyword that defines the shape type and some numeric values or alphabetic parameters that define its dimensions.
The number of values varies by shape.
In the beginning, you can omit using parameters and work with fixed values only.
You can start with the following shape commands:
In 3D:
BLOCK, CYLIND, SPHERE, PRISM
In 2D:
LINE2, RECT2, POLY2, CIRCLE2, ARC2
Coordinate Transformations
Coordinate transformations are like moving your hand to a certain place before placing a construction block. They prepare the position,
orientation and scale of the next shape.
y z
G
x
L
x
BLOCK 1, 0.5, 0.5
ADDX 1.5
ROTY 30
BLOCK 1, 0.5, 0.5
The 3D window of the library part will optionally show you the home (G = global) and the current (L = local) position of the coordinate
system for any object present.
The simplest coordinate transformations are as follows:
In 3D:
ADDX, ADDY, ADDZ, ROTX, ROTY, ROTZ
In 2D:
ADD2, ROT2
The commands starting with ADD will move the next shape, while the ROT commands will turn it around any of its axes.
Intermediate Level
These commands are a bit more complex, not because they expect you to know programming, but simply because they describe more complex
shapes or more abstract transformations.
In 3D:
ELLIPS, CONE
POLY_, LIN_, PLANE, PLANE_
PRISM_, CPRISM_, SLAB, SLAB_, CSLAB_, TEXT
In 2D:
HOTSPOT2, POLY2_, TEXT2, FRAGMENT2
These commands usually require more values to be defined than the simple ones. Some of them require status values to control the visibility
of edges and surfaces.
Coordinate Transformations
In 3D:
On top of the entry level transformations
MULX, MULY, MULZ, ADD, MUL, ROT
In 2D:
On top of the entry level transformations
MUL2
Example:
PRISM 4, 1, 3, 0,
3, 3,
-3, 3,
-3, 0
ADDZ -1
MUL 0.666667, 0.666667, 1
PRISM 4, 1, 3, 0,
3, 3,
-3, 3,
-3, 0
ADDZ -1
MUL 0.666667, 0.666667, 1
PRISM 4, 1, 3, 0,
3, 3,
-3, 3,
-3, 0
The transformations starting with MUL will rescale the subsequent shapes by distorting circles into ellipses or spheres into ellipsoids. If used
with negative values, they can be used for mirroring. The commands in the second row affect all three dimensions of space at the same time.
Advanced Level
These commands add a new level of complexity either because of their geometric shape, or because they represent GDL as a programming
language.
In 3D:
There are shape commands in this group which let you trace a spatial polygon with a base polygon to make smooth curved surfaces. Some
shapes require material references in their parameter list.
By using cutting planes, polygons and shapes, you can generate complex arbitrary shapes out of simple shapes. The corresponding commands
are CUTPLANE, CUTPOLY, CUTPOLYA, CUTSHAPE and CUTEND.
In 2D:
PICTURE2, POLY2_A, SPLINE2, SPLINE2A
Flow Control and Conditional Statements
FOR - TO - NEXT
DO - WHILE, WHILE - ENDWHILE
REPEAT - UNTIL
IF - THEN - ELSE - ENDIF
GOTO, GOSUB
RETURN, END / EXIT
These commands should be familiar to anyone who has ever programmed a computer, but they are basic enough that you can understand
them without prior programming experience.
They let you make repetitive script parts to place several shapes with little scripting, or let you make decisions based on prior calculations.
FOR i = 1 TO 5
PRISM_ 8, 0.05,
-0.5, 0, 15,
-0.5, -0.15, 15,
0.5, -0.15, 15,
0.5, 0, 15,
0.45, 0, 15,
0.45, -0.1, 15,
-0.45, -0.1, 15,
-0.45, 0, 15
ADDZ 0.2
NEXT i
Parameters
At this stage of your expertise, you can replace fixed numeric values with variable names. This makes the object more flexible. These variables
are accessible from the library part’s Settings dialog box while working on the project.
Macro Calls
You are not limited to the standard GDL shapes. Any existing library part may become a GDL shape in its entirety. To place it, you simply call
(refer to) its name and transfer the required parameters to it, just as with standard shape commands.
Expert Level
By the time you have a good understanding of the features and commands outlined above, you will be able to pick up the few remaining
commands that you may need from time to time.
Note
The memory capacity of your computer may limit the file length of your GDL scripts, the depth of macro calls and the number of
transformations.
You will find additional information on the above GDL commands throughout the manual. HTML format help files are also available with
your software, giving a quick overview of the available commands and their parameter structure.
3D GENERATION
3D modeling is based on floating point arithmetics, meaning that there is no limit imposed on the geometric size of the model. Whatever size
it is, it retains the same accuracy down to the smallest details.
The 3D model that you finally see on the screen is composed of geometric primitives. These primitives are stored in the memory of your
computer in binary format, and the 3D engine generates them according to the floor plan you created. The metamorphosis between the
architectural floor plan elements and the binary 3D data is called 3D conversion.
The primitives are the following:
• all the vertices of your building components
• all the edges linking the vertices
• all the surface polygons within the edges
Groups of these primitives are kept together as bodies. The bodies make up the 3D model. All of the features of 3D visualization - smooth
surfaces, cast shadows, glossy or transparent materials - are based on this data structure.
The 3D Space
The 3D model is created in three-dimensional space measured by the x, y and z axes of a master coordinate system whose origin is called
the global origin.
In Floor Plan view, you can see the global origin in the lower left corner of the worksheet if you open the program without reading a specific
document. In addition, the global origin defines the zero level of all the stories referred to in a floor plan document.
When you place an object into the design, the floor plan position will define its location along the x and y axes of this master coordinate system.
The location along the z axis can be set in the Object Settings dialog box or directly adjusted when placed in 3D. This location will be the base
and the default position of the local coordinate system of the object. The shapes described in the script will be positioned with reference
to this local coordinate system.
Coordinate Transformations
Every GDL shape is linked to the current position of the local coordinate system. For example, blocks are linked to the origin. The length,
width and height of the block are always measured in a positive direction along the three axes. Thus, the BLOCK command requires only three
parameters defining its dimensions along the axes.
How can you generate a shifted and rotated block? With the parameter structure of the BLOCK there is no way to do this. It does not have
parameters for shift and rotation.
The answer is to move the coordinate system to the correct position before issuing the BLOCK command. With the coordinate transformation
commands, you can pre-define its position and rotation around the axes. These transformations are not applied to the shapes already generated
and are only effective on subsequent shapes.
The GDL Interpreter
When a GDL script is executed, the GDL interpreter engine will detect the location, size, rotation angle, user defined parameters and the
mirrored state of the library part. It will then move the local coordinate system to the right position, ready to receive the GDL commands
from the script of the library parts. Every time a command for a basic shape is read by the interpreter, it will generate the geometric primitives
that make up that particular shape.
When the interpreter has finished, the complete binary 3D model will be stored in the memory, and you can perform 3D projections, fly-
through renderings or sun studies on it.
ArchiCAD contains a pre-compiler and an interpreter for GDL. Interpretation of a GDL script uses the pre-compiled code. This feature
increases speed of the analysis. If the GDL script is modified, a new code is generated.
Data structures converted from other file formats (e.g., DXF, Zoom, Alias Wavefront) are stored in a binary 3D section of the library parts.
This section is referenced by the BINARY command from the GDL script.
The GDL Script Analysis
Users have no control over the order in which library parts placed on the floor plan are analyzed. The order of GDL script analysis is based
on the internal data structure; moreover, Undo and Redo operations as well as modifications may influence that order. The only exceptions to
this rule are special GDL scripts of the active library, whose names begin with "MASTER_GDL" or "MASTEREND_GDL".
Scripts whose name begins with "MASTER_GDL" are executed before a 3D conversion, before creating a Section/Elevation, before starting
a list process and after loading the active library.
Scripts whose name begins with "MASTEREND_GDL" are executed after a 3D conversion sequence, after creating a Section/Elevation, when
finishing a list process and when the active library is to be changed (Load Libraries, Open a project, New project, Quit).
These scripts are not executed when you edit library parts. If your library contains one or more such scripts they will all be executed in an
order that is not defined.
MASTER_GDL and MASTEREND_GDL scripts can include attribute definitions, initializations of GDL user global variables, 3D commands
(effective only in the 3D model), value list definitions (see the VALUES command) and GDL extension-specific commands. The attributes
defined in these scripts will be merged into the current attribute set (attributes with same names are not replaced, while attributes originated
from GDL and not edited in the program are always replaced).
GDL SYNTAX
This chapter presents the basic elements of GDL syntax, including statements, labels, identifiers, variables and parameters. Typographic rules are also explained in detail.
STATEMENTS
A GDL program consists of statements. A statement can start with a keyword (defining a GDL shape, coordinate transformations or program
control flow), with a macro name, or with a variable name followed by an '=' sign and an expression.
LINE
The statements are in lines separated by line-separators (end_of_line characters).
A comma (,) in the last position indicates that the statement continues on the next line. A colon (:) is used for separating GDL statements in
a line. After an exclamation mark (!) you can write any comment in the line. Blank lines can be inserted into a GDL script with no effect at
all. Any number of spaces or tabs can be used between the operands and operators. The use of a space or tab is obligatory after statement
keywords and macro calls.
LABEL
Any line can start with a label which is used as a reference for a subsequent statement. A label is an integer number or a constant string between
quotation marks, followed by a colon (:). A string label is case sensitive. Labels are checked for single occurrence. The execution of the program
can be continued from any label by using a GOTO or GOSUB statement.
CHARACTERS
The GDL text is composed of the lower and uppercase letters of the English alphabet, any number and the following characters:
<space> _(underline) ~ ! : , ; . + - * / ^ = < > <= >= # ( ) [ ] { } \ @ & |(vertical
bar) " ' ` ´ “ ” ’ ‘ <end_of_line>
STRINGS
Any string of Unicode characters that is placed between quotation marks (", ', “, ’, `, ´), or any string of characters without quotation marks that
does not figure in the script as an identifier with a given value (macro call, attribute name, file name). Strings without quotation marks will be
converted to all caps, so using quotation marks is recommended. The maximum length allowed in a string is 255 characters. The ArchiCAD
user interface - unlike the GDL Engine - isn’t fully Unicode ready yet, so in the Library Part Editor you can enter the characters of your current
system codepage only.
The '\' character has special control values. Its meaning depends on the next character.
Example:
"This is a string"
`washbasin 1'-6"*1'-2`
'Do not use different delimiters’
IDENTIFIERS
Identifiers are special character strings:
• they are not longer than 255 characters;
• they begin with a letter of the alphabet or a '_' or '~' character;
• they consist of letters, numbers and '_' or '~' characters;
• upper- and lowercase letters are considered identical.
Identifiers can be GDL keywords, global or local variables or strings (names). Keywords and global variable names are determined by the
program you’re using GDL in; all other identifiers can be used as variable names.
VARIABLES
GDL programs can handle numeric and string variables (defined by their identifiers), numbers and character strings.
PARAMETERS
Identifiers listed in a library part’s parameter list are called parameters. Parameter identifiers must not exceed 31 characters in length. And the
maximum number of parameters must not exceed 1024. Within a script, the same rules apply to parameters as to local variables.
Parameters of text-only GDL files are identified by letters A to Z.
SIMPLE TYPES
Variables, parameters and expressions can be of two simple types: numeric or string.
Numeric expressions are constant numbers, numeric variables or parameters, functions that return numeric values, and any combination of these in
operations. Numeric expressions can be integer or real. Integer expressions are integer constants, variables or parameters, functions that return
integer values, and any combination of these in operations which results in integers. Real expressions are real constants, variables or parameters,
functions that return real values, and any combination of these (or integer expressions) in operations which results in reals. A numeric expression
being an integer or a real is determined during the compilation process and depends only on the constants, variables, parameters and the
operations used to combine them. Real and integer expressions can be used the same way at any place where a numeric expression is required,
however, in cases where a combination of these may result in precision problems, a compiler warning appears (comparison of reals or reals and
integers using relational operators '=' or '<>', or boolean operators AND, OR, EXOR; IF or GOTO statements with real label expressions).
String expressions are constant strings, string variables or parameters, functions that return strings, and any combination of these in operations
which result in strings.
DERIVED TYPES
Variables and parameters can also be arrays, and parameters can be value lists of a simple type.
Arrays are one- or two-dimensional tables of numeric and/or string values, which can be accessed directly by indexes.
Value lists are sets of possible numeric or string values. They can be assigned to the parameters in the value list script of the library part or in
the MASTER_GDL script, and will appear in the parameter list as a pop-up menu.
COORDINATE TRANSFORMATIONS
This chapter tells you about the types of transformations available in GDL (moving, scaling and rotating the coordinate system) and the way
they are interpreted and managed.
About Transformations
In GDL, all the geometric elements are linked strictly to the local coordinate system. GDL uses a right-handed coordinate system. For example,
one corner of a block is in the origin and its sides are in the x-y, x-z and y-z planes.
Placing a geometric element in the desired position requires two steps. First, move the coordinate system to the desired position. Second,
generate the element. Every movement, rotation or stretching of the coordinate system along or around an axis is called a transformation.
Transformations are stored in a stack; interpretation starts from the last one backwards. Scripts inherit this stack; they can insert new elements
onto it but can only delete the locally defined ones. It is possible to delete one, more or all of the transformations defined in the current script.
After returning from a script, the locally defined transformations are removed from the stack.
2D TRANSFORMATIONS
These are the equivalents in the 2D space of the ADD, MUL and ROTZ 3D transformations.
ADD2
ADD2 x, y
Example:
ADD2 a, b
Y
X
b
X
MUL2
MUL2 x, y
ROT2
ROT2 alpha
Example:
ROT2 beta
Y
Y
bet a
3D TRANSFORMATIONS
ADDX
ADDX dx
ADDY
ADDY dy
ADDZ
ADDZ dz
Moves the local coordinate system along the given axis by dx, dy or dz respectively.
ADD
ADD dx, dy, dz
Replaces the sequence ADDX dx: ADDY dy: ADDZ dz.
Example:
ADD a, b, c
Y
c
X
b
a
X
It has only one entry in the stack, thus it can be deleted with DEL 1.
MULX
MULX mx
MULY
MULY my
MULZ
MULZ mz
Scales the local coordinate system along the given axis. Negative mx, my, mz means simultaneous mirroring.
MUL
MUL mx, my, mz
Replaces the sequence MULX mx: MULY my: MULZ mz. It has only one entry in the stack, thus it can be deleted with DEL 1.
ROTX
ROTX alphax
ROTY
ROTY alphay
ROTZ
ROTZ alphaz
Rotates the local coordinate system around the given axis by alphax, alphay, alphaz degrees respectively, counterclockwise.
Example:
Z
Y
Y
beta
X
ROTZ beta
ROT
ROT x, y, z, alpha
Rotates the local coordinate system around the axis defined by the vector (x, y, z) by alpha degrees, counterclockwise. It has only one entry
in the stack, thus it can be deleted with DEL 1.
XFORM
XFORM a11, a12, a13, a14,
a21, a22, a23, a24,
a31, a32, a33, a34
Defines a complete transformation matrix. It is mainly used in automatic GDL code generation. It has only one entry in the stack.
x' = a11 * x + a12 * y + a13 * z + a14
y' = a21 * x + a22 * y + a23 * z + a24
z' = a31 * x + a32 * y + a33 * z + a34
Example:
A=60
B=30
XFORM 2, COS(A), COS(B)*0.6, 0,
0, SIN(A), SIN(B)*0.6, 0,
0, 0, 1, 0
BLOCK 1, 1, 1
Example:
BLOCK 1, 1, 1
ADDX 2
ADDY 2.5
ADDZ 1.5
ROTX -60
ADDX 1.5
BLOCK 1, 0.5, 2
DEL 1, 1 ! Deletes the ADDX 2 transformation
BLOCK 1, 0.5, 1
DEL 1, NTR() -2 ! Deletes the ADDZ 1.5 transformation
BLOCK 1, 0.5, 2
DEL -2, 3!Deletes the ROTX -60 and ADDY 2.5 transformations
BLOCK 1, 0.5, 2
3D SHAPES
This chapter covers all the 3D shape creation commands available in GDL, from the most basic ones to the generation of complex shapes from polylines. Elements for
visualization (light sources, pictures) are also presented here, as well as the definition of text to be displayed in 3D. Furthermore, the primitives of the internal 3D data
structure consisting of nodes, vectors, edges and bodies are discussed in detail, followed by the interpretation of binary data and guidelines for using cutting planes.
BASIC SHAPES
BLOCK
BLOCK a, b, c
BRICK
BRICK a, b, c
z
c
a
x
The first corner of the block is in the local origin and the edges with lengths a, b and c are along the x-, y- and z-axes, respectively. Zero values
create degenerated blocks (rectangle or line).
Restriction of parameters:
a >= 0, b >= 0, c >= 0
a + b + c > 0
CYLIND
CYLIND h, r
z
x
Right cylinder, coaxial with the z-axis with a height of h and a radius of r.
If h=0, a circle is generated in the x-y plane.
If r=0, a line is generated along the z axis.
SPHERE
SPHERE r
A sphere with its center at the origin and with a radius of r.
ELLIPS
ELLIPS h, r
Half ellipsoid. Its cross-section in the x-y plane is a circle with a radius of r centered at the origin. The length of the half axis along the z-axis is h.
Example: Hemisphere
ELLIPS r, r
z
r
y
CONE
CONE h, r1, r2, alpha1, alpha2
z z
alp
ha
2
r2
alp h
ha
1
r1
y y
x
Frustum of a cone where alpha1 and alpha2 are the angles of inclination of the end surfaces to the z axis, r1 and r2 are the radii of the end-
circles and h is the height along the z axis.
If h=0, the values of alpha1 and alpha2 are disregarded and an annulus is generated in the x-y plane.
alpha1 and alpha2 are in degrees.
Restriction of parameters:
0 < alpha1 < 180° and 0 < alpha2 < 180°
PRISM
PRISM n, h, x1, y1, ... xn, yn
Right prism with its base polygon in the x-y plane (see the parameters of the POLY command and the POLY_ command). The height along
the z-axis is abs(h). Negative h values can also be used. In that case the second base polygon is below the x-y plane.
Restriction of parameters:
n >= 3
h
y
n
2
x 1
PRISM_
PRISM_ n, h, x1, y1, s1, ... xn, yn, sn
Similar to the PRISM command, but any of the horizontal edges and sides can be omitted.
Restriction of parameters:
n >= 3
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
ROTX 90
PRISM_ 26, 1.2,
0.3, 0, 15,
0.3, 0.06, 15,
0.27, 0.06, 15,
0.27, 0.21, 15,
0.25, 0.23, 15,
-0.25, 0.23, 15,
-0.27, 0.21, 15,
-0.27, 0.06, 15,
-0.3, 0.06, 15,
-0.3, 0, 15,
0.3, 0, -1, !End of contour
0.10, 0.03, 15,
0.24, 0.03, 15,
0.24, 0.2, 15,
0.10, 0.2, 15,
0.10, 0.03, -1, !End of first hole
0.07, 0.03, 15,
0.07, 0.2, 15,
-0.07, 0.2, 15,
-0.07, 0.03, 15,
0.07, 0.03, -1, !End of second hole
-0.24, 0.03, 15,
-0.24, 0.2, 15,
-0.1, 0.2, 15,
-0.1, 0.03, 15,
-0.24, 0.03, -1 !End of third hole
j7 = 0 j7 = 1
R=1 R=1
H=3 H=3
PRISM_ 9, H, PRISM_ 9, H,
-R, R, 15, -R, R, 15,
COS(180)*R, SIN(180)*R, 15, COS(180)*R, SIN(180)*R, 64+15,
COS(210)*R, SIN(210)*R, 15, COS(210)*R, SIN(210)*R, 64+15,
COS(240)*R, SIN(240)*R, 15, COS(240)*R, SIN(240)*R, 64+15,
COS(270)*R, SIN(270)*R, 15, COS(270)*R, SIN(270)*R, 64+15,
COS(300)*R, SIN(300)*R, 15, COS(300)*R, SIN(300)*R, 64+15,
COS(330)*R, SIN(330)*R, 15, COS(330)*R, SIN(330)*R, 64+15,
COS(360)*R, SIN(360)*R, 15, COS(360)*R, SIN(360)*R, 64+15,
R, R, 15 R, R, 15
CPRISM_
CPRISM_ top_material, bottom_material, side_material,
n, h,
x1, y1, s1, ... xn, yn, sn
Extension of the PRISM_ command. The first three parameters are used for the material name/index of the top, bottom and side surfaces.
The other parameters are the same as above in the PRISM_ command.
Restriction of parameters:
n >= 3
See also the section called “Materials”.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
Example: Material referencing a predefined material by name, index and global variable
CPRISM_{2}
CPRISM_{2} top_material, bottom_material, side_material,
n, h,
x1, y1, alpha1, s1, mat1,
...,
xn, yn, alphan, sn, matn
CPRISM_{2} is an extension of the CPRISM_ command with the possibility of defining different angles and materials for each side of the prism.
The side angle definition is similar to the one of the CROOF_ command.
alphai: the angle between the face belonging to the edge i of the prism and the plane perpendicular to the base.
mati: material reference that allows you to control the material of the side surfaces.
BPRISM_
BPRISM_ top_material, bottom_material, side_material,
n, h, radius,
x1, y1, s1, ... xn, yn, sn
A smooth curved prism, based on the same data structure as the straight CPRISM_ element. The only additional parameter is radius.
Derived from the corresponding CPRISM_ by bending the x-y plane onto a cylinder tangential to that plane. Edges along the x axis are
transformed to circular arcs; edges along the y axis remain horizontal; edges along the z axis will be radial in direction.
See the BWALL_ command for details.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
FPRISM_
FPRISM_ top_material, bottom_material, side_material, hill_material,
n, thickness, angle, hill_height,
x1, y1, s1,
...,
xn, yn, sn
Similar to the PRISM_ command, with the additional hill_material, angle and hill_height parameters for forming a ramp on the top.
hill_material: the side material of the ramp part.
angle: the inclination angle of the ramp side edges.
Restriction: 0 <= angle < 90.
If angle = 0, the hill side edges seen from an orthogonal view form a quarter circle with the current resolution (see the RADIUS command,
the RESOL command and the TOLER command).
hill_height: the height of the ramp. Note that the thickness parameter represents the whole height of the prism.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
Restriction of parameters:
n >= 3, hill_height < thickness
See Status Codes for details.
hill_height n angle
thickness
1
2
RESOL 10
FPRISM_ "Roof Tile", "Brick-Red", "Brick-White", "Roof Tile",
4, 1.5, 0, 1.0, !angle = 0
0, 0, 15,
5, 0, 15,
5, 4, 15,
0, 4, 15
HPRISM_
HPRISM_ top_mat, bottom_mat, side_mat,
hill_mat,
n, thickness, angle, hill_height, status,
x1, y1, s1,
...,
xn, yn, sn
Similar to FPRISM_, with an additional parameter controlling the visibility of the hill edges.
status: controls the visibility of the hill edges:
0: hill edges are all visible (FPRISM_)
1: hill edges are invisible
SPRISM_
SPRISM_ top_material, bottom_material, side_material,
n, xb, yb, xe, ye, h, angle,
x1, y1, s1, ... xn, yn, sn
Extension of the CPRISM_ command, with the possibility of setting the upper polygon non-parallel with the x-y plane. The upper plane
definition is similar to the plane definition of the CROOF_ command. The height of the prism is defined at the reference line. Upper and
lower polygon intersection is forbidden.
angle
n
h
(xb,yb )
(xe,ye )
1
2
xb, yb, xe, ye: reference line (vector) starting and end coordinates.
angle: rotation angle of the upper polygon around the given oriented reference line in degrees (CCW).
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
Note: All calculated z coordinates of the upper polygon nodes must be positive or 0.
Example:
SPRISM_{2}
SPRISM_{2} top_material, bottom_material, side_material,
n,
xtb, ytb, xte, yte, topz, tangle,
xbb, ybb, xbe, ybe, bottomz, bangle,
x1, y1, s1, mat1,
...,
xn, yn, sn, matn
Extension of the SPRISM_ command, with the possibility of having an upper and lower polygon non-parallel with the x-y plane. The definition
of the planes is similar to the plane definition of the CROOF_ command. The top and bottom of the prism is defined at the reference line.
Upper and lower polygon intersection is forbidden.
xtb, ytb, xte, yte: reference line (vector) of the top polygon starting and end coordinates.
topz: the 'z' level of the reference line of the top polygon.
tangle: rotation angle of the upper polygon around the given oriented reference line in degrees (CCW).
xbb, ybb, xbe, ybe: reference line (vector) of the bottom polygon starting and end coordinates.
bottomz: the 'z' level of the reference line of the top polygon.
bangle: rotation angle of the lower polygon around the given oriented reference line in degrees (CCW).
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
mati: material reference that allows you to control the material of the side surfaces.
Example:
SLAB
SLAB n, h, x1, y1, z1, ... xn, yn, zn
Oblique prism. The lateral faces are always perpendicular to the x-y plane. Its bases are flat polygons rotated about an axis parallel with the x-y
plane. Negative h values can also be used. In that case the second base polygon is below the given one.
No check is made as to whether the points are really on a plane. Apices not lying on a plane will result in strange shadings/ renderings.
Restriction of parameters:
n >= 3
SLAB_
SLAB_ n, h, x1, y1, z1, s1, ... xn, yn, zn, sn
Similar to the SLAB command, but any of the edges and faces of the side polygons can be omitted. This statement is an analogy of the PRISM_
command.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
CSLAB_
CSLAB_ top_material, bottom_material, side_material,
n, h,
x1, y1, z1, s1, ... xn, yn, zn, sn
Extension of the SLAB_ command; the first three parameters are used for the material name/index of the top, bottom and side surfaces. The
other parameters are the same as above in the SLAB_ command.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
See Status Codes for details.
CWALL_
CWALL_ left_material, right_material, side_material,
height, x1, x2, x3, x4, t,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1, frame_shown1,
...,
x_startn, y_lown, x_endn, y_highn, frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm
Left_material, right_material, side_material: Material names/indices for the left, right and side surfaces. (The left
and right sides of the wall follow the x axis.)
The reference line of the wall is always transformed to coincide with the x axis. The sides of the wall are in the x-z plane.
height: The height of the wall relative to its base.
x1, x2, x3, x4: The projected endpoints of the wall lying on the x-y plane as seen below. If the wall stands on its own, then x1 =
x4 = 0, x2 = x3 = the length of the wall.
t: the thickness of the wall.
t < 0: if the body of the wall is to the right of the x axis,
t > 0: if the body of the wall is to the left of the x axis,
t = 0: if the wall is represented by a polygon and frames are generated around the holes.
t
X
x1 x4 x3 x2
mask1, mask2, mask3, mask4: Control the visibility of edges and side polygons.
mask1, mask2, mask3, mask4 = j1 + 2*j2 + 4*j3 + 8*j4, where each j can be 0 or 1.
The j1, j2, j3, j4 numbers represent whether the vertices and the side are present (1) or omitted (0).
Z
mask 3
mask 4 mask 2
j3
j2
j4
j1 X
mask 1
height
i
y_high
x_start
i
i
y_low
x_end i
frame_showni:
1: if the edges of the hole are visible,
0: if the edges of the hole are invisible,
< 0: control the visibility of each of the opening’s edges separately: frame_showni = -(1*j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7
+ 128*j8), where j1, j2... j8 can be either 0 or 1. The numbers j1 to j4 control the visibility of the edges of the hole on the left-hand side of
the wall surface, while j5 to j8 affect the edges on the right-hand side, as shown on the illustration below.
Z
j3
j7
j2
j4 j1 j6
j8
j5
Y
X
An edge that is perpendicular to the surface of the wall is visible if there are visible edges drawn from both of its endpoints.
BWALL_
BWALL_ left_material, right_material, side_material,
height, x1, x2, x3, x4, t, radius,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1, frame_shown1,
...,
x_startn, y_lown, x_endn, y_highn, frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm
A smooth curved wall based on the same data structure as the straight wall CWALL_ element. The only additional parameter is radius. Derived
from the corresponding CWALL_ by bending the x-z plane onto a cylinder tangential to that plane. Edges along the x axis are transformed to
circular arcs, edges along the y axis will be radial in direction, and vertical edges remain vertical. The curvature is approximated by a number of
segments set by the current resolution (see the RADIUS command, the RESOL command and the TOLER command).
See also the CWALL_ command for details.
y r
Example 2:
ROTZ -60
BWALL_ 1, 1, 1,
4, 0, 6, 6, 0,
0.3, 2,
15, 15, 15, 15,
5,
1, 1, 3.8, 2.5, -255,
1.8, 0, 3, 2.5, -255,
4.1, 1, 4.5, 1.4, -255,
4.1, 1.55, 4.5, 1.95,-255,
4.1, 2.1, 4.5, 2.5, -255,
1, 0, -0.25, 1, 3
XWALL_
XWALL_ left_material, right_material, vertical_material, horizontal_material,
height, x1, x2, x3, x4,
y1, y2, y3, y4,
t, radius,
log_height, log_offset,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1,
frame_shown1,
...,
x_startn, y_lown, x_endn, y_highn,
frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm,
status
Extended wall definition based on the same data structure as the BWALL_ element.
y4
y1
y2
y3
x
x1 x2 x3 x4
log_height, log_offset: additional parameters allowing you to compose a wall from logs. Effective only for straight walls.
logheight
logoffset
Example:
XWALL_{2}
XWALL_{2} left_material, right_material, vertical_material, horizontal_material,
height, x1, x2, x3, x4,
y1, y2, y3, y4,
t, radius,
log_height, log_offset,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1,
sill_depth1, frame_shown1,
...,
x_startn, y_lown, x_endn, y_highn,
sill_depthn, frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm,
status
Extended wall definition based on the same data structure as the XWALL_ element.
silldepthi: logical depth of the opening sill. If the j9 bit of the frame_showni parameter is set, the wall side materials wraps the hole
polygons, silldepthi defining the separator line between them.
frame_showni:
1: if the edges of the hole are visible,
0: if the edges of the hole are invisible,
< 0: control the visibility of each of the opening’s edges separately: frame_showni = -(1*j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 +
64*j7 + 128*j8 + 256*j9 + 512*j10), where j1, j2... j10 can be either 0 or 1. There are two additional values to control the material wrapping.
The meaning of the j1, j2 ... j8 values are the same as at the CWALL_ and XWALL_ commands. The j9 value controls the material of the
hole polygons. If j9 is 1, the hole inherits the side materials of the wall. The j10 value controls the form of the separator line between the
hole materials on the upper and lower polygons of the hole in case of a bent wall. If the j10 value is 1, the separator line will be straight,
otherwise curved.
Example:
ROTZ 90
xWALL_{2} "C13", "C11", "C12", "C12",
2, 0, 4, 4, 0,
0, 0, 1, 1,
1, 0,
0, 0,
15, 15, 15, 15,
1,
1, 0.9, 3, 2.1, 0.3, -(255 + 256),
0,
0
DEL 1
ADDX 2
xWALL_{2} "C13", "C11", "C12", "C12",
2, 0, 2 * PI, 2 * PI, 0,
0, 0, 1, 1,
0, 0,
15, 15, 15, 15,
1,
1.6, 0.9, 4.6, 2.1, 0.3, -(255 + 256),
0,
0
ADDX 4
xWALL_{2} "C13", "C11", "C12", "C12",
2, 0, 2 * PI, 2 * PI, 0,
0, 0, 1, 1,
1, 2,
0, 0,
15, 15, 15, 15,
1,
1.6, 0.9, 4.6, 2.1, 0.3, -(255 + 256 + 512),
0,
0
BEAM
BEAM left_material, right_material, vertical_material, top_material, bottom_material,
height,
x1, x2, x3, x4,
y1, y2, y3, y4, t,
mask1, mask2, mask3, mask4
Beam definition. Parameters are similar to those of the XWALL_ element.
top_material, bottom_material: top and bottom materials.
Example:
BEAM 1, 1, 1, 1, 1,
0.3,
0.0, 7.0, 7.0, 0.0,
0.0, 0.0, 0.1, 0.1, 0.5,
15, 15, 15, 15
CROOF_
CROOF_ top_material, bottom_material, side_material,
n, xb, yb, xe, ye, height, angle, thickness,
x1, y1, alpha1, s1,
...,
xn, yn, alphan, sn
A sloped roof pitch with custom angle ridges.
top_material, bottom_material, side_material: name/index of the top, bottom and side material.
n: the number of nodes in the roof polygon.
xb, yb, xe, ye: reference line (vector).
height: the height of the roof at the reference line (lower surface).
angle: the rotation angle of the roof plane around the given oriented reference line in degrees (CCW).
thickness: the thickness of the roof measured perpendicularly to the plane of the roof.
xi, yi: the coordinates of the nodes of the roof ’s lower polygon.
alphai: the angle between the face belonging to the edge i of the roof and the plane perpendicular to the roof plane, -90° < alphai <
90°. Looking in the direction of the edge of the properly oriented roof polygon, the CCW rotation angle is positive. The edges of the roof
polygon are oriented properly if, in top view, the contour is sequenced CCW and the holes are sequenced CW.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
z
alphai
y
(xe, ye) angle
x height
(xb, yb)
Example 1:
CROOF_ 1, 1, 1, ! materials
9,
0, 0,
1, 0, ! reference line (xb,yb)(xe,ye)
0.0, ! height
-30, ! angle
2.5, ! thickness
0, 0, -60, 15,
10, 0, 0, 15,
10, 20, -30, 15,
0, 20, 0, 15,
0, 0, 0, -1,
2, 5, 0, 15,
8, 5, 0, 15,
5, 15, 0, 15,
2, 5, 0, -1
Example 2:
L=0.25
r=(0.6^2+L^2)/(2*L)
a=ASN(0.6/r)
CROOF_ "Roof Tile", "Pine", "Pine",
16, 2, 0, 0,
0, 0, 45, -0.2*SQR(2),
0, 0, 0, 15,
3.5, 0, 0, 15,
3.5, 3, -45, 15,
0, 3, 0, 15,
0, 0, 0, -1,
0.65, 1, -45, 15,
1.85, 1, 0, 15,
1.85, 2.4-L, 0, 13,
1.25, 2.4-r, 0, 900,
0, 2*a, 0, 4015,
0.65, 1, 0, -1,
2.5, 2, 45, 15,
3, 2, 0, 15,
3, 2.5, -45, 15,
2.5, 2.5, 0, 15,
2.5, 2, 0, -1
CROOF_{2}
CROOF_{2} top_material, bottom_material, side_material,
n, xb, yb, xe, ye, height, angle thickness,
x1, y1, alpha1, s1, mat1,
...
xn, yn, alphan, sn, matn
Extension of the CROOF_ command with the possibility of defining different materials for the sides.
mati: material reference that allows you to control the material of the side surfaces.
MESH
MESH a, b, m, n, mask,
z11, z12, ... z1m,
z21, z22, ... z2m,
...
zn1, zn2, ... znm
A simple smooth mesh based on a rectangle with an equidistant net. The sides of the base rectangle are a and b; the m and n points are along
the x and y axes respectively; zij is the height of the node.
Masking:
Z
Zij
j
b
1
1 i m X
mask:
mask = j1 + 4*j3 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j1: base surface is present,
j3: side surfaces are present,
j5: base and side edges are visible,
j6: top edges are visible,
j7: top edges are visible, top surface is not smooth.
Restriction of parameters:
m >= 2, n >= 2
Example 1:
Example 2:
ARMC
ARMC r1, r2, l, h, d, alpha
z
alp
ha r2
h l
r1 x
d x
A piece of tube starting from another tube; parameters according to the figure (penetration curves are also calculated and drawn). The alpha
value is in degrees.
Restriction of parameters:
r1 >= r2 + d
r1 <= l*sin(alpha) - r2*cos(alpha)
Example:
ROTY 90
CYLIND 10,1
ADDZ 6
ARMC 1, 0.9, 3, 0, 0, 45
ADDZ -1
ROTZ -90
ARMC 1, 0.75, 3, 0, 0, 90
ADDZ -1
ROTZ -90
ARMC 1, 0.6, 3, 0, 0, 135
ARME
ARME l, r1, r2, h, d
z r2
d
l
h
y
r1
A piece of tube starting from an ellipsoid in the y-z plane; parameters according to the figure (penetration lines are also calculated and drawn).
Restriction of parameters:
r1 >= r2+d
l >= h*sqrt(1-(r2-d)2/r12)
Example:
ELLIPS 3,4
FOR i=1 TO 6
ARME 6,4,0.5,3,3.7-0.2*i
ROTZ 30
NEXT i
ELBOW
ELBOW r1, alpha, r2
A segmented elbow in the x-z plane. The radius of the arc is r1, the angle is alpha and the radius of the tube segment is r2. The alpha value
is in degrees.
Restriction of parameters:
r1 > r2
z
ha
r1
alp
x
r2
Example:
ROTY 90
ELBOW 2.5, 180, 1
ADDZ -4
CYLIND 4, 1
ROTZ -90
MULZ -1
ELBOW 5, 180, 1
DEL 1
ADDX 10
CYLIND 4, 1
ADDZ 4
ROTZ 90
ELBOW 2.5, 180,1
PLANAR SHAPES IN 3D
The drawing elements presented in this section can be used in 3D scripts, allowing you to define points, lines, arcs, circles and planar polygons
in the three-dimensional space.
HOTSPOT
HOTSPOT x, y, z [, unID [, paramReference, flags] [, displayParam]]
A 3D hotspot in the point (x, y, z).
unID: the unique identifier of the hotspot in the 3D script. It is useful if you have a variable number of hotspots.
paramReference: parameter that can be edited by this hotspot using the graphical hotspot based parameter editing method.
displayParam: parameter to display in the information palette when editing the paramRefrence parameter. Members of arrays can be
passed as well.
See Graphical Editing Using Hotspots for using HOTSPOT.
HOTLINE
HOTLINE x1, y1, z1, x2, y2, z2, unID
A status line segment between the points P1 (x1,y1,z1) and P2 (x2,y2,z2).
HOTARC
HOTARC r, alpha, beta, unID
A status arc in the x-y plane with its center at the origin from angle alpha to beta with a radius of r.
Alpha and beta are in degrees.
LIN_
LIN_ x1, y1, z1, x2, y2, z2
A line segment between the points P1 (x1,y1,z1) and P2 (x2,y2,z2).
RECT
RECT a, b
y
a
1 2 3
x
A polygon with n edges in the x-y plane. The coordinates of nodei are (xi, yi, 0).
Restriction of parameters:
n >= 3
POLY_
POLY_ n, x1, y1, s1, ... xn, yn, sn
Similar to the normal POLY statement, but any of the edges can be omitted.
si: status code that allows you to control the visibility of polygon edges and side surfaces. You can also define holes and create segments
and arcs in the polyline using special constraints.
si = 0: the edge starting from the (xi,yi) apex will be omitted,
si = 1: the edge will be shown,
si = -1: is used to define holes directly.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes” for details.
y y
n n
1 2 3 1 2 3
x x
Restriction of parameters:
n >= 3
PLANE
PLANE n, x1, y1, z1, ... xn, yn, zn
A polygon with n edges on an arbitrary plane. The coordinates of nodei are (xi, yi, zi). The polygon must be planar in order to get a correct
shading/rendering result, but the interpreter does not check this condition.
Restriction of parameters:
n >= 3
PLANE_
PLANE_ n, x1, y1, z1, s1, ... xn, yn, zn, sn
Similar to the PLANE command, but any of the edges can be omitted as in the POLY_ command.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes”.
Restriction of parameters:
n >= 3
CIRCLE
CIRCLE r
A circle in the x-y plane with its center at the origin and with a radius of r.
ARC
ARC r, alpha, beta
y
be
ta r
alpha
x
An arc (in Wireframe mode) or sector (in other modes) in the x-y plane with its center at the origin from angle alpha to beta with a radius
of r. alpha and beta are in degrees.
• PYRAMID
• REVOLVE
Shapes generated from two polylines:
• RULED
• SWEEP
• TUBE
• TUBEA
The first polyline is always in the x-y plane. Points are determined by two coordinates; the third value is the status (see below). The second
polyline (for RULED, SWEEP, TUBE and TUBEA) is a space curve. Apices are determined by three coordinate values.
Shape generated from four polylines:
• COONS
Shape generated from any number of polylines:
• MASS
General restrictions for polylines
• Adjacent vertices must not be coincident (except RULED).
• The polyline must not intersect itself (this is not checked by the program, but hidden line removal and rendering will be incorrect).
• The polylines may be either open or closed. In the latter case, the first node must be repeated after the last one of the contour.
Masking
Mask values are used to show or hide characteristic surfaces and/or edges of the 3D shape. The mask values are specific to each element and
you can find a more detailed description in their corresponding sections/chapters.
mask:
mask = j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j1, j2, j3, j4 represent whether the surfaces are present (1) or omitted (0).
j5, j6, j7 represent whether the edges are visible (1) or invisible (0).
j1: base surface.
j2: top surface.
j3: side surface.
j4: other side surface.
j5: base edges.
j6: top edges.
j7: cross-section/surface edges are visible, surface is not smooth.
To enable all faces and edges, set mask value to 127.
Status
Status values are used to state whether a given point of the polyline will leave a sharp trace of its rotation path behind.
0: latitudinal arcs/lateral edges starting from the node are all visible.
1: latitudinal arcs/lateral edges starting from the node are used only for showing the contour.
-1: for EXTRUDE only: it marks the end of the enclosing polygon or a hole, and means that the next node will be the first node of another hole.
Additional status codes allow you to create segments and arcs in the polyline using special constraints.
See the section called “Additional Status Codes” for details.
To create a smooth 3D shape, set all status values to 1. Use status = 0 to create a ridge.
Other values are reserved for future enhancements.
EXTRUDE
EXTRUDE n, dx, dy, dz, mask,
x1, y1, s1,
...,
xn, yn, sn
z
j6
j2
j3
n j1
1
x
2 j5
General prism using a polyline base in the x-y plane.
The displacement vector between bases is (dx, dy, dz). This is a generalization of the PRISM command and the SLAB command. The base
polyline is not necessarily closed, as the lateral edges are not always perpendicular to the x-y plane. The base polyline may include holes, just
like PRISM_. It is possible to control the visibility of the contour edges.
n: the number of polyline nodes.
mask: controls the existence of the bottom, top and (in case of an open polyline) side polygon.
mask = j1 + 2*j2 + 4*j3 + 16*j5 + 32*j6 + 64*j7 + 128*j8, where each j can be 0 or 1.
j1: base surface is present,
j2: top surface is present,
j3: side (closing) surface is present,
j5: base edges are visible,
j6: top edges are visible.
j7: cross-section edges are visible, surface is articulated,
j8: cross-section edges are sharp, the surface smoothing will stop here in OpenGL and rendering.
si: status of the lateral edges or marks the end of the polygon or of a hole. You can also define arcs and segments in the polyline using
additional status code values:
0: lateral edge starting from the node is visible,
1: lateral edges starting from the node are used for showing the contour,
-1: marks the end of the enclosing polygon or a hole, and means that the next node will be the first vertex of another hole.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes” for details.
Restriction of parameters:
n > 2
Example 1:
Example 2:
PYRAMID
PYRAMID n, h, mask, x1, y1, s1, ... xn, yn, sn
j3
n j1
1
x
2 j5
Pyramid based on a polyline in the x-y plane. The peak of the pyramid is located at (0, 0, h).
n: number of polyline nodes.
mask: controls the existence of the bottom and (in the case of an open polyline) side polygon.
mask = j1 + 4*j3 + 16*j5, where each j can be 0 or 1.
j1: base surface is present,
j3: side (closing) surface is present,
j5: base edges are visible.
si: status of the lateral edges.
0: lateral edges starting from the node are all visible,
1: lateral edges starting from the node are used for showing the contour.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes” for details.
Restriction of parameters:
h > 0 and n > 2
Example:
REVOLVE
REVOLVE n, alpha, mask, x1, y1, s1, ... xn, yn, sn
j1
Y
n
j4
j6
j3 j5
alpha
j2
2
1
Surface generated by rotating a polyline defined in the x-y plane around the x axis. The profile polyline cannot contain holes.
n: number of polyline nodes.
alpha: rotation angle in degrees
mask: controls the existence of the bottom, top and (in the case of alpha < 360°) side polygons.
mask = j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7 + 128*j8, where each j can be 0 or 1.
j1: closing disc at first point is present,
j2: closing disc at last point is present,
j3: base closing side (in profile plane) is present,
j4: end closing side (in revolved plane) is present,
j5: base edges (in profile plane) are visible,
j6: end edges (in revolved plane) are visible,
j7: cross-section edges are visible, surface is articulated,
j8: cross-section edges are sharp, the surface smoothing will stop here in OpenGL and rendering.
si: status of the latitudinal arcs.
0: latitudinal arcs starting from the node are all visible,
1: latitudinal arcs starting from the node are used for showing the contour,
2: when using ArchiCAD or Z-buffer Rendering Engine and setting Smooth Surfaces, the latitudinal edge belonging to this point defines
a break. This solution is equivalent to the definition of additional nodes. The calculation is performed by the compiler. With other rendering
methods, it has the same effect as using 0.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes” for details.
Restriction of parameters:
n >= 2
yi >= 0.0
yi = 0.0 and yi+1 = 0.0 cannot stand at the same time
(i.e., the y value of two neighboring nodes cannot be zero at the same time).
REVOLVE{2}
REVOLVE{2} n, alphaOffset, alpha, mask, sideMat,
x1, y1, s1, mat1, ... xn, yn, sn, matn
Advanced version of REVOLVE. The profile polygon will always be closed and may have holes. The start angle and the face materials are
controllable.
alphaOffset: rotation start angle.
alpha: rotation angle length in degrees, may be negative.
mask: controls the existence of the bottom, top and (in the case of alpha < 360°) side polygons.
mask = 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7 + 128*j8, where each j can be 0 or 1.
j3: base closing side (in profile plane) is present,
j4: end closing side (in revolved plane) is present,
j5: base edges (in profile plane) are visible,
j6: end edges (in revolved plane) are visible,
j7: cross-section edges are visible, surface is articulated,
j8: cross-section edges are sharp, the surface smoothing will stop here in OpenGL and rendering.
sideMat: material of the closing faces.
mati: material of the face generated from the i-th edge.
Example 1:
ROTY -90
REVOLVE 22, 360, 1+64,
0, 1.982, 0,
0.093, 2, 0,
0.144, 1.845, 0,
0.220, 1.701, 0,
0.318, 1.571, 0,
0.436, 1.459, 0,
0.617, 1.263, 0,
0.772, 1.045, 0,
0.896, 0.808, 0,
0.987, 0.557, 0,
1.044, 0.296, 0,
1.064, 0.030, 0,
1.167, 0.024, 0,
1.181, 0.056, 0,
1.205, 0.081, 0,
1.236, 0.096, 0,
1.270, 0.1, 0,
1.304, 0.092, 0,
1.333, 0.073, 0,
1.354, 0.045, 0,
1.364, 0.012, 0,
1.564, 0, 0
Example 2:
workaround without status code 2: the same result with status code 2:
ROTY -90 ROTY -90
REVOLVE 26, 180, 16+32, REVOLVE 18, 180, 48,
7, 1, 0, 7, 1, 0,
6.0001, 1, 1, 6, 1, 2,
6, 1, 0, 5.5, 2, 2,
5.9999, 1.0002, 1, 5, 1, 2,
5.5001, 1.9998, 1, 4, 1, 2,
5.5, 2, 0, 3+cos(15), 1+sin(15), 1,
5.4999, 1.9998, 1, 3+cos(30), 1+sin(30), 1,
5.0001, 1.0002, 1, 3+cos(45), 1+sin(45), 1,
5, 1, 0, 3+cos(60), 1+sin(60), 1,
4.9999, 1, 1, 3+cos(75), 1+sin(75), 1,
4.0001, 1, 1, 3, 2, 1,
4, 1, 0, 3+cos(105), 1+sin(105), 1,
3+cos(15), 1+sin(15), 1, 3+cos(120), 1+sin(120), 1,
3+cos(30), 1+sin(30), 1, 3+cos(135), 1+sin(135), 1,
3+cos(45), 1+sin(45), 1, 3+cos(150), 1+sin(150), 1,
3+cos(60), 1+sin(60), 1, 3+cos(165), 1+sin(165), 1,
3+cos(75), 1+sin(75), 1, 2, 1, 2,
3, 2, 1, 1, 1, 0
3+cos(105), 1+sin(105), 1,
3+cos(120), 1+sin(120), 1,
3+cos(135), 1+sin(135), 1,
3+cos(150), 1+sin(150), 1,
3+cos(165), 1+sin(165), 1,
2, 1, 0,
1.9999, 1, 0,
1, 1, 0
RULED
RULED n, mask,
u1, v1, s1, ... un, vn, sn,
x1, y1, z1, ... xn, yn, zn
RULED{2}
RULED{2} n, mask,
u1, v1, s1, ... un, vn, sn,
x1, y1, z1, ... xn, yn, zn
Z
j2
j6
1
n j3
n
j1
X 1
2 j5
RULED is a surface based on a planar curve and a space curve having the same number of nodes. The planar curve polyline cannot have any
holes. Straight segments connect the corresponding nodes of the two polylines.
This is the only GDL element allowing the neighboring nodes to overlap.
The second version, RULED{2}, checks the direction (clockwise or counterclockwise) in which the points of both the top polygon and base
polygon were defined, and reverses the direction if necessary. (The original RULED command takes only the base polygon into account, which
can lead to errors.)
n: number of polyline nodes in each curve.
ui, vi: coordinates of the planar curve nodes.
xi, yi, zi: coordinates of the space curve nodes.
mask: controls the existence of the bottom, top and side polygon and the visibility of the edges on the generator polylines. The side polygon
connects the first and last nodes of the curves, if any of them are not closed.
mask = j1 + 2*j2 + 4*j3 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j1: base surface is present,
j2: top surface is present (not effective if the top surface is not planar),
j3: side surface is present (a planar quadrangle or two triangles),
j5: edges on the planar curve are visible,
j6: edges on the space curve are visible,
j7: edges on the surface are visible, surface is not smooth.
si: status of the lateral edges.
0: lateral edges starting from the node are all visible,
1: lateral edges starting from the node are used for showing the contour.
Restriction of parameters:
n > 1
Example:
R=3
RULED 16, 1+2+4+16+32,
cos(22.5)*R, sin(22.5)*R, 0,
cos(45)*R, sin(45)*R, 0,
cos(67.5)*R, sin(67.5)*R, 0,
cos(90)*R, sin(90)*R, 0,
cos(112.5)*R, sin(112.5)*R, 0,
cos(135)*R, sin(135)*R, 0,
cos(157.5)*R, sin(157.5)*R, 0,
cos(180)*R, sin(180)*R, 0,
cos(202.5)*R, sin(202.5)*R, 0,
cos(225)*R, sin(225)*R, 0,
cos(247.5)*R, sin(247.5)*R, 0,
cos(270)*R, sin(270)*R, 0,
cos(292.5)*R, sin(292.5)*R, 0,
cos(315)*R, sin(315)*R, 0,
cos(337.5)*R, sin(337.5)*R, 0,
cos(360)*R, sin(360)*R, 0,
cos(112.5)*R, sin(112.5)*R, 1,
cos(135)*R, sin(135)*R, 1,
cos(157.5)*R, sin(157.5)*R, 1,
cos(180)*R, sin(180)*R, 1,
cos(202.5)*R, sin(202.5)*R, 1,
cos(225)*R, sin(225)*R, 1,
cos(247.5)*R, sin(247.5)*R, 1,
cos(270)*R, sin(270)*R, 1,
cos(292.5)*R, sin(292.5)*R, 1,
cos(315)*R, sin(315)*R, 1,
cos(337.5)*R, sin(337.5)*R, 1,
cos(360)*R, sin(360)*R, 1,
cos(22.5)*R, sin(22.5)*R, 1,
cos(45)*R, sin(45)*R, 1,
cos(67.5)*R, sin(67.5)*R, 1,
cos(90)*R, sin(90)*R, 1
SWEEP
SWEEP n, m, alpha, scale, mask,
u1, v1, s1, ... un, vn, sn,
x1, y1, z1, ... xm, ym, zm
Surface generated by a polyline sweeping along a polyline space curve path.
The plane of the polyline follows the path curve. The space curve has to start from the x-y plane. If this condition is not met, it is moved
along the z axis to start on the x-y plane.
The cross-section at point (xi, yi, zi) is perpendicular to the space curve segment between points (xi-1, yi-1, zi-1) and (xi, yi, zi).
SWEEP can be used to model the spout of a teapot and other complex shapes.
n: number of polyline nodes.
m: number of path nodes.
alpha: incremental polyline rotation on its own plane, from one path node to the next one.
scale: incremental polyline scale factor, from one path node to the next one.
ui, vi: coordinates of the base polyline nodes.
xi, yi, zi: coordinates of the path curve nodes.
mask: controls the existence of the bottom and top polygons’ surfaces and edges.
mask = j1 + 2*j2 + 4*j3 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j1: base surface is present,
j2: top surface is present,
j3: side surface is present,
j5: base edges are visible,
j6: top edges are visible,
j7: cross-section edges are visible, surface is articulated.
j2
z j6
m
2 y
j3
x
n 1 j1
1
2 j5
Example:
TUBE
TUBE n, m, mask,
u1, w1, s1,
...
un, wn, sn,
x1, y1, z1, angle1,
...
xm, ym, zm, anglem
Surface generated by a polyline sweeping along a space curve path without distortion of the generating cross-section. The internal connection
surfaces are rotatable in the U-W plane of the instantaneous U-V-W coordinate system.
V axis: approximates the tangent of the generator curve at the corresponding point.
W axis: perpendicular to the V axis and pointing upward with respect to the local z axis.
U axis: perpendicular to the V and W axes and forms with them a right-hand sided Cartesian coordinate system.
If the V axis is vertical, then the W direction is not correctly defined. The W axis in the previous path node is used for determining a horizontal
direction.
The cross-section polygon of the tube measured at the middle of the path segments is always equal to the base polygon (u1, w1, ... un, wn).
Section polygons in joints are situated in the bisector plane of the joint segments. The base polygon must be closed.
n: number of the polyline nodes.
m: number of the path nodes.
ui, wi: coordinates of the base polyline nodes.
xi, yi, zi: coordinates of the path curve nodes.
anglei: rotation angle of the cross-section.
mask: controls the existence of the bottom and top polygons’ surfaces and edges.
mask = j1 + 2*j2 + 16*j5 + 32*j6 + 64*j7 + 128*j8, where each j can be 0 or 1.
j1: base surface is present,
j2: end surface is present,
j5: base edges (at x2, y2, z2) are visible,
j6: end edges (at xm-1, ym-1, zm-1) are visible,
j7: cross-section edges are visible, surface is articulated,
j8: cross-section edges are sharp, the surface smoothing will stop here in OpenGL and rendering.
W
m
m-1
V
W
1
2
alpha
U
U
Example 1:
Example 2:
Example 3:
TUBE 3, 7, 16+32,
0, 0, 0,
-0.5, 0, 0,
0, 0.5, 0,
0.2, 0, -0.2, 0,
0, 0, 0, 0,
0, 0, 5, 0,
3, 0, 5, 0,
3, 4, 5, 0,
3, 4, 0, 0,
3, 3.8, -0.2, 0
TUBEA
TUBEA n, m, mask,
u1, w1, s1,
...
un, wn, sn,
x1, y1, z1,
...
xm, ym, zm
2
n m-1 m
1
1
bisector plane
TUBEA is a surface generated by a polyline sweeping along a space curve path with a different algorithm than that of the TUBE command.
The section polygon generated in each joint of the path curve is equal with the base polygon (u1, w1, ... un, wn) and is situated in the bisector
plane of the projections of the joint segments to the local x-y plane. The base polygon can be opened: in this case the section polygons will
be generated to reach the local x-y plane as in the case of REVOLVE surfaces.
The cross section of the tube measured at the middle of the path segments can be different from the base polygon.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes” for details.
Example:
TUBEA 9, 7, 1 + 2 + 16 + 32,
-1, 1, 0,
0, 2, 0,
0.8, 2, 0,
0.8, 1.6, 0,
0.8001, 1.6, 1,
3.2, 1.6, 0,
3.2, 2, 0,
4, 2, 0,
5, 1, 0,
0, -7, 0,
0, 0, 0,
4, 0, 1,
9, 3, 2.25,
9, 10, 2.25,
14, 10, 2.25,
20, 15, 5
COONS
COONS n, m, mask,
x11, y11, z11, ... x1n, y1n, z1n,
x21, y21, z21, ... x2n, y2n, z2n,
x31, y31, z31, ... x3m, y3m, z3m,
x41, y41, z41, ... x4m, y4m, z4m
A Coons patch generated from four boundary curves.
mask:
mask = 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j3: edges of the 1st boundary (x1, y1, z1) are visible,
j4: edges of the 2nd boundary (x2, y2, z2) are visible,
j5: edges of the 3rd boundary (x3, y3, z3) are visible,
j6: edges of the 4th boundary (x4, y4, z4) are visible,
j7: edges on surface are visible, surface is not smooth.
Y
1(n) 4(m)
2(n)
3(m)
X
Restriction of parameters:
n > 1, m > 1
Example 1:
COONS 6, 6, 4+8+16+32+64,
! 1st boundary, n=6
0, 0, 5,
1, 0, 4,
2, 0, 3,
3, 0, 2,
4, 0, 1,
5, 0, 0,
! 2nd boundary, n=6
0, 5, 0,
1, 5, 1,
2, 5, 2,
3, 5, 3,
4, 5, 4,
5, 5, 5,
! 3rd boundary, m=6
0, 0, 5,
0, 1, 4,
0, 2, 3,
0, 3, 2,
0, 4, 1,
0, 5, 0,
! 4th boundary, m=6
5, 0, 0,
5, 1, 1,
5, 2, 2,
5, 3, 3,
5, 4, 4,
5, 5, 5
Example 2:
COONS 7, 6, 4+8+16+32+64,
! 1st boundary, n=7
1, 2, 0,
0.5, 1, 0,
0.2, 0.5, 0,
-0.5, 0, 0,
0.2, -0.5, 0,
0.5, -1, 0,
1, -2, 0,
! 2nd boundary, n=7
6, 10, -2,
6.5, 4, -1.5,
5, 1, -1.2,
4, 0, -1,
5, -1, -1.2,
6.5, -4, -1.5,
6, -10, -2,
! 3rd boundary, m=6
1, 2, 0,
2, 4, -0.5,
3, 6, -1,
4, 8, -1.5,
5, 9, -1.8,
6, 10, -2,
! 4th boundary, m=6
1, -2, 0,
2, -4, -0.5,
3, -6, -1,
4, -8, -1.5,
5, -9, -1.8,
6, -10, -2
MASS
MASS top_material, bottom_material, side_material,
n, m, mask, h,
x1, y1, z1, s1,
...
xn, yn, zn, sn,
xn+1, yn+1, zn+1, sn+1,
...
xn+m, yn+m, zn+m, sn+m
The equivalent of the shape generated by the Mesh tool in ArchiCAD.
top_material, bottom_material, side_material: name/index of the top, bottom and side materials.
n: the number of nodes in the mass polygon.
m: the number of nodes on the ridges.
h: the height of the skirt (can be negative).
xi, yi, zi: the coordinates of the nodes.
mask:
mask = j1 + 4*j3 + 16*j5 + 32*j6 + 64*j7 + 128*j8, where each j can be 0 or 1.
j1: base surface is present,
j3: side surfaces are present,
j5: base and side edges are visible,
j6: top edges are visible,
j7: top edges are visible, top surface is not smooth,
j8: all ridges will be sharp, but the surface is smooth.
Zij
b
1
1 i m X
si: similar to the PRISM_ command Additional status codes allow you to create segments and arcs in the planar polyline using special
constraints.
See the section called “Additional Status Codes” for details.
Restriction of parameters:
n >= 3, m >= 0
Example:
POLYROOF
POLYROOF defaultMat, k, m, n,
offset, thickness, applyContourInsidePivot,
z_1, ... z_k,
pivotX_1, pivotY_1, pivotMask_1,
roofAngle_11, gableOverhang_11, topMat_11, bottomMat_11,
...
roofAngle_1k, gableOverhang_1k, topMat_1k, bottomMat_1k,
...
pivotX_m, pivotY_m, pivotMask_m,
roofAngle_m1, gableOverhang_m1, topMat_m1, bottomMat_m1,
...
roofAngle_mk, gableOverhang_mk, topMat_mk, bottomMat_mk,
contourX_1, contourY_1, contourMask_1, edgeTrim_1, edgeAngle_1, edgeMat_1,
...
contourX_n, contourY_n, contourMask_n, edgeTrim_n, edgeAngle_n, edgeMat_n
The command creates a possibly multi-level roof in which the geometry is controlled by multiple parameters, most importantly the roof angles
and two polygons: a pivot polygon and a contour polygon. At the pivot polygon, the roof is slanted at the roof angle. It ascends until it either
reaches the height of the next level or until it is eliminated by its sides encountering one another. It also descends downwards, until it reaches
the contour polygon, which cuts off parts of the roof outside of it. The contour polygon can also be used to cut holes in the roof.
defaultMat: the numeric index of the "inner" material of the roof. This material becomes visible at gables and at cut surfaces, e.g. if
the roof is cut by a plane.
k: the number of levels.
m: the number of pivot polygon vertices.
n: the number of contour polygon vertices.
offset: an offset for the thickness of the roof.
thickness: the thickness of the roof.
applyContourInsidePivot: if set to 0, the outer contour polygon is only applied outside of the pivot polygon. If set to 1, the outer
contour polygon is applied both inside and outside of the pivot polygon. The 0 setting may be used to prevent the contour polygon from
cutting off gables that lean outwards.
z_i: the Z coordinate of a level.
pivotX_i, pivotY_i: coordinates of the pivot polygon vertices.
pivotMask_i:
0: marks a normal vertex,
-1: marks the end of the current pivot subpolygon (outer contour or hole). Data for such a vertex must be a copy of the data for the first
vertex of the subpolygon. A polygon must always be closed with a mask value of -1, even if there are no holes inside it.
roofAngle_i: angle of slant for a pivot edge on a given level. If the angle >= 90, that part of the roof becomes a gable.
gableOverhang_i: at the sides of a gable, the roof can extend over a lower level of itself. The amount of this can be controlled by this
parameter, which has effect only on gables (roofAngle >= 90) that are at least on the second level of the roof.
topMat_i, bottomMat_i: the numeric index of the materials for the top and bottom of the roof.
contourX_i, contourY_i: coordinates of the contour polygon vertices.
contourMask_i:
0: marks a normal vertex,
-1: marks the end of the current contour subpolygon (outer contour or hole). Data for such a vertex must be a copy of the data for the
first vertex of the subpolygon. A polygon must always be closed with a mask value of -1, even if there are no holes inside it.
edgeTrim_i: specifies the way the edge is trimmed by the contour polygon. Possible values are:
0: Vertical,
1: Perpendicular to roof plane,
2: Horizontal,
3: Custom angle to roof plane.
edgeAngle_i: the custom angle of the edge to the roof plane. It has effect only if edgeTrim is set to 3 (custom angle to roof plane).
edgeMat_i: numeric index of the material at the edge the roof, where the contour cuts it
defaultEdgeMat
topMat22
bottomMat42
bottomMat41
topMat21
gableOverhang12 sideMat2
edgeMat1
topMat11
Figure 1: Materials
roofAngle22
roofAngle21
edgeAngle4
Figure 2: Angles
Example:
POLYROOF "Paint-01",
2, 5, 5,
0, 0.2, 0,
! Start of z values ------------------------------------------------------------
2.7,
3.2,
! Start of pivot polygon -------------------------------------------------------
2, 8, 0,
45, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
90, 0.5, ind(material, "Paint-01"), ind(material, "Paint-01"),
2, 3, 0,
45, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
65, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
10, 3, 0,
45, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
65, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
10, 8, 0,
45, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
65, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
2, 8, -1,
45, 0, ind(material, "Paint-01"), ind(material, "Paint-01"),
90, 0.5, ind(material, "Paint-01"), ind(material, "Paint-01"),
!Start of contour polygon -----------------------------------------------------
1.5, 8.5, 0, 0, 0, ind(material, "Paint-01"),
1.5, 2.5, 0, 0, 0, ind(material, "Paint-01"),
10.5, 2.5, 0, 0, 0, ind(material, "Paint-01"),
10.5, 8.5, 0, 0, 0, ind(material, "Paint-01"),
1.5, 8.5, -1, 0, 0, ind(material, "Paint-01")
Output: see Figure 1
EXTRUDEDSHELL
EXTRUDEDSHELL topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
defaultMat,
n, offset, thickness, flipped, trimmingBody,
x_tb, y_tb, x_te, y_te, topz, tangle,
x_bb, y_bb, x_be, y_be, bottomz, bangle,
preThickenTran_11, preThickenTran_12, preThickenTran_13, preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23, preThickenTran_24,
preThicakenTran_31, preThickenTran_32, preThickenTran_33, preThickenTran_34,
x_1, y_1, s_1,
...
x_n, y_n, s_n
Surface created by first extruding a polyline, then adding thickness to it.
topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4: Materials on the top, bottom and four sides
of the object.
defaultMat: the numeric index of the "inner" material of the object. This material becomes visible at cut surfaces, e.g. if the object is
cut by a plane.
n: number of profile base polyline vertices
offset: an offset for the thickness of the shell. Can not be negative.
thickness: the thickness of the shell.
flipped:
1: if the shell should be flipped,
0: otherwise.
trimmingBody:
1: if the shell is to be closed for trimming purposes,
0: otherwise.
x_tb, y_tb, x_te, y_te, topz, tangle: Specify the top plane of the extrusion. The meaning of the parameters is the same
as for the SPRISM_{2} command.
x_bb, y_bb, x_be, y_be, bottomz, bangle: Specify the bottom plane of the extrusion. The meaning of the parameters
is the same as for the SPRISM_{2} command.
preThickenTran_i: a transformation executed before thickening. See the XFORM command for the meaning of parameters.
x_i, y_i, s_i: X and Y coordinates and status values for the base profile polyline. See the EXTRUDE command for details. The
visibility of the sides can not be controlled with the status.
Example:
REVOLVEDSHELL
REVOLVEDSHELL topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
defaultMat,
n, offset, thickness, flipped, trimmingBody, alphaOffset, alpha,
preThickenTran_11, preThickenTran_12, preThickenTran_13, preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23, preThickenTran_24,
preThickenTran_31, preThickenTran_32, preThickenTran_33, preThickenTran_34,
x_1, y_1, s_1,
...
x_n, y_n, s_n
Surface created by rotating a polyline defined in the x-y plane around the x axis, then adding thickness to it.
topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4: Materials on the top, bottom and four sides
of the object.
defaultMat: the numeric index of the "inner" material of the object. This material becomes visible at cut surfaces, e.g. if the object is
cut by a plane.
n: number of profile base polyline vertices.
offset: an offset for the thickness of the shell. Can not be negative.
thickness: the thickness of the shell.
flipped:
1: if the shell should be flipped,
0: otherwise.
trimmingBody:
1: if the shell is to be closed for trimming purposes,
0: otherwise.
alphaOffset: the sweep start angle.
alpha: the sweep angle length in degrees, may be negative.
preThickenTran_i: a transformation executed before thickening. See the XFORM command for the meaning of parameters.
x_i, y_i, s_i: X and Y coordinates and status values for the base profile polyline. See the EXTRUDE command for details. The
visibility of the sides can not be controlled with the status.
Example:
REVOLVEDSHELL "Paint-02", "Surf-Stucco Yellow", "Surf-Stucco Yellow", "Surf-Stucco Yellow",
"Surf-Stucco Yellow", "Surf-Stucco Yellow", "Surf-Stucco Yellow",
2, 0.00, 0.30, 0, 0, 0.00, 270.00,
! -- transformation matrix ---------------------------------------------
0.00, 0.00, -1.00, 0.00,
0.00, 1.00, 0.00, 0.00,
1.00, 0.00, 0.00, 0.00,
! -- profile polyline --------------------------------------------------
4.00, 0.00, 2,
0.00, 4.00, 2
REVOLVEDSHELLANGULAR
REVOLVEDSHELLANGULAR topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
defaultMat,
n, offset, thickness, flipped, trimmingBody, alphaOffset, alpha,
segmentationType, nOfSegments,
preThickenTran_11, preThickenTran_12, preThickenTran_13,
preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23,
preThickenTran_24,
preThickenTran_31, preThickenTran_32, preThickenTran_33,
preThickenTran_34,
x_1, y_1, s_1,
...
x_n, y_n, s_n
An angular variant of the REVOLVEDSHELL command. Parameters are the same with the addition of the following extra parameters:
segmentationType: Must be either 1 or 2.
1: means that 360 degrees of revolution is split into nOfSegments segments,
2: means that the actual revolution angle (given by the alpha parameter) is split into nOfSegments segments.
nOfSegments: Number of segments, see segmentationType parameter above.
RULEDSHELL
RULEDSHELL topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4, defaultMat,
n, m, g,
offset, thickness, flipped, trimmingBody,
preThickenTran_11, preThickenTran_12, preThickenTran_13, preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23, preThickenTran_24,
preThickenTran_31, preThickenTran_32, preThickenTran_33, preThickenTran_34,
firstpolyX_1, firstpolyY_1, firstpolyS_1,
...
firstpolyX_n, firstpolyY_n, firstpolyS_n,
secondpolyX_1, secondpolyY_1, secondpolyS_1,
...
secondpolyX_m, secondpolyY_m, secondpolyS_m,
profile2Tran_11, profile2Tran_12, profile2Tran_13, profile2Tran_14
profile2Tran_21, profile2Tran_22, profile2Tran_23, profile2Tran_24
profile2Tran_31, profile2Tran_32, profile2Tran_33, profile2Tran 34
generatrixFirstIndex_1, generatrixSecondIndex_1,
...
generatrixFirstIndex_g, generatrixSecondIndex_g
Surface created by connecting two polylines.
topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4: Materials on the top, bottom and four sides
of the object.
defaultMat: the numeric index of the "inner" material of the object. This material becomes visible at cut surfaces, e.g. if the object is
cut by a plane.
n: number of vertices for first profile base polyline.
m: number of vertices for second profile base polyline.
g: number of generatrices.
offset: an offset for the thickness of the shell. Can not be negative.
thickness: thickness of the shell.
flipped:
1: if the shell should be flipped,
0: otherwise
preThickenTran: a transformation executed before thickening. See the XFORM command for the meaning of parameters.
trimmingBody:
1: if the shell is to be closed for trimming purposes,
0: otherwise
firstpolyX, firstpolyY, firstpolyS: X and Y coordinates and status values for the first base profile polyline. See the
REVOLVE command for details.
secondpolyX, secondpolyY, secondpolyS: X and Y coordinates and status values for the second base profile polyline. See
the REVOLVE command for details.
profile2Tran: a transformation executed on the second profile. Use this transformation to position the second profile relative to the
first one. See the XFORM command for the meaning of parameters.
generatrixFirstIndex, generatrixSecondIndex: pairs of indexes, one from the first polyline and one from the second
polyline. The vertexes with the given indexes will be connected with a line.
Example:
is smoother.) The effect of the light is limited along the axis by the distance1 and distance2 clipping values. The distance_falloff parameter
controls the decrease in intensity depending on the distance. (Zero value means a constant intensity; bigger values are used for stronger falloff.)
GDL transformations affect only the starting point and the direction of the light.
shadow: controls the light’s shadow casting.
0: light casts no shadows,
1: light casts shadows.
beta
alpha
radius
intensity
dist1
dist2
Restriction of parameters:
alpha <= beta <= 80°
The following parameter combinations have special meanings:
radius = 0, alpha = 0, beta = 0: A point light, it radiates light in every direction and does not cast any shadows. The shadow
and angle_falloff parameters are ignored, the values shadow = 0, angle_falloff = 0 supposed.
radius > 0, alpha = 0, beta = 0: A directional light with parallel beams.
r > 0, alpha = 0, beta > 0: A directional light with parallel beam and conic falloff.
Light definition can contain optional additional data definitions after the ADDITIONAL_DATA keyword. Additional data has a name (namei)
and a value (valuei), which can be an expression of any type, even an array. If a string parameter name ends with the substring "_file", its value
is considered to be a file name and will be included in the archive project.
Different meanings of additional data can be defined and used by ArchiCAD or Add-Ons to ArchiCAD.
Example 1:
LIGHT 1.0,0.2,0.3, ! RGB
1, ! shadow on
1.0, ! radius
45.0, 60.0, ! angle1, angle2
0.3, ! angle_falloff
1.0, 10.0, ! distance1, distance2
0.2 ! distance_falloff
Example 2:
The library part dialog box for lights in ArchiCAD:
PICTURE
PICTURE expression, a, b, mask
A string type expression means a file name, a numeric expression or the index of a picture stored in the library part. A 0 index is a special
value that refers to the preview picture of the library part. Other pictures can only be stored in library parts when saving the project or selected
elements containing pictures as GDL Objects.
Indexed picture reference cannot be used in the MASTER_GDL script when attributes are merged into the current attribute set. The image
is fitted on a rectangle treated as a RECT in any other 3D projection method.
mask: alpha + distortion
alpha: alpha channel control.
0: do not use alpha channel; picture is a rectangle,
1: use alpha channel; parts of the picture may be transparent.
distortion: distortion control.
0: fit the picture into the given rectangle,
2: fit the picture in the middle of the rectangle using the natural aspect ratio of the picture,
4: fill the rectangle with the picture in a central position using natural aspect ratio of the picture.
3D TEXT ELEMENTS
TEXT
TEXT d, 0, expression
A 3D representation of the value of a string or numeric type expression in the current style.
See the [SET] STYLE command and the DEFINE STYLE command.
d: thickness of the characters in meters.
In the current version of GDL, the second parameter is always zero.
Note: For compatibility with the 2D GDL script, character heights are always interpreted in millimeters in DEFINE STYLE statements.
Example 1:
Example 2:
name = "Grand"
ROTX 90
ROTY -30
TEXT 0.003, 0, name
ADDX STW (name)/1000
ROTY 60
TEXT 0.003, 0, "Hotel"
RICHTEXT
RICHTEXT x, y,
height, 0, textblock_name
A 3D representation of a previously defined TEXTBLOCK. For more details, see the TEXTBLOCK command.
x, y: X-Y coordinates of the richtext location.
height: thickness of the characters in meters.
textblock_name: the name of a previously defined TEXTBLOCK.
In the current version of GDL, the 4th parameter is always zero.
PRIMITIVE ELEMENTS
The primitives of the 3D data structure are VERT, VECT, EDGE, PGON and BODY. The bodies are represented by their surfaces and the
connections between them. The information to execute a 3D cutaway comes from the connection information.
Indexing starts with 1, and a BASE statement or any new body (implicit BASE statement) resets indices to 1. For each edge, the indices of the
adjacent polygons (maximum 2) are stored. Edges’ orientations are defined by the two vertices determined first and second.
Polygons are lists of edges with an orientation including the indices of the edges. These numbers can have a negative prefix. This means that
the given edge is used in the opposite direction. Polygons can include holes. In the list of edges, a zero index indicates a new hole. Holes must
not include other holes. One edge may belong to 0 to 2 polygons. In the case of closed bodies, the polygon’s orientation is correct if the edge
has different prefixes in the edge list of the two polygons.
The normal vectors of the polygons are stored separately. In the case of closed bodies, they point from the inside to the outside of the body.
The orientation of the edge list is counterclockwise (mathematical positive), if you are looking at it from the outside. The orientation of the
holes is opposite to that of the parent polygon. Normal vectors of an open body must point to the same side of the body.
To determine the inside and outside of bodies they must be closed. A simple definition for a closed body is the following: each edge has exactly
two adjacent polygons.
The efficiency of the cutting, hidden line removal or rendering algorithms is lower for open bodies. Each compound three-dimensional element
with regular parameters is a closed body in the internal 3D data structure.
Contour line searching is based on the status bits of edges and on their adjacent polygons. This is automatically set for compound curved
elements but it is up to you to specify these bits correctly in the case of primitive elements.
In the case of a simplified definition (vect = 0 or status < 0 in a PGON) the primitives that are referred to by others must precede their
reference. In this case, the recommended order is:
VERT (TEVE)
EDGE
(VECT)
PGON (PIPG)
COOR
BODY
Searching for adjacent polygons by the edges is done during the execution of the BODY command.
The numbering of VERTs, EDGEs, VECTs and PGONs is relative to the last (explicit or implicit) BASE statement.
Status values are used to store special information about primitives. Each single bit usually has an independent meaning in the status, but there
are some exceptions.
Given values can be added together. Other bit combinations than the ones given below are strictly reserved for internal use. The default for
each status is zero.
VERT
VERT x, y, z
A node in the x-y-z space, defined by three coordinates.
TEVE
TEVE x, y, z, u, v
Extension of the VERT command including a texture coordinate definition. Can be used instead of the VERT command if user-defined texture
coordinates are required instead of the automatic texture wrapping (see the COOR command).
x, y, z: coordinates of a node.
u, v: texture coordinates of the node (u, v) coordinates for each vertex of the current body must be specified and each vertex should have
only one texture coordinate. If VERT and TEVE statements are mixed inside a body definition, (u, v) coordinates are ineffective.
Note: The (u, v) texture coordinates are only effective in photorenderings, and not for vectorial fill mapping.
VECT
VECT x, y, z
Definition of the normal vector of a polygon by three coordinates. In case of a simplified definition (vect=0 in a PGON), these statements
can be omitted.
EDGE
EDGE vert1, vert2, pgon1, pgon2, status
Definition of an edge.
vert1, vert2: index of the endpoints. The vert1 and vert2 indices must be different and referenced to previously defined VERTs.
pgon1, pgon2: indices of the neighboring polygons. Zero and negative values have special meanings:
0: terminal or standalone edge,
< 0: possible neighbors will be searched for,
status: Status bits:
status = j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j1: invisible edge,
j2: edge of a curved surface.
Reserved status bits for future use:
j3: first edge of a curved surface (effective only when j2=1),
j4: last edge of a curved surface (effective only when j2=1),
j5: the edge is an arc segment,
j6: first segment of an arc (effective only when j4=1),
j7: last segment of an arc (effective only when j4=1).
PGON
PGON n, vect, status, edge1, edge2, ... edgen
Polygon definition.
n: number of edges in the edge list.
vect: index of the normal vector. It must refer to a previously defined VECT.
Note: If vect = 0, the program will calculate the normal vector during the analysis.
edge1, edge2, ... edgen: these indices must refer to previously defined EDGEs. A zero value means the beginning or the end
of a hole definition. A negative index changes the direction of the stored normal vector or edge to the opposite in the polygon. (The stored
vector or edge does not change; other polygons can refer to it using the original orientation with a positive index.)
status: Status bits:
status = j1 + 2*j2 + 16*j5 + 32*j6 + 64*j7 + 4*j3 + 8*j4, where each j can be 0 or 1.
j1: invisible polygon,
Local coordinate system of a BODY for the fill and texture mapping.
wrap: wrapping mode + projection type
Wrapping modes:
1: planar box (deprecated),
2: box,
3: cylindrical,
4: spherical,
5: same as the cylindrical fill mapping, but in rendering the top and the bottom surface will get a circular mapping,
6: planar.
Projection types:
256: the fill always starts at the origin of the local coordinate system,
1024: quadratic texture projection (recommended),
2048: linear texture projection based on the average distance,
4096: linear texture projection based on normal triangulation.
Note: The last three values are only effective with custom texture coordinate definitions (see the TEVE command).
vert1: index of a VERT, representing the origin of the local coordinate system.
vert2, vert3, vert4: indices of VERTs defining the three coordinate axes.
Use a minus sign (-) before VERT indices if they are used only for defining the local coordinate system.
X'
X Z'
Y'
BODY
BODY status
Composes a body defined with the above primitives.
status: Status bits:
status = j1 + 2*j2 + 4*j3 + 32*j6 + 64*j7, where each j can be 0 or 1.
Example:
z
5 8
6 7
1 4
y
2 3
x
1: Complete description
BASE
BASE
Resets counters for low-level geometric elements (VERT, TEVE, VECT, EDGE, PGON and PIPG) statements. Implicitly issued after every
compound element definition.
CUTTING IN 3D
CUTPLANE
CUTPLANE [x [, y [, z [, side [, status]]]]]
[statement1 ... statementn]
CUTEND
CUTPLANE{2}
CUTPLANE{2} angle [, status]
[statement1 ... statementn]
CUTEND
CUTPLANE{3}
CUTPLANE{3} [x [, y [, z [, side [, status]]]]]
[statement1 ... statementn]
CUTEND
Creates a cutting plane and removes the cut parts of enclosed shapes. CUTPLANE may have a different number of parameters.
If CUTPLANE has the following number of parameters:
0: x-y plane;
1: cutting plane goes across x axis, angle is between cutting plane and x-y plane;
2: cutting plane is parallel to z axis, crosses x axis and y axis at the given values;
3: cutting plane crosses the x, y and z axes at the given values;
4: the first three parameters are as above, with the addition of the side value as follows:
side: definition of the side to cut.
0: removes parts above cutting plane (default),
1: removes parts below cutting plane; in case of x-y, x-z, y-z, removes the parts in the negative direction of the axis.
status: status control of the cut surfaces.
status = j1 + 2*j2 + 4*j3 + 256*j9, where each j can be 0 or 1.
j1: use the attributes of the body for the generated polygons and edges.
j2: generated cut polygons will be treated as normal polygons.
j3: generated cut edges will be invisible.
j9: vertices on the cutting plane are treated as removed.
The cut (without the side parameter) removes parts above the cutting plane. If the first three parameters define the x-y, x-z or y-z plane (for
example, 1.0, 1.0, 0.0 defines the x-y plane), the parts in the positive direction of the third axis are removed.
Any number of statements can be added between CUTPLANE and CUTEND. It is also possible to include CUTPLANEs in macros.
CUTPLANE parameters refer to the current coordinate system.
Transformations between CUTPLANE and CUTEND have no effect on this very cutting plane, but any successive CUTPLANEs will
be transformed. Therefore, it is recommended to use as many transformations to set up the CUTPLANE as necessary, then delete these
transformations before you define the shapes to cut.
If transformations used only to position the CUTPLANE are not removed, you may think that the CUTPLANE is at a wrong position when,
in reality, it is the shapes that have moved away.
Pairs of CUTPLANE-CUTEND commands can be nested, even within loops. If the final CUTEND is missing, its corresponding CUTPLANE
will be effective on all shapes until the end of the script.
Note 1: If CUTPLANE is not closed with CUTEND, all shapes may be entirely removed. That’s why you always get a warning message
about missing CUTENDs.
CUTPLANEs in macros affect shapes in the macro only, even if CUTEND is missing.
If a macro is called between CUTPLANE and CUTEND, the shapes in the macro will be cut.
Note 2: If you use CUTPLANE{2} with more than two parameters, then this will act like CUTPLANE.
Note 3: Prefer using CUTPLANE{3} instead of CUTPLANE. If you use CUTPLANE with 5 parameters, then the 4th parameter will be
omitted. For CUTPLANE{3}, this parameter has effect independently from the 5th parameter.
Example 1:
CUTPLANE 2, 2, 4
CUTPLANE -2, 2, 4
CUTPLANE -2, -2, 4
CUTPLANE 2, -2, 4
ADD -1, -1, 0
BRICK 2, 2, 4
DEL 1
CUTEND
CUTEND
CUTEND
CUTEND
Example 2:
CUTPLANE CUTPLANE 1, 1, 0, 1
SPHERE 2 SPHERE 2
CUTEND CUTEND
Example 3:
Example 4:
CUTPOLY
CUTPOLY n,
x1, y1, ... xn, yn
[, x, y, z]
[statement1
statement2
...
statementn]
CUTEND
Similarly to the CUTPLANE command, parameters of CUTPOLY refer to the current coordinate system. The polygon cannot be self-
intersecting. The direction of cutting is the Z axis or an optional (x, y, z) vector can be specified. Mirroring transformations affect the cutting
direction in an unexpected way - to get a more straightforward result, use the CUTFORM command.
Example 1:
ROTX 90
MULZ -1
CUTPOLY 3,
0.5, 1,
2, 2,
3.5, 1,
-1.8, 0, 1
DEL 1
BPRISM_ "Brick-Red", "Brick-Red", "Brick-White",
4, 0.9, 7,
0.0, 0.0, 15,
6.0, 0.0, 15,
6.0, 3.0, 15,
0.0, 3.0, 15
CUTEND
Example 2:
a=1.0
d=0.1
GOSUB "rect_cut"
ROTX 90
GOSUB "rect_cut"
DEL 1
ROTY -90
GOSUB "rect_cut"
DEL 1
BLOCK a, a, a
CUTEND
CUTEND
CUTEND
END
"rect_cut":
CUTPOLY 4,
d, d,
a-d, d,
a-d, a-d,
d, a-d
RETURN
Example 3:
ROTX 90
FOR i=1 TO 3
FOR j=1 TO 5
CUTPOLY 4,
0, 0, 1, 0,
1, 1, 0, 1
ADDX 1.2
NEXT j
DEL 5
ADDY 1.2
NEXT i
DEL NTR()-1
ADD -0.2, -0.2, 0
BRICK 6.2, 3.8, 1
FOR k=1 TO 15
CUTEND
NEXT k
DEL TOP
CUTPOLYA
CUTPOLYA n, status, d,
x1, y1, mask1, ... xn, yn, maskn [,
x, y, z]
[statement1
statement2
...
statementn]
CUTEND
Similar to the CUTPOLY definition, but with the possibility to control the visibility of the edges of the generated polygons. The cutting form
is a half-infinite tube with the defined polygonal cross-section. If the end of the cutting form hangs down into the body, it will cut out the
corresponding area.
j2 j3
Y
i
j1
i+1
Example:
ROTX 90
FOR i=1 TO 3
FOR j=1 TO 5
CUTPOLYA 6, 1, 0,
1, 0.15, 5,
0.15, 0.15, 900,
0, 90, 4007,
0, 0.85, 5,
0.85, 0.85, 900,
0, 90, 4007
ADDX 1
NEXT j
DEL 5
ADDY 1
NEXT i
DEL NTR()-1
ADD -0.2, -0.2, 0
BRICK 5.4, 3.4, 0.5
FOR k=1 TO 15
CUTEND
NEXT k
DEL TOP
CUTSHAPE
CUTSHAPE d [, status]
[statement1 statement2 ... statementn]
CUTEND
status: controls the treatment of the generated cut polygons. If not specified (for compatibility reasons) the default value is 3.
status = j1 + 2*j2, where each j can be 0 or 1.
j1: use the attributes of the body for the generated polygons and edges,
j2: generated cut polygons will be treated as normal polygons.
Example:
FOR i = 1 TO 5
ADDX 0.4 * i
ADDZ 2.5
CUTSHAPE 0.4
DEL 2
ADDX 0.4
NEXT i
DEL TOP
BRICK 4.4, 0.5, 4
FOR i = 1 TO 5
CUTEND
NEXT i
CUTFORM
CUTFORM n, method, status,
rx, ry, rz, d,
x1, y1, mask1, [mat1,]
...
xn, yn, maskn [, matn]
Similar to the CUTPOLYA definition, but with the possibility to control the form and extent of the cutting body.
method: controls the form of the cutting body.
1: prism shaped,
2: pyramidal,
3: wedge-shaped cutting body. The direction of the wedge’s top edge is parallel to the Y axis and its position is in rx, ry, rz (ry is ignored).
rx, ry, rz
rx, ry, rz rx, ry, rz
d d
d
z y z y
z y
x x
x
status: Controls the extent of the cutting body and the treatment of the generated cut polygons and new edges.
status = j1 + 2*j2 + 8*j4 + 16*j5 + 32*j6 + 64*j7 + 128*j8 + 256*j9, where each j can be 0 or 1.
j1: use the attributes of the body for the generated polygons and edges,
j2: generated cut polygons will be treated as normal polygons,
j4: define the limit of the cut (with j5),
j5: define the limit of the cut (with j4):
j6: generate a boolean intersection with the cutting body rather than a boolean difference. (can only be used with the CUTFORM
command),
j7: edges generated by the bottom of the cutting body will be invisible,
j8: edges generated by the top of the cutting body will be invisible,
j9: cutting shape has custom side materials (mati).
j4 = 0 and j5 = 0: finite cut
j4 = 0 and j5 = 1: semi-infinite cut
j4 = 1 and j5 = 1: infinite cut
rx, ry, rz: these three coordinates define the direction of cutting if the cutting form is prism-shaped; these three coordinates define
the top point of the pyramid if the method of cutting is pyramidal; rx-rz coordinates define the end edge of the wedge and ry is ignored
if the cutting from is wedge-shaped
d: defines the distance along rx, ry, rz to the end of the cut. If the cut is infinite, this parameter has no effect. If the cut is finite, then the start
of the cutting body will be at the local coordinate system and the body will end at a distance of d along the direction defined by rx, ry, rz.
If the cut is semi-infinite, then the start of the cutting body will be at a distance of d along the direction defined by rx, ry, rz, and the direction
of the semi-infinite cut will be in the opposite direction defined by rx, ry, rz.
mask: defines the visibility of the edges of the cutting body.
mask = j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 64*j7, where each j can be 0 or 1.
j1: the polygon will create a visible edge upon entry into the body being cut,
j2: the lengthwise edge of the cutting form will be visible,
j3: polygon will create a visible edge upon exiting the body being cut,
j4: the bottom edge of the cutting form will be visible,
j5: the top edge of the cutting form will be visible,
j7: controls the viewpoint dependent visibility of the lengthwise edge.
mati: side material of the cutting shape (when status j9 = 1)
A GDL solid is composed of one or more lumps that appear as separated bodies in the model. A lump has exactly one outer shell and may
contain voids. (Voids can be described as "negative" inner shells inside a lump.) The solid in the drawing below is composed of two lumps in
such a way that one of them contains a void.
GDL bodies such as BLOCK, SPHERE, etc., appear as outer shells in groups. By means of the following construction the user is capable of
putting more than one shell in a solid (note the BODY -1 statement):
GROUP "myGroup"
BLOCK 1,1,1
BODY -1
ADDX 1
BLOCK 1,1,1
ENDGROUP
The above solid contains two lumps; each of them is composed of one shell. Voids can be defined by means of primitives, or can occur as a
result of a Boolean difference (e.g. subtracting a small cube from the middle of a big one).
See also the section called “Primitive Elements”.
Although group operations are intended to work with solid objects, they can be applied to surfaces, wireframes or hybrid models, too. (Hybrid
models are basically surfaces that may contain edges without neighboring faces.) The result of the operations on such models are summarized
in the following tables:
Table 2. Difference (base\tool)
solid base surface base wireframe base hybrid base
solid tool solid result surface result wireframe result hybrid result
surface tool surface base (no effect) surface base (no effect) hybrid base (no effect) hybrid base (no effect)
wireframe tool wireframe base (no effect) hybrid base (no effect) wireframe base (no effect) hybrid base (no effect)
hybrid tool hybrid base (no effect) hybrid base (no effect) hybrid base (no effect) hybrid base (no effect)
Table 5. Sweeping
solid surface wireframe hybrid
valid result surface base (no effect) wireframe base (no effect) hybrid base (no effect)
Surfaces can be explicitly generated by using the MODEL SURFACE command, or implicitly by leaving out non-neighboring face polygons
from the model. Wireframes are produced either by using the MODEL WIRE statement or by defining objects without face polygons. Hybrid
models can only be generated indirectly by leaving out neighboring face polygons from the model.
In the majority of the cases the required model is solid. GDL bodies appear as shells in group definitions, so in order to achieve fast and reliable
operation, the geometric correctness of the generated shells is a critical issue. Handling degenerated objects loads the GDL engine and causes
the desired operation to take more time to complete. The main rule to be considered regarding the efficient use of GDL group operations
can be summarized as follows: model by conforming to existing physical presence of spatial objects. In practice this can be expressed by the
following guidelines:
• Avoid self-intersecting objects.
• Avoid self-touching objects (apply small gaps).
• Avoid zero-sized portions of objects (apply small thickness).
According to the above, these rules are to be followed for shells (defined by bodies), not for solids (defined by groups). (The solid produced
by the script in the Group construction above is modeled properly, since the constituent shells touch each other but the shells, themselves,
are geometrically correct.)
GROUP - ENDGROUP
GROUP "name"
[statement1 ... statementn]
ENDGROUP
Group definition. All bodies between the corresponding GROUP - ENDGROUP statements will be part of the "name" group. Groups are not
actually generated (placed), they can be used in group operations or placed explicitly using the PLACEGROUP command. Group definitions
cannot be nested, but macro calls containing group definitions and PLACEGROUP commands using other groups can be included.
Group names must be unique inside the current script. Transformations, cutplanes outside the group definition have no effect on the group
parts; transformations, cutplanes used inside have no effect on the bodies outside the definition. Group definitions are transparent to attribute
DEFINEs and SETs (pens, materials, fills); attributes defined/set before the definition and those defined/set inside the definition are all
effective.
ADDGROUP
ADDGROUP (g_expr1, g_expr2)
ADDGROUP{2} (g_expr1, g_expr2, edgeColor, materialId, materialColor)
SUBGROUP
SUBGROUP (g_expr1, g_expr2)
SUBGROUP{2} (g_expr1, g_expr2, edgeColor, materialId, materialColor)
ISECTGROUP
ISECTGROUP (g_expr1, g_expr2)
ISECTGROUP{2} (g_expr1, g_expr2, edgeColor, materialId, materialColor)
g_expr1: identifier of the base group.
g_expr2: identifier of the tool group.
edgeColor: the color of the new edge when it differs from 0.
materialId: the material of the new face when it differs from 0.
materialColor: the color of the new face when the materialId is 0 and it differs from 0.
ISECTLINES
ISECTLINES (g_expr1, g_expr2)
Group operations: addition, subtraction, intersection, intersection lines. The return value is a new group, which can be placed using the
PLACEGROUP command, stored in a variable or used as a parameter in another group operation. Group operations can be performed
between previously defined groups or groups result from any other group operation. g_expr1, g_expr2 are group type expressions. Group
type expressions are either group names (string expressions) or group type variables or any combination of these in operations which result in
groups. Note that the operations ADDGROUP, ISECTGROUP and ISECTLINES are symmetric in their parameterization while the order
of parameter matters for SUBGROUP.
PLACEGROUP
PLACEGROUP g_expr
Placing a group is the operation in which bodies are actually generated. Cutplanes and transformations are effective, the group expression is
evaluated and the resulting bodies are stored in the 3D data structure.
KILLGROUP
KILLGROUP g_expr
Clears the bodies of the specified group from the memory. After a KILLGROUP operation the group becomes empty. The names of killed
groups cannot be reused in the same script. Clearing is executed automatically at the end of the interpretation or when returning from macro
calls. For performance reasons this command should be used when a group is no longer needed.
Example:
GROUP "box"
BRICK 1, 1, 1
ENDGROUP
GROUP "sphere"
ADDZ 1
SPHERE 0.45
DEL 1
ENDGROUP
GROUP "semisphere"
ELLIPS 0.45, 0.45
ENDGROUP
GROUP "brick"
ADD -0.35, -0.35, 0
BRICK 0.70, 0.70, 0.35
DEL 1
ENDGROUP
! Subtracting the "sphere" from the "box"
result_1=SUBGROUP("box", "sphere")
! Intersecting the "semisphere" and the "brick"
result_2=ISECTGROUP("semisphere", "brick")
! Adding the generated bodies
result_3=ADDGROUP(result_1, result_2)
PLACEGROUP result_3
KILLGROUP "box"
KILLGROUP "sphere"
KILLGROUP "semisphere"
KILLGROUP "brick"
SWEEPGROUP
SWEEPGROUP (g_expr, x, y, z)
Returns a group that is created by sweeping the group parameter along the given direction. The command works for solid models only.
SWEEPGROUP{2} (g_expr, x, y, z)
The difference between SWEEPGROUP and SWEEPGROUP{2} is that in the former case the actual transformation matrix is applied again
to the direction vector of the sweeping operation with respect to the current coordinate system. (In the case of SWEEPGROUP, the current
transformation is applied to the direction vector twice with respect to the global coordinate system.)
Example:
GROUP "the_sphere"
SPHERE 1
ENDGROUP
PLACEGROUP SWEEPGROUP{2} ("the_sphere", 2, 0, 0)
addx 5
PLACEGROUP SWEEPGROUP{3} ("the_sphere", 2, 0, 0, 4, 0, 4, 1)
del 1
CREATEGROUPWITHMATERIAL
CREATEGROUPWITHMATERIAL (g_expr, repl_directive, pen, material)
Returns a group that is created by replacing all pens and/or materials in group g_expr.
g_expr: group expression identifying the base group.
repl_directive:
repl_directive = j1 + 2*j2, where each j can be 0 or 1.
j1: replace pen,
j2: replace material.
BINARY 3D
BINARY
BINARY mode [, section]
Special command to include inline binary objects into a GDL macro. A set of vertices, vectors, edges, polygons, bodies and materials is read
from a special section of the library part file. These are transformed according to the current transformations and merged into the 3D model.
The data contained in the binary section is not editable by the user.
mode: defines pencolor and material attribute definition usage.
0: the current PEN and MATERIAL settings are in effect,
1: the current PEN and MATERIAL settings have no effect. The library part will be shown with the stored colors and material definitions.
Surface appearance is constant,
2: the stored PEN and MATERIAL settings are used, non-defined materials are replaced by current settings,
3: the stored PEN and MATERIAL settings are used, non-defined materials are replaced by the stored default attributes.
section: index of the binary part, from 1 to 16.
0: you can refer simultaneously to all the existing binary parts,
1: Only these sections can be saved from within GDL, BINARY commands without the section argument will also refer to this,
2-16: can be used by third party tools.
If you open files with a different data structure (e.g., DXF or ZOOM) their 3D description will be converted into binary format.
You can save a library part in binary format from the main Library Part editing window through the Save as... command. If the Save in binary
format checkbox is marked in the Save as... dialog box, the GDL text of the current library part will be replaced with a binary description.
Hint: Saving the 3D model after a 3D cutaway operation in binary format will save the truncated model. This way, you can create cut shapes.
You can only save your library part in binary format if you have already generated its 3D model.
By replacing the GDL description of your library part with a binary description you can considerably reduce the 3D conversion time of the
item. On the other hand, the binary 3D description is not parametric and takes more disk space than an algorithmic GDL script.
2D SHAPES
This chapter presents the commands used for generating shapes in 2D from simple forms such as lines and arcs to complex polygons and splines, and the definition of text
elements in 2D. It also covers the way binary data is handled in 2D and the projection of the shape created by a 3D script into the 2D view, thereby ensuring coherence
between the 3D and 2D appearance of objects. Further commands allow users to place graphic elements into element lists created for calculations.
DRAWING ELEMENTS
HOTSPOT2
HOTSPOT2 x, y [, unID [, paramReference, flags] [, displayParam]]
y
(x,y)
x
unID: the unique identifier of the hotspot in the 2D Script. Useful if you have a variable number of hotspots.
paramReference: parameter that can be edited by this hotspot using the graphical hotspot based parameter editing method.
displayParam: parameter to display in the information palette when editing the paramRefrence parameter. Members of arrays can be
passed as well.
See Graphical Editing Using Hotspots for information on using HOTSPOT2.
HOTLINE2
HOTLINE2 x1, y1, x2, y2
Status line definition between two points. Status line is a line which is recognized by the intelligent cursor but it is not visible in itself.
HOTARC2
HOTARC2 x, y, r, startangle, endangle
Status arc definition with its centerpoint at (x, y) from the angle startangle to endangle, with a radius of r. Status arc is an arc which is recognized
by the intelligent cursor but it is not visible in itself.
LINE2
LINE2 x1, y1, x2, y2
Line definition between two points.
y (x2, y2)
(x1, y1)
RECT2
RECT2 x1, y1, x2, y2
Rectangle definition by two nodes. The two points are on the diagonal of the rectangle, the sides are parallel to current X and Y axes.
y (x2, y2)
(x1, y1)
POLY2
POLY2 n, frame_fill, x1, y1, ... xn, yn
An open or closed polygon with n nodes.
2
1
x
Restriction of parameters:
n >= 2
n: number of nodes.
x1, y1, ... xn, yn: coordinates of each nodes.
frame_fill:
frame_fill = j1 + 2*j2 + 4*j3, where each j can be 0 or 1.
j1: draw contour
j2: draw fill
j3: close an open polygon
POLY2_
POLY2_ n, frame_fill, x1, y1, s1, ... xn, yn, sn
y
2
1
x
Similar to the POLY2 command, but any of the edges can be omitted. If si = 0, the edge starting from the (xi,yi) apex will be omitted.
If si = 1, the vertex should be shown. si = -1 is used to define holes directly. You can also define arcs and segments in the polyline
using additional status code values.
Restriction of parameters:
n >= 2
n: number of nodes.
x1, y1, ... xn, yn: coordinates of each nodes.
frame_fill:
frame_fill = j1 + 2*j2 + 4*j3 + 8*j4 + 32*j6 + 64*j7, where each j can be 0 or 1.
j1: draw contour,
j2: draw fill,
j3: close an open polygon,
j4: local fill orientation,
j6: fill is cut fill (default is drafting fill),
j7: fill is cover fill (only if j6 = 0, default is drafting fill).
si: Status values:
si = j1 + 16*j5 + 32*j6, where each j can be 0 or 1.
j1: next segment is visible,
j5: next segment is inner line (if 0, generic line),
j6: next segment is contour line (effective only if j5 is not set),
-1: end of a contour.
Default line property for POLY2_ lines is 0 (generic line), the LINE_PROPERTY command has no effect on POLY2_ edges. Additional status
codes allow you to create segments and arcs in the planar polyline using special constraints.
See the section called “Additional Status Codes” for details.
POLY2_A
POLY2_A n, frame_fill, fill_pen,
x1, y1, s1, ..., xn, yn, sn
POLY2_B
POLY2_B n, frame_fill,
fill_pen, fill_background_pen,
x1, y1, s1, ..., xn, yn, sn
Advanced versions of the POLY2_ command, with additional parameters: the fill pen and the fill background pen. All other parameters are
similar to those described at the POLY2_ command.
fill_pen: fill pencolor number.
distortion_flags = j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
The valid value for distortion_flags is between 0 and 127. Don’t use value out of this range.
j1: the fill origin’s X coordinate is the global origin’s X coordinate, meaningful only when j4 is set. The fillOrigo is the origin (0,0) projected
on the line of the (mxx, mxy) vector,
j2: the fill origin’s Y coordinate is the global origin’s Y coordinate, meaningful only when j4 is set,
j3: create circular distortion using the innerRadius parameter,
j4: use local orientation, use the distortion matrix (mij parameters),
j5: (effective for symbol fills only) reset the pattern’s X size to the defined X vector’s length (mxx, mxy),
j6: (effective for symbol fills only) reset the pattern’s Y size to the defined Y vector’s length (myx, myy),
j7: (effective for symbol fills only) keep proportion of symbol fill pattern; effective only if one of j5 and j6 is set.
innerRadius: radius for circular fill distortion; the origin of the base circle will be placed on the Y fill axis in the (0, -innerRadius) position.
ARC2
ARC2 x, y, r, alpha, beta
An arc with its centerpoint at (x, y) from the angle alpha to beta, with a radius of r.
Alpha and beta are in degrees.
y
be
ta r
alpha
(x, y)
CIRCLE2
CIRCLE2 x, y, r
A circle with its center at (x, y), with a radius of r.
y r
(x, y)
SPLINE2
SPLINE2 n, status, x1, y1,
angle1, ..., xn, yn, anglen
anglei
y
i
1 (xi,yi)
n
x
Spline, with n control points. The tangent of the spline in the control point (xi, yi) is defined by anglei, the angle with the x axis in degrees.
Restriction of parameters:
n >= 2
si: Status values:
0: default,
1: closed spline; the last and first nodes of the spline will become connected, thus closing the spline,
2: automatically smoothed spline; the angle parameter value of the nodes between the first and the last node is not used when generating
the spline. An internal autosmoothing algorithm is used.
Example 1:
SPLINE2 5, 2,
0, 0, 60,
1, 2, 30,
1.5, 1.5, -30,
3, 4, 45,
4, 3, -45
Example 2:
n = 5
FOR i = 1 TO n
SPLINE2 4, 0,
0.0, 2.0, 135.0,
-1.0, 1.8, 240.0,
-1.0, 1.0, 290.0,
0.0, 0.0, 45.0
MUL2 -1.0, 1.0
SPLINE2 4, 0,
0.0, 2.0, 135.0,
-1.0, 1.8, 240.0,
-1.0, 1.0, 290.0,
0.0, 0.0, 45.0
DEL 1
SPLINE2 4, 0,
0.0, 2.0, 100.0,
0.0, 2.5, 0.0,
0.0, 2.4, 270.0,
0.0, 2.0, 270.0
ADD2 2.5, 0
NEXT i
SPLINE2A
SPLINE2A n, status, x1, y1, angle1, length_previous1, length_next1,
...
xn, yn, anglen, length_previousn,
length_nextn
ti
ex
_n
anglei
len
y
v
i
i
re
(xi,yi)
_p
1 n
len x
Extension of the SPLINE2 command (Bézier spline), used mainly in automatic 2D script generation because of its complexity.
For more details, see “Lines / Drawing Splines” in the Documentation chapter of the ArchiCAD Help.
si: Status values:
0: default,
1: closed spline; the last and first nodes of the spline will become connected, thus closing the spline,
2: automatically smoothed spline; the angle, length_previousi and length_nexti parameter values of the nodes between the first and the
last node are not used when generating the spline. An internal autosmoothing algorithm is used.
xi, yi: control point coordinates.
length_previousi, length_nexti: tangent lengths for the previous and the next control points.
anglei: tangent direction angle.
Example:
SPLINE2A 9, 2,
0.0, 0.0, 0.0, 0.0, 0.0,
0.7, 1.5, 15, 0.9, 1.0,
1.9, 0.8, 72, 0.8, 0.3,
1.9, 1.8, 100, 0.3, 0.4,
1.8, 3.1, 85, 0.4, 0.5,
2.4, 4.1, 352, 0.4, 0.4,
3.5, 3.3, 338, 0.4, 0.4,
4.7, 3.7, 36, 0.4, 0.8,
6.0, 4.6, 0, 0.0, 0.0
PICTURE2
PICTURE2 expression, a, b, mask
PICTURE2{2}
PICTURE2{2} expression, a, b, mask
Can be used in 2D similarly to the PICTURE command in 3D. Unlike in 3D, the mask values have no effect on 2D pictures.
A string type expression means a file name, a numerical expression means an index of a picture stored in the library part. A 0 index is a special
value, it refers to the preview picture of the library part. For PICTURE2{2} mask = 1 means that exact white colored pixels are transparent.
Other pictures can only be stored in library parts when saving the project or selected elements containing pictures as GDL objects.
TEXT ELEMENT
TEXT2
TEXT2 x, y, expression
The value of the calculated numerical or string type expression is written in the set style at the x, y coordinates.
See also the [SET] STYLE command and the DEFINE STYLE command.
ArchiCAD
(x,y)
RICHTEXT2
RICHTEXT2 x, y, textblock_name
Place a previously defined TEXTBLOCK.
For more details, see the TEXTBLOCK command.
x, y: X-Y coordinates of the richtext location.
textblock_name: the name of a previously defined TEXTBLOCK
BINARY 2D
FRAGMENT2
FRAGMENT2 fragment_index, use_current_attributes_flag
FRAGMENT2 ALL, use_current_attributes_flag
The fragment with the given index is inserted into the 2D Full View with the current transformations. If ALL is specified, all fragments are
inserted.
use_current_attributes_flag: defines whether or not the current attributes will be used.
0: the fragment appears with the color, line type and fill type defined for it,
1: the current settings of the script are used instead of the color, line type and fill type of the fragment.
3D PROJECTIONS IN 2D
PROJECT2
PROJECT2 projection_code, angle, method
PROJECT2{2}
PROJECT2{2} projection_code, angle, method [, backgroundColor,
fillOrigoX, fillOrigoY, filldirection]
Creates a projection of the 3D script in the same library part and adds the generated lines to the 2D parametric symbol. The 2nd version
PROJECT2{2}, together with a previous [SET] FILL command, allows the user to control the fill background, origin and direction of
the resulting drawing from the 2D script. The SET FILL 0 shortcut to get an empty fill does not work in this case, you need to reference
an actual empty fill.
projection_code: the type of projection.
3: Top view,
4: Side view,
6: Frontal axonometry,
7: Isometric axonometry,
8: Monometric axonometry,
9: Dimetric axonometry,
-3: Bottom view,
-6: Frontal bottom view,
-7: Isometric bottom view,
-8: Monometric bottom view,
-9: Dimetric bottom view.
angle: the azimuth angle set in the 3D Projection Settings dialog box.
method: the chosen imaging method.
1: wireframe,
2: hidden lines (analytic),
3: shading,
16: addition modifier: draws vectorial hatches (effective only in hidden line and shaded mode),
32: addition modifier: use current attributes instead of attributes from 3D (effective only in shading mode),
64: addition modifier: local fill orientation (effective only in shading mode),
128: addition modifier: lines are all inner lines (effective only together with 32). Default is generic,
256: addition modifier: lines are all contour lines (effective only together with 32, if 128 is not set). Default is generic,
512: addition modifier: fills are all cut (effective only together with 32). Default is drafting fills,
1024: addition modifier: fills are all cover (effective only together with 32, if 512 is not set). Default is drafting fills.
LINE_TYPE "DASHED"
ARC2 0, 0, A-B/3, 0, E
ROT2 E
ADD2 A-B/3, 0
LINE2 0, 0, -0.05, -0.1
LINE2 0, 0, 0.05, -0.1
DEL 2
3D
FOR i=1 TO n
prism 4, D,
-B/3, -B/2,
-B/3, B/2,
A-B/3, B/8,
A-B/3, -B/8
ADDZ D
ROTz E/(n-1)
NEXT i
DEL n*2
PROJECT2{3}
PROJECT2{3} projection_code, angle, method, parts [, backgroundColor,
fillOrigoX, fillOrigoY, filldirection][[,]
PARAMETERS name1=value1, ... namen=valuen]
Creates a projection of the 3D script in the same library part and adds the generated lines to the 2D parametric symbol. The third version,
PROJECT2{3}, adds the possibility to define which parts of the projected model are required and to control separately the attributes of the
cut and view part, including the line type. You can also generate the projection with actual parameters set in the command.
method: the chosen imaging method.
1: wireframe,
2: hidden lines (analytic),
3: shading,
16: addition modifier: draws vectorial hatches (effective only in hidden line and shaded mode),
32: addition modifier: use current attributes instead of attributes from 3D (effective only in shading mode),
64: addition modifier: local fill orientation (effective only in shading mode),
128: addition modifier: lines are all inner lines (effective only together with 32). Default is generic.
256: addition modifier: lines are all contour lines (effective only together with 32, if 128 is not set). Default is generic.
512: addition modifier: fills are all cut (effective only together with 32). Default is drafting fills.
1024: addition modifier: fills are all cover (effective only together with 32, if 512 is not set). Default is drafting fills.
2048: addition modifier: modifiers 16, 32, 64, 128, 256, 512, 1024 and fill attribute parameters are effective only for the view part of the
projection. By default they are effective for all parts.
4096: addition modifier: modifiers 16, 32, 64, 128, 256, 512, 1024 and fill attribute parameters are effective only for the cut part of the
projection. By default they are effective for all parts.
8192: addition modifier: cut fills are slanted
Known limitation: lines of the cut part cannot be treated separately, only all lines together can be set to be inner or contour.
parts: defines the parts to generate. The 15 value means all parts.
parts = j1 + 2*j2 + 4*j3 + 8*j4, where each j can be 0 or 1.
The j1, j2, j3, j4 numbers represent whether the corresponding parts of the projected model are present (1) or omitted (0):
j1: cut polygons (with default fill attributes defined by SECT_FILL) (effective only in shading mode),
j2: cut polygon edges,
j3: view polygons,
j4: view polygon edges.
4096: addition modifier: modifiers 16, 32, 64, 128, 256, 512, 1024 and fill attribute parameters are effective only for the cut part of the
projection. By default they are effective for all parts,
8192: addition modifier: cut fills are slanted.
-1 0 x
To edit an angle type parameter, in 3D four hotspots must be defined with types 4, 5, 6 and 7. The plane of the angle is perpendicular to the
vector that goes from the center hotspot to the reference hotspot. The positive direction in measuring the angle is counter-clockwise if we look
at the plane from the reference hotspot. In 2D the plane is already given, so the reference hotspot is ignored, and the positive direction of
measuring the angle is by default counter-clockwise. This can be changed to clockwise by setting the 512 attribute flag for the center hotspot
(type 6). To be consistent, the vectors from the center hotspot to the moving and the base hotspots must be perpendicular to the vector from
the center to the reference hotspot. The moving hotspot must be placed at an angle determined by the associated parameter measured from
the base hotspot around the center hotspot.
Moving (5)
alpha
If several sets of hotspots are defined to edit the same parameter, hotspots are grouped together in the order of the execution of the hotspot
commands. If the editable attribute is set for a base hotspot, the user can also edit the parameter by dragging the base hotspot. Since the base
hotspot is supposed to be fixed in the object’s coordinate frame (i.e. its location must be independent of the parameter that is attached to it),
the whole object is dragged or rotated along with the base point. (As the parameter’s value is changing, the moving hotspot will not change
its location.)
Two length type sets of hotspots can be combined to allow editing of two parameters with only one dragging. If two are combined, the motion
of the hotspot is no longer constrained to a line but to the plane determined by the two lines of each set of length editing hotspots. In 3D, the
combination of three sets of length editing hotspots allows the hotspot to be placed anywhere in space. The two lines must not be parallel to
each other, and the three lines must not be on the same plane. A combined parameter editing operation is started if, at the location of the picked
point, there are two editable hotspots (moving or editable base) with different associated parameters. If parameters are designed for combined
editing, the base and reference hotspots are not fixed in the object’s coordinate frame, but must move as the other parameter’s value changes.
See illustration and example 2.
BaseC
BaseC
user drags the hotspot here
RefC
C MovingC
RefC
C MovingC
MovingD
MovingD
D
54o
D
origin
(C=0, D=0)
origin RefD BaseD
(C=0, D=0)
RefD
BaseD
RECT2 0, 0, A, B
RECT2 0, 0, sideX, sideY
HOTSPOT2 sideX, 0, 1, sideY, 1
HOTSPOT2 sideX, -0.1, 2, sideY, 3
HOTSPOT2 sideX, sideY, 3, sideY, 2
HOTSPOT2 0, sideY, 4, sideX, 1
HOTSPOT2 -0.1, sideY, 5, sideX, 3
HOTSPOT2 sideX, sideY, 6, sideX, 2
!2D SCRIPT:
HOTSPOT2 -1, 0, 1
HOTSPOT2 1, 0, 2
HOTSPOT2 0, 0, 3, corner_y, 1+128
HOTSPOT2 0, -1, 4, corner_y, 3
HOTSPOT2 0, corner_y, 5, corner_y, 2
LINE2 -1, 0, 1, 0
LINE2 -1, 0, 0, corner_y
LINE2 1, 0, 0, corner_y
!3D SCRIPT:
HOTSPOT -1, 0, 0, 1
HOTSPOT -1, 0, 0.5, 2
HOTSPOT 1, 0, 0, 3
HOTSPOT 1, 0, 0.5, 4
HOTSPOT 0, 0, 0, 5, corner_y, 1+128
HOTSPOT 0, -1, 0, 6, corner_y, 3
HOTSPOT 0, corner_y, 0, 7, corner_y, 2
HOTSPOT 0, 0, 0.5, 8, corner_y, 1+128
HOTSPOT 0, -1, 0.5, 9, corner_y, 3
HOTSPOT 0, corner_y, 0.5, 10, corner_y, 2
PRISM_ 4, 0.5,
-1, 0, 15,
1, 0, 15,
0, corner_y, 15,
-1, 0, -1
!2D SCRIPT:
HOTSPOT2 -1, 0, 1
HOTSPOT2 1, 0, 2
HOTSPOT2 corner_x, 0, 3, corner_y, 1+128
HOTSPOT2 corner_x, -1, 4, corner_y, 3
HOTSPOT2 corner_x, corner_y, 5, corner_y, 2
HOTSPOT2 0, corner_y, 3, corner_x, 1+128
HOTSPOT2 -1, corner_y, 4, corner_x, 3
HOTSPOT2 corner_x, corner_y, 5, corner_x, 2
LINE2 -1, 0, 1, 0
LINE2 -1, 0, corner_x, corner_y
LINE2 1, 0, corner_x, corner_y
!3D SCRIPT:
HOTSPOT -1, 0, 0, 1
HOTSPOT -1, 0, 0.5, 2
HOTSPOT 1, 0, 0, 3
HOTSPOT 1, 0, 0.5, 4
HOTSPOT corner_x, 0, 0, 5, corner_y, 1+128
HOTSPOT corner_x, -1, 0, 6, corner_y, 3
HOTSPOT corner_x, corner_y, 0, 7, corner_y, 2
HOTSPOT 0, corner_y, 0, 8, corner_x, 1+128
HOTSPOT -1, corner_y, 0, 9, corner_x, 3
HOTSPOT corner_x, corner_y, 0, 10, corner_x, 2
HOTSPOT corner_x, 0, 0.5, 11, corner_y, 1+128
HOTSPOT corner_x, -1, 0.5, 12, corner_y, 3
HOTSPOT corner_x, corner_y, 0.5, 13, corner_y, 2
HOTSPOT 0, corner_y, 0.5, 14, corner_x, 1+128
HOTSPOT -1, corner_y, 0.5, 15, corner_x, 3
HOTSPOT corner_x, corner_y, 0.5, 16, corner_x, 2
PRISM_ 4, 0.5,
-1, 0, 15,
1, 0, 15,
corner_x, corner_y, 15,
-1, 0, -1
STATUS CODES
Status codes introduced in the following pages allow users to create segments and arcs in planar polylines using special constraints.
Planar polylines with status codes at nodes are the basis of many GDL elements: POLY2_, POLY2_A, POLY2_B, POLY2_B{2},
POLY2_B{3}, POLY2_B{4}, POLY2_B{5}, POLY_, PLANE_, PRISM_, CPRISM_, BPRISM_, FPRISM_, HPRISM_, SPRISM_,
SLAB_, CSLAB_, CROOF_, EXTRUDE, PYRAMID, REVOLVE, SWEEP, TUBE, TUBEA
Status codes allow you:
• to control the visibility of planar polyline edges
• to define holes in the polyline
• to control the visibility of side edges and surfaces
• to create segments and arcs in the polyline
0 8
1 9
2 10
3 11
4 12
5 13
6 14
7 15
si=-1 is used to define holes directly into the prism. It marks the end of the contour and the beginning of a hole inside of the contour. It
is also used to indicate the end of one hole’s contour and the beginning of another. Coordinates before that value must be identical to the
coordinates of the first point of the contour/hole. If you have used the -1 mask value, the last mask value in the parameter list must be -1,
marking the end of the last hole.
The holes must be disjoint and internal intersections are forbidden in the polygon for a correct shading/rendering result.
Note
Resolution of arcs is controlled by directives described in the section called “Directives for 3D and 2D Scripts”. In case of the POLY2_
command, if the resolution is greater than 8, it generates real arcs; otherwise all generated arcs will be segmented.
x,y
dy
dx
100
l
a
200
l
300
(x1,y1)
600
Close polyline
0, 0, 700,
700
Set tangent
ex, ey, 800,
ey
ex
800
Set centerpoint
x0, y0, 900,
x0,y0
900
x,y
1000
2000
3000
x,y
4000 a
4000
Example 1:
Example 2:
Example 3:
EXTRUDE 3, 1, 1, 3, 1+2+4+16+32,
0, 0, 900,
3, 360, 4001,
2, 360, 4000
Example 4:
ROTY-90
REVOLVE 9, 180, 16+32,
7, 1, 0,
6, 1, 0,
5.5, 2, 0,
5, 1, 0,
4, 1, 0,
3, 1, 900, ! set centerpoint
0, 180, 4001, ! arc using startpoint, centerpoint and angle
2, 1, 0,
1, 1, 0
ATTRIBUTES
In the first part of this chapter, directives influencing the interpretation of GDL statements are presented. Directives may define the smoothness
used for cylindrical elements, representation mode in the 3D view or the assignment of an attribute (color, material, text style, etc.) for the
subsequent shapes. Inline attribute definition is covered in the second part. This feature allows you to assign to your objects customized materials,
textures, fill patterns, line types and text styles that are not present in the current attribute set of your project.
DIRECTIVES
The influence of directives on the interpretation of the subsequent GDL statements remains in effect until the next directive or the end of the
script. Called scripts inherit the current settings: the changes have local influence. Returning from the script resets the settings as they were
before the macro call.
Example:
RESOL
RESOL n
Sets smoothness for cylindrical elements and arcs in polylines. Circles are converted to regular polygons having n sides.
Arc conversion is proportional to this.
After a RESOL statement, any previous RADIUS and TOLER statements lose their effect.
Restriction of parameters:
n >= 3
Default:
RESOL 36
Example:
RESOL 5 RESOL 36
CYLIND 3.0, 1.0 CYLIND 3.0, 1.0
TOLER
TOLER d
Sets smoothness for cylindrical elements and arcs in polylines. The error of the arc approximation (i.e., the greatest distance between the
theoretical arc and the generated chord) will be smaller than d.
After a TOLER statement, any previous RADIUS and RESOL statements lose their effect.
Example:
Note
The RADIUS, RESOL and TOLER directives set smoothness for cylindrical 3D elements (CIRCLE, ARC, CYLIND, SPHERE,
ELLIPS, CONE, ARMC, ARME, ELBOW, REVOLVE) and arcs in 2D polylines using curved edges.
See the section called “Additional Status Codes”.
PEN
PEN n
Sets the color.
Restriction of parameters:
0 < n <= 255
Default:
PEN 1
if there is no PEN statement in the script.
(For library parts, default values come from the library part’s settings. If the script refers to a non-existing index, PEN 1 becomes the default
setting.)
LINE_PROPERTY
LINE_PROPERTY expr
Defines the property for all subsequently generated lines in the 2D script (RECT2, LINE2, ARC2, CIRCLE2, SPLINE2, SPLINE2A, POLY2,
FRAGMENT2commands) until the next LINE_PROPERTY statement. Default value is generic.
expr: possible values:
0: all lines are generic lines,
1: all lines are inner,
2: all lines are contour.
[SET] STYLE
[SET] STYLE name_string
[SET] STYLE index
All the texts generated afterwards will use that style until the next SET STYLE statement.
The index is a constant referring to a style stack in the internal data structure (negative indices mean indices in the data structure of materials
previously defined in the GDL script). This stack is modified during GDL analysis and can also be modified from within the program. The use
of the index instead of the style name is only recommended with the prior use of the IND function.
Default:
SET STYLE 0
(application font, size 5 mm, anchor = 1, normal face) if there is no SET STYLE statement in the script.
Default:
MODEL SOLID
Example: To illustrate the three modeling methods, consider the following three blocks:
MODEL WIRE
BLOCK 3,2,1
ADDY 4
MODEL SURFACE
BLOCK 3,2,1
ADDY 4
MODEL SOLID
BLOCK 3,2,1
After cutting them with a plane:
[SET] MATERIAL
[SET] MATERIAL name_string
[SET] MATERIAL index
All the surfaces generated afterwards will represent that material until the next MATERIAL statement. Surfaces in the BPRISM_, CPRISM_,
FPRISM_, HPRISM_, SPRISM_, CSLAB_, CWALL_, BWALL_, XWALL_, CROOF_, MASS, bodies are exceptions to this rule.
The index is a constant referring to a material stack in the internal data structure (negative indices mean indices in the data structure of materials
previously defined in the GDL script). This stack is modified during GDL analysis and can also be modified from within the program. The use
of the index instead of the material name is only recommended with the prior use of the IND function.
index 0 has a special meaning: surfaces use the color of the current pen and they have a matte appearance.
Default:
MATERIAL 0
if there is no MATERIAL statement in the script.
(For Library parts, default values are read from the Library part’s settings. If the script refers to a non-existing index, MATERIAL 0 becomes
the default setting.)
SECT_FILL
SECT_FILL fill, fill_background_pen,
fill_pen, contour_pen
or
SECT_ATTRS
SECT_ATTRS fill, fill_background_pen,
fill_pen, contour_pen [, line_type]
Defines the attributes used for the cut part of the 3D elements in the Section/Elevation window and the PROJECT2{3} command (for
compatibility reasons previous versions of the PROJECT2 command are not affected).
fill: fill name or index number.
fill_background_pen: fill background pencolor number.
fill_pen: fill pencolor number.
contour_pen: fill contour pencolor number.
line_type: line type of polygon edges.
SHADOW
SHADOW casting [, catching]
Controls the shadow casting of the elements in PhotoRendering and in vectorial shadow casting.
casting: ON, AUTO or OFF
ON: all the subsequent elements will cast shadows in all circumstances,
OFF: none of the subsequent elements will cast shadows in any circumstance,
AUTO: shadow casting will be determined automatically
Setting SHADOW OFF for hidden parts will spare memory space and processing time.
Setting SHADOW ON ensures that even tiny details will cast shadows.
catching: ON or OFF
This optional parameter controls the appearance of shadows (from other bodies) on surfaces.
If shadow casting isn't specified, the default will be AUTO.
Example:
SHADOW OFF
BRICK 1, 1, 1
ADDX 2
SHADOW ON
BRICK 1, 1, 2
ADDX 2
SHADOW OFF
BRICK 1, 1, 3
Default:
SET FILL 0
i.e., empty fill, if there is no SET FILL statement in the script.
[SET] LINE_TYPE
[SET] LINE_TYPE name_string
[SET] LINE_TYPE index
All the 2D lines generated afterwards will represent that line type (in lines, arcs, polylines) until the next SET LINE_TYPE statement. The
index is a constant that refers to a line type stack in the internal data structure. This stack is modified during GDL analysis and can also be
modified from the program. The use of the index instead of the line type name is only recommended with the prior use of the IND function.
Default:
SET LINE_TYPE 1
i. e., solid line, if there is no SET LINE_TYPE statement in the script.
Materials
DEFINE MATERIAL
DEFINE MATERIAL name type,
surface_red, surface_green, surface_blue
[, ambient_ce, diffuse_ce, specular_ce, transparent_ce,
shining, transparency_attenuation
[, specular_red, specular_green, specular_blue,
emission_red, emission_green, emission_blue, emission_att]]
[, fill_index [, fillcolor_index, texture_index]]
Note: This command can contain additional data definition.
See the section called “Additional Data” for details.
Any GDL script can include material definitions prior to the first reference to that material name. This material can only be used for 3D
elements in its own script and its second generation scripts.
name: name of the material.
type: type of the material. The actual number (n) of parameters that define the material is different, depending on the type. The meaning
of the parameters and their limits are explained in the examples’ comments.
0: general definition, n=16,
1: simple definition, n=9 (extra parameters are constants or calculated from given values),
2-7: predefined material types, n=3. The three values are the RGB components of the surface color. Other parameters are constants
or calculated from the color.
2: matte,
3: metal,
4: plastic,
5: glass,
6: glowing,
7: constant,
10: general definition with fill parameter, n=17,
11: simple definition with fill parameter, n=10,
12-17: predefined material types with fill parameter, n=4,
20: general definition with fill, color index of fill and index of texture parameters, n=19,
21: simple definition with fill, color index of fill and index of texture parameters, n=12,
22-27: predefined material types with fill, color index of fill and index of texture parameters, n=6.
20-27: Special meanings for types 20-27: If the pen number is zero, vectorial hatches will be generated with the active pen. Zero value
for a texture or fill index allows you to define materials without a vectorial hatch or texture.
DEFINE TEXTURE
DEFINE TEXTURE name expression, x, y, mask, angle
Any GDL script can include texture definition prior to the first reference to that texture name. The texture can be used only in the script in
which it was defined and its subsequent second generation scripts.
name: name of the texture.
expression: picture associated with the texture. A string expression means a file name, a numerical expression an index of a picture
stored in the library part. A 0 index is a special value which refers to the preview picture of the library part.
x: logical width of the texture.
y: logical height of the texture.
mask:
mask = j1 + 2*j2 + 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7 + 128*j8 + 256*j9, where each j can be 0 or 1.
Alpha channel controls (j1... j6):
j1: alpha channel changes the transparency of texture,
j2: Bump mapping or surface normal perturbation. Bump mapping uses the alpha channel to determine the amplitude of the surface
normal,
j3: alpha channel changes the diffuse color of texture,
j4: alpha channel changes the specular color of texture,
x
j7: the texture will be shifted randomly,
x
j8: mirroring in x direction,
x
j9: mirroring in y direction.
x
angle: angle of the rotation.
Example:
DEFINE TEXTURE "Brick" "Brick.PICT", 1.35, 0.3, 256+128, 35.0
Fills
DEFINE FILL
DEFINE FILL name [[,] FILLTYPES_MASK fill_types,]
pattern1, pattern2, pattern3, pattern4,
pattern5, pattern6, pattern7, pattern8,
spacing, angle, n,
frequency1, direction1, offset_x1, offset_y1, m1,
length11, ... length1m,
...
frequencyn, directionn, offset_xn,
lengthn1, ... lengthnm
Note 1: This command can contain additional data definition.
See the section called “Additional Data” for details.
Any GDL script may include fill definitions prior to the first reference to that fill name. The fill defined this way can be used only in the script
in which it was defined and its subsequent second generation-scripts.
lengthim
...
lengthi2
lengthi1 m line parts
Y
directioni
offset_yi freq
uen
cy
i freq
offset_xi X u enc
y
i
sp a
angle
ci n g
*y
*x
ci n g
sp a x
spacing: hatch spacing - defines a global scaling factor for the whole fill. All values will be multiplied by this number in both the x and
y direction.
angle: global rotation angle in degrees.
n: number of hatch lines.
frequencyi: frequency of the line (the distance between two lines is spacing * frequencyi).
diri: direction angle of the line in degrees.
offset_xi, offset_yi: offset of the line from the origin.
mi: number of line parts.
lengthij: length of the line parts (the real length is spacing * lengthij). Line parts are segments and spaces following each other. First
line part is a segment, zero length means a dot.
The bitmap pattern is only defined by the pattern1... pattern8 parameters and is used when the display options for Polygon Fills are set to
"Bitmap Pattern". To define it, choose the smallest unit of the fill, and represent it as dots and empty spaces using a rectangular grid with 8x8
locations. The 8 pattern parameters are decimal representations of the binary values in the lines of the grid (a dot is 1, an empty space is 0).
The vectorial hatch is defined by the second part of the fill definition as a collection of dashed lines repeated with a given frequency (frequencyi).
Each line of the collection is described by its direction (directioni), its offset from the origin (offset_xi, offset_yi) and the dashed line definition
which contains segments and spaces with the given length (lengthij) following each other.
Note 2: Only simple fills can be defined with the DEFINE FILL command. There is no possibility to define symbol fills with this command.
Example:
DEFINE FILL "brick" 85, 255, 136, 255,
34, 255, 136, 255,
0.08333, 0.0, 4,
1.0, 0.0, 0.0, 0.0, 0,
3.0, 90.0, 0.0, 0.0, 2,
1.0, 1.0,
3.0, 90.0, 1.5, 1.0, 4,
1.0, 3.0, 1.0, 1.0,
1.5, 90.0, 0.75, 3.0, 2,
1.0, 5.0
Bitmap pattern:
Pattern: Binary value:
pattern1 = 85 01010101 • • • •
pattern2 = 255 11111111 ••••••••
pattern3 = 136 10001000 • •
pattern4 = 255 11111111 ••••••••
pattern5 = 34 00100010 • •
pattern6 = 255 11111111 ••••••••
pattern7 = 136 10001000 • •
pattern8 = 255 11111111 ••••••••
DEFINE FILLA
DEFINE FILLA name [,] [FILLTYPES_MASK fill_types,]
pattern1, pattern2, pattern3, pattern4,
pattern5, pattern6, pattern7, pattern8,
spacing_x, spacing_y, angle, n,
frequency1, directional_offset1, direction1,
offset_x1, offset_y1, m1,
length11, ... length1m,
...
frequencyn, directional_offsetn, directionn,
offset_xn, offset_yn, mn,
lengthn1, ... lengthnm
Note: This command can contain additional data definition.
See the section called “Additional Data” for details.
lengthim
...
lengthi2
lengthi1 m line parts
Y
directioni
offset_yi f re q
uen
cy directional_offseti
X i
f re q
uen directional_offseti
cy
offset_xi i
s pa
c i ng
y
angle
y *y
x *x
c i ng
s pa x
spacing_x, spacing_y: spacing factor in the x and y direction, respectively. These two parameters define a global scaling factor for
the whole fill. All values in the x direction will be multiplied by spacing_x and all values in the y direction will be multiplied by spacing_y.
directional_offseti: the offset of the beginning of the next similar hatch line, measured along the line’s direction. Each line of
the series will be drawn at a distance defined by frequencyi with an offset defined by directional_offseti. The real length of the offset will
be modulated by the defined spacing.
Example:
DEFINE FILLA "TEST" 8, 142, 128, 232,
8, 142, 128, 232,
0.5, 0.5, 0, 2,
2, 1, 90, 0,
0, 2, 1, 1,
1, 2, 0, 0, 0,
2, 1, 3
FILL "TEST"
POLY2 4, 6,
-0.5, -0.5, 12, -0.5,
12, 6, -0.5, 6
Bitmap pattern:
DEFINE SYMBOL_FILL
DEFINE SYMBOL_FILL name [,][FILLTYPES_MASK fill_types,]
pat1, pat2, pat3, pat4, pat5, pat6, pat7, pat8,
spacingx1, spacingy1, spacingx2, spacingy2,
angle, scaling1, scaling2, macro_name [,] PARAMETERS [name1
= value1, ... namen = valuen]
Note: This command can contain additional data definition.
See the section called “Additional Data” for details.
bol
t sym
par
a ry
libr cing x2
spa
spa
cing y1
spa
angle
cing y2
cing x1
spa
An extended DEFINE FILL statement, which allows you to include a library part drawing in a fill definition. The usage of macro_name and
the parameters are the same as for the CALL command.
spacingx1, spacingx2: horizontal spacings.
spacingy1, spacingy2: vertical spacings.
scaling1: horizontal scale.
scaling2: vertical scale.
macro_name: the name of the library part.
DEFINE SOLID_FILL
DEFINE SOLID_FILL name [[,] FILLTYPES_MASK fill_types]
Defines a solid fill.
Note: This command can contain additional data definition.
Line Types
DEFINE LINE_TYPE
DEFINE LINE_TYPE name spacing, n,
length1, ... lengthn
Note 1: This command can contain additional data definition.
See the section called “Additional Data” for details.
Any GDL script may include line type definitions prior to the first reference to that line-type name. The line type defined this way can be used
only for 2D elements in the script in which it was defined and its subsequent second generation scripts.
name: name of the line type.
spacing: spacing factor.
n: number of the line parts.
lengthi: length of the line parts (the real length is spacing * lengthi). Line parts consist of segments and spaces. First line part is a segment,
zero length means a dot.
Note 2: Only simple line types - i.e. consisting only of segments and spaces - can be defined with this command, defining symbol line types
can be done with the DEFINE SYMBOL_LINE command.
Example:
DEFINE LINE_TYPE "line - - ." 1,
6, 0.005, 0.002, 0.001, 0.002, 0.0, 0.002
DEFINE SYMBOL_LINE
DEFINE SYMBOL_LINE name dash, gap, macro_name PARAMETERS [name1 = value1,
...
namen = valuen]
Note: This command can contain additional data definition.
See the section called “Additional Data” for details.
An extended DEFINE LINE statement, which allows you to include a library part drawing in a line definition. The usage of macro_name and
the parameters are the same as for the CALL command.
dash: scale of both line components.
gap: gap between each component.
1 2 3
4 5 6
7 8 9
j1: bold,
j2: italic,
j3: underline,
j4: outline,
j5: shadow,
If face_code = 0, then style is normal.
Note: The outline and shadow values are effective only on Macintosh platform and up to the 8.1 version of ArchiCAD.
DEFINE STYLE{2}
DEFINE STYLE{2} name font_family, size, face_code
New version of style definition, recommended to be used with PARAGRAPH definitions.
name: name of the style.
font_family: name of the used font family (e.g., Garamond).
size: height of the characters in mm or m in model space.
face_code: a combination of the following values:
face_code = j1 + 2*j2 + 4*j3 + 32*j6 + 64*j7 + 128*j8, where each j can be 0 or 1.
j1: bold,
j2: italic,
j3: underline,
j6: superscript,
j7: subscript,
j8: strikethrough.
If face_code = 0, then style is normal.
If the defined style is used with the TEXT2 command, size means character heights in millimeters, while the superscript, subscript and
strikethrough face_code values are not effective. If used with PARAGRAPH strings in the RICHTEXT2 and RICHTEXT commands, size
meaning millimeters or meters depends on the fixed_height parameter of the TEXTBLOCK definition.
PARAGRAPH
PARAGRAPH name alignment, firstline_indent,
left_indent, right_indent, line_spacing [,
tab_position1, ...]
[PEN index]
[[SET] STYLE style1]
[[SET] MATERIAL index]
'string1'
'string2'
...
'string n'
[PEN index]
[[SET] STYLE style2]
[[SET] MATERIAL index]
'string1'
'string2'
...
'string n'
...
ENDPARAGRAPH
GDL scripts may include paragraph definitions prior to the first reference to that paragraph name. The paragraph defined this way can be used
only in the script in which it was defined and its subsequent second generation scripts. A paragraph is defined to be a sequence of an arbitrary
number of strings (max 256 characters long each) with different attributes: style, pen and material (3D). If no attributes are specified inside
the paragraph definition, actual (or default) attributes are used. The new lines included in a paragraph string (using the special character '\n')
will automatically split the string into identical paragraphs, each containing one line. Paragraph definitions can be referenced by name in the
TEXTBLOCK command. All length type parameters (firstline_indent, left_indent, right_indent, tab_position) meaning millimeters or meters
depends on the fixed_height parameter of the TEXTBLOCK definition.
name: name of the paragraph. Can be either string or integer. Integer identifiers works only with the TEXTBLOCK_ command
alignment: alignment of the paragraph strings. Possible values:
1: left aligned,
2: center aligned,
3: right aligned,
4: full justified.
firstline_indent: first line indentation, in mm or m in model space.
1 2 3
4 5 6
7 8 9
charspace_factor: The horizontal distance between two characters will be multiplied by this number.
fixed_height: Possible values:
1: the placed TEXTBLOCK will be scale-independent and all specified length type parameters will mean millimeters,
0: the placed TEXTBLOCK will be scale-dependent and all specified length type parameters will mean meters in model space.
string_expri: means paragraph name if it was previously defined, simple string otherwise (with default paragraph parameters).
TEXTBLOCK_
TEXTBLOCK_ name width, anchor, angle, width_factor, charspace_factor, fixed_height,
'string_expr1' [, 'string_expr2', ...]
Similar to the TEXTBLOCK command. The meaning of all the parameters are the same, but the name of the textblock can be either string
or integer. And it can handle integer type named paragraphs as well.
Additional Data
Attribute definitions can contain optional additional data definitions after the ADDITIONAL_DATA keyword. The additional data must be
entered after the previously defined parameters of the attribute command. An additional data has a name (namei) and a value (valuei), which can
be an expression of any type, even an array. If a string parameter name ends with the substring "_file", its value is considered to be a file name and
will be included in the archive project. Different meanings of additional data can be defined and used by ArchiCAD or Add-Ons to ArchiCAD.
See meanings of LightWorks Add-On parameters at http://www.graphisoft.com/support/developer/documentation/LibraryDevDoc/16/.
Additional data definition is available in the following commands:
DEFINE MATERIAL parameters [[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE MATERIAL name [,] BASED_ON orig_name [,] PARAMETERS name1 = expr1 [, ...]
[[,] ADDITIONAL_DATA name1 = expr1 [, ...]]
DEFINE FILL parameters [[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE FILLA parameters [[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE SYMBOL_FILL parameters [[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE SOLID_FILL name [[,] FILLTYPES_MASK fill_types]
[[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE EMPTY_FILL name [[,] FILLTYPES_MASK fill_types]
[[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE LINEAR_GRADIENT_FILL name [[,] FILLTYPES_MASK fill_types]
[[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
DEFINE RADIAL_GRADIENT_FILL name [[,] FILLTYPES_MASK fill_types]
[[,] ADDITIONAL_DATA name1 = value1, name2 = value2, ...]
NON-GEOMETRIC SCRIPTS
In addition to the 3D and 2D script windows that define the appearance of the GDL Object, further scripts are available for adding
complementary information to it. These are the Properties Script used for quantity calculations, the Parameter Script that includes the list of
possible values for different parameters, and the User Interface Script for creating a custom interface for parameter entry, Forward Migration
Script and Backward Migration Scripts to define how to migrate an old instance forward to the actual element or how to migrate the element
backward to an older one. The commands available for all these script types are detailed on the following pages.
Example:
DESCRIPTOR "\tPainted box.\n\t Properties:\n\
\t\t - swinging doors\n\
\t\t - adjustable height\n\
\t\t - scratchproof"
REF DESCRIPTOR "0001"
s = SURFACE3D () !wardrobe surface
COMPONENT "glue", 1.5, "kg"
COMPONENT "handle", 2*c, "nb" !c number of doors
COMPONENT "paint", 0.5*s, "kg"
POSITION WALLS
REF COMPONENT "0002"
DRAWING
DRAWING
DRAWING: Refers to the drawing described in the 2D script of the same library part. Use it to place drawings in your bill of materials.
Example 2: Read all string values from a file for use in a value list
DIM sarray[]
! file in the library, containing parameter data
filename = "ProjectNotes.txt"
ch1 = OPEN ("text", filename, "MODE=RO, LIBRARY")
i = 1
j = 1
sarray[1] = ""
! collect all strings
DO
n = INPUT (ch1, i, 1, var)
IF n > 0 AND VARTYPE (var) = 2 THEN
sarray[j] = var
j = j + 1
ENDIF
i = i + 1
WHILE n > 0
CLOSE ch1
! parameter popup with strings read from the file
VALUES "RefNote" sarray
PARAMETERS
PARAMETERS name1 = expression1 [,
name2 = expression2, ...,
namen = expressionn]
namei: the name of the parameter.
expressioni: the new value of the parameter.
Using this command, the parameter values of a Library Part can be modified by the Parameter Script.
The modification will only be effective for the next interpretation. Commands in macros refer to the caller’s parameters. If the parameter is a
value list, the value chosen will be either an existing value, the custom value, or the first value from the value list.
In addition, the global string variable GLOB_MODPAR_NAME contains the name of the last user-modified parameter.
LOCK
LOCK name1 [, name2, ..., namen]
Locks the named parameter(s) in the settings dialog box. A locked parameter will appear grayed in the dialog box and its value cannot be
modified by the user.
The origin of the coordinate system is in the top-left corner. Sizes and coordinate values are measured in pixels.
UI_DIALOG
UI_DIALOG title [, size_x, size_y]
Defines the title of the dialog box. The default title is 'Custom Settings'. Currently, the size of the available area is fixed at 444 x 266 pixels,
and the size_x and size_y parameters are not used.
Restriction: The Interface Script should contain only one UI_DIALOG command.
UI_PAGE
UI_PAGE page_number
Page directive, defines the page that the interface elements are placed on. Page numbering starts at 1. Moving between pages can be defined in
two different ways. The first method is to use two buttons created with the UI_NEXT and UI_PREV commands. The second way is to create
dynamic page handling using the UI_CURRENT_PAGE command.
If there is no UI_PAGE command in the Interface Script, each element will be placed on the first page by default.
Warning: In the simple way of paging, any break of continuity in the page numbering forces the insertion of a new page without buttons, and
therefore there will be no possibility to go to any other page from there. This restriction can be circumvented using the UI_CURRENT_PAGE
command.
UI_CURRENT_PAGE
UI_CURRENT_PAGE index
Definition of the current tabpage to display.
Warning: Jumping to a non-existent page forces the insertion of a new page without buttons and controls, and therefore there is no possibility
to go to any other page from there.
index: valid index of the UI_PAGE to display.
UI_BUTTON
UI_BUTTON type, text, x, y [, width, height, id [, url]]
Button definition on current page. Buttons can be used for various purposes: moving from page to page, opening a web page or performing
some parameter-script defined action. Buttons can contain text.
type: type of the button as follows:
UI_PREV: if pressed, the previous page is displayed,
UI_NEXT: if pressed, the next page is displayed,
UI_FUNCTION: if pressed, the GLOB_UI_BUTTON_ID global variable is set to the button id specified in expression,
UI_LINK: if pressed, the URL in expression is opened in the default web browser,
text: the text that should appear on the text type button; picture buttons omit this parameter.
x, y: the position of the button.
width, height: width and height of the button in pixels. If not specified (for compatibility reasons) the default values are 60 pixels
for width and 20 pixels for height.
id: an integer unique identifier.
url: a string containing a URL.
UI_PREV and UI_NEXT buttons are disabled if the previous/next page is not present. If these buttons are pushed, the gs_ui_current_page
parameter of the library part is set to the index of the page to show - if there’s a parameter with this name.
Example:
! UI script
UI_CURRENT_PAGE gs_ui_current_page
UI_BUTTON UI_FUNCTION, "Go to page 9", 200,150, 70,20, 3
UI_BUTTON UI_LINK, "Visit Website", 200,180, 100,20, 0,
"http://www.graphisoft.com"
! parameter script
if GLOB_UI_BUTTON_ID = 3 then
parameters gs_ui_current_page = 9, ...
endif
UI_PICT_BUTTON
UI_PICT_BUTTON type, text, picture_reference,
x, y, width, height [, id [, url]]
Similar to the UI_BUTTON command. But this type of buttons can contain pictures.
picture_reference: file name or index number of the picture stored in the library part. The index 0 refers to the preview picture of
the library part. Pixel transparency is allowed in the picture.
text: has no effect for picture buttons.
UI_SEPARATOR
UI_SEPARATOR x1, y1, x2, y2
Generates a separator rectangle. The rectangle becomes a single (vertical or horizontal) separator line if x1 = x2 or y1 = y2
x1, y1: upper left node coordinates (starting point coordinates of the line).
x2, y2: lower right node coordinates (endpoint coordinates of the line).
UI_GROUPBOX
UI_GROUPBOX text, x, y, width, height
A groupbox is a rectangular separator with caption text. It can be used to visually group logically related parameters.
text: the title of the groupbox.
x, y: the position of upper left corner.
width, height: width and height in pixels.
UI_PICT
UI_PICT picture_reference, x, y [, width, height [, mask]]
Picture element in the dialog box. The picture file must be located in one of the loaded libraries.
picture_reference: file name or index number of the picture stored in the library part. The index 0 refers to the preview picture
of the library part.
x, y: position of the top left corner of the picture.
width, height: optional width and height in pixels; by default, the picture’s original width and height values will be used.
mask: alpha + distortion.
See the PICTURE command for full explanation.
UI_STYLE
UI_STYLE fontsize, face_code
All the UI_OUTFIELDs and UI_INFIELDs generated after this keyword will represent this style until the next UI_STYLE statement.
fontsize: one of the following font size values:
0: small,
1: extra small,
2: large.
face_code: similar to the STYLE definition, but the values cannot be used in combination.
0: normal,
1: bold,
2: italic,
4: underline,
8: outline,
16: shadow.
Note: The outline and shadow values are effective only on Macintosh platform and up to the 8.1 version of ArchiCAD.
UI_OUTFIELD
UI_OUTFIELD expression, x, y [, width, height [, flags]]
Generates a static text.
expression: numerical or string expression.
x, y: position of the text block’s top left corner.
width, height: width and height of the text box. If omitted, the text box will wrap around the text as tight as possible for the given font.
flags:
flags = j1 + 2*j2 + 4*j3, where each j can be 0 or 1.
j1: horizontal alignment (with j2),
j2: horizontal alignment (with j1):
j1 = 0, j2 = 0: Aligns to the left edge (default),
j1 = 1, j2 = 0: Aligns to the right edge,
j1 = 0, j2 = 1: Aligns to the center,
j1 = 1, j2 = 1: Not used,
j3: grayed text.
UI_INFIELD
UI_INFIELD "name", x, y, width, height [,
method, picture_name,
images_number,
rows_number, cell_x, cell_y,
image_x, image_y,
expression_image1, text1,
...,
expression_imagen, textn]
UI_INFIELD{2}
UI_INFIELD{2} name, x, y, width, height [,
method, picture_name,
images_number,
rows_number, cell_x, cell_y,
image_x, image_y,
expression_image1, text1,
...,
expression_imagen, textn]
UI_INFIELD{3}
UI_INFIELD{3} name, x, y, width, height [,
method, picture_name,
images_number,
rows_number, cell_x, cell_y,
image_x, image_y,
expression_image1, text1, value_definition1,
...,
expression_imagen, textn, value_definitionn]
Generates an edit text or a pop-up menu for the parameter input. A pop-up is generated if the parameter type is value list, material, fill, line
type or pencolor.
If the optional parameters of the command are present, value lists can be alternatively displayed as thumbnail view fields. Different thumbnail
control types are available. They display the specified images and associated texts and allow the selection of one single item at a time, just like
in a pop-up menu.
In the version 1 and 2 infield, the thumbnail items and the value list items are associated by indices.
The version 3 infield defines value association which binds the thumbnail items to value list items of the associated parameter. If a value defined
in a thumbnail item isn’t present in the parameter’s value list, it won’t be displayed in the control.
The Interface Script is rebuilt with the new value after any parameter is modified.
name: parameter name as string expression for UI_INFIELD or parameter name with optional actual index values if array for
UI_INFIELD{2} and UI_INFIELD{3}.
x, y: the position of the edit text, pop-up or control.
width, height: width and height in pixels.
method: the type of the control.
1: List view control.
picture_name: name of the common image file containing a matrix of concatenated images, or empty string.
images_number: number of images in the matrix, for boolean parameters it can be 0 or 2.
rows_number: number of rows of the matrix.
cell_x, cell_y: width and height of a cell within the thumbnail view field, including image and text.
image_x, image_y: width and height of the image in the cell.
expression_imagei: index of image number i in the matrix, or individual file name. If a common image file name was specified, indices
must be used here. Combination of indices and individual file names does not work.
texti: text in cell number i.
value_definitioni: value definition which matches the cell with a value list item by value:
expression: numerical or string expression, or
Example 1:
IF c THEN
UI_DIALOG "Hole definition parameters"
UI_OUTFIELD "Type of hole:",15,40,180,20
UI_INFIELD "D",190,40,105,20
IF d="Rectangular" THEN
UI_PICT "rect.pict",110,33,60,30
UI_OUTFIELD "Width of hole",15,70,180,20
UI_INFIELD "E", 190,70,105,20
UI_OUTFIELD "Height of hole",15,100,180,20
UI_INFIELD "F", 190,100,105,20
UI_OUTFIELD "Distance between holes",15,130,180,20
UI_INFIELD "G", 190,130,105,20
ELSE
UI_PICT "circle.pict",110,33,60,30
UI_OUTFIELD "Diameter of hole circle",15,70,180,20
UI_INFIELD "J", 190,70,105,20
UI_OUTFIELD "Distance of hole centers", 15,100,180,20
UI_INFIELD "K", 190,100,105,20
UI_OUTFIELD "Resolution of hole circle", 15,130,180,20
UI_INFIELD "M", 190,130,105,20
ENDIF
UI_OUTFIELD "Number of holes",15,160,180,20
UI_INFIELD "I", 190,160,105,20
ENDIF
UI_SEPARATOR 50,195,250,195
UI_OUTFIELD "Material of beam", 15,210,180,20
UI_INFIELD "MAT", 190,210,105,20
UI_OUTFIELD "Pen of beam", 15,240,180,20
UI_INFIELD "P", 190,240,105,20
Example 2:
! Parameter Script:
VALUES "myParameter" "Two", "Three", "Five", CUSTOM
! Interface Script:
px = 80
py = 60
cx = px + 3
cy = py + 25
UI_RADIOBUTTON
UI_RADIOBUTTON name, value, text, x, y, width, height
Generates a radio button of a radio button group. Radio button groups are defined by the parameter name. Items in the same group are
mutually exclusive.
name: parameter name with optional actual index values if array.
value: parameter is set to this value if this radio button is set.
text: this text is displayed beside the radio button.
x, y: the position of the radio control.
width, height: width and height in pixels.
Example:
UI_RADIOBUTTON "ceilingPlan", 0, `Floor Plan`, 10, 140, 100, 20
UI_RADIOBUTTON "ceilingPlan", 1, `Ceiling Plan`, 10, 160, 100, 20
UI_TOOLTIP
UI_BUTTON type, text, x, y, width, height [, id [, url]] [ UI_TOOLTIP tooltiptext ]
UI_PICT_BUTTON type, text, picture_reference,
x, y, width, height [, id [, url]] [ UI_TOOLTIP tooltiptext ]
UI_INFIELD "name", x, y, width, height [, extra parameters ... ]
[ UI_TOOLTIP tooltiptext ]
UI_INFIELD{2} name, x, y, width, height [, extra parameters ... ]
[ UI_TOOLTIP tooltiptext ]
UI_INFIELD{3} name, x, y, width, height [, extra parameters ... ]
[ UI_TOOLTIP tooltiptext ]
UI_RADIOBUTTON name, value, text, x, y, width, height [ UI_TOOLTIP tooltiptext ]
UI_OUTFIELD expression, x, y, width, height [, flags] [ UI_TOOLTIP tooltiptext ]
UI_PICT expression, x, y [, width, height [, mask]] [ UI_TOOLTIP tooltiptext ]
Defines the tooltip for the control on the user interface page. Tooltips are available for buttons, infields, outfields and pictures if they are not
disabled by the user in the running context (f. ex. in the Help menu of ArchiCAD).
tooltiptext: the text to display as tooltip for the control.
Example:
bContinue=1
if bContinue then
! from 1E75F651-EE95-4223-BD36-4A6D870B54E3 to 07F20B81-41FF-49B4-99DC-7E9714ACE246
! backward compatible - no conversion needed
targetGuid = "07F20B81-41FF-49B4-99DC-7E9714ACE246"
if TO_GUID = "07F20B81-41FF-49B4-99DC-7E9714ACE246" then bContinue = 0
endif
if bContinue then
! from 07F20B81-41FF-49B4-99DC-7E9714ACE246 to 7ED73E3C-D871-447E-B3A1-F822A16D47D9
parameters oldParStillExisting = oldParStillExisting - 1
newparameter "oldParDeleted", "String"
if newPar = 1 then
oldParDeleted = "Alpha"
else
oldParDeleted = "Beta"
endif
parameters oldParDeleted = oldParDeleted
targetGuid = "7ED73E3C-D871-447E-B3A1-F822A16D47D9"
if TO_GUID = "7ED73E3C-D871-447E-B3A1-F822A16D47D9" then bContinue = 0
endif
SETMIGRATIONGUID targetGuid
TO_GUID is the global variable holding the main ID of the target element in the conversion.
See the SETMIGRATIONGUID command actualGuid.
NEWPARAMETER
NEWPARAMETER name, type [, dim1 [, dim2]]
Adds a new parameter to the parameters of a library part in the Backward Migration Script. The parameter creation happens only after the full
interpretation of the script. If a parameter with the given name already exists in the parameters list, an error occurs.
name: name of the parameter to be created.
type: type of the parameter. Possible values are:
Integer
Length
Angle
RealNum
LightSwitch
ColorRGB
Intensity
LineType
Material
FillPattern
PenColor
String
Boolean
dim1, dim2: dim1 is the first dimension of the parameter, 0 if not set. dim2 is the second dimension of the parameter, 0 if not set.
dim1 = 0, dim2 = 0: the parameter is a scalar parameter,
dim1 > 0, dim2 = 0: the parameter is a 1 dimensional array,
dim1 > 0, dim2 > 0: the parameter is a 2 dimensional array,
Restriction of parameters:
If dim2 > 0, then dim1 > 0.
EXPRESSIONS
You can write compound expressions in GDL statements. Expressions can be of numerical and string type. They are constants, variables,
parameters or function calls and any combination of these in operators. Round bracket pairs (( )) (precedence 1) are used to override the default
precedence of the operators.
Simple type variables can be given numerical and string values, even in the same script, and can be used in numerical and string type expressions
respectively. Operations resulting in strings CANNOT be used directly as macro names in macro calls, or as attribute names in material, fill,
line type or style definitions. Variables given a string value will be treated as such and can be used wherever string values are required. If later in
the script the same variable is given a numerical value, it will be usable in numerical expressions only until it is given a string value again. Where
possible, in the precompilation process the type of the expressions is checked.
GDL supports one and two dimensional arrays. Variables become arrays after a declaration statement, in which their dimensions are specified.
DIM
DIM var1[dim_1], var2[dim_1][dim_2], var3[ ],
var4[ ][ ], var5[dim_1][ ],
var5[ ][dim_2]
After the DIM keyword there can be any number of variable names separated by commas. var1, var2, ... are the array names, while the numbers
between the brackets represent the dimensions of the array (numerical constants). Variable expressions cannot be used as dimensions. If they
are missing, the array is declared to be dynamic (one or both dimensions).
Library part parameters can also be arrays. Their actual dimensions are specified in the library part dialog. Parameter arrays do not have to be
declared in the script and they are dynamic by default. When referencing the library part using a CALL statement, the actual values of an array
parameter can be an array with arbitrary dimensions.
The elements of the arrays can be referenced anywhere in the script but if they are variables, only after the declaration.
var1[num_expr] or var1
var2[num_expr1][num_expr2] or var2[num_expr1] or var2
Writing the array name without actual indices means referencing the whole array (or a line of a two-dimensional array) which is accepted in
some cases (CALL, PRINT, LET, PUT, REQUEST, INPUT, OUTPUT, SPLIT statements). For dynamic arrays there is no limitation for the
actual index value. During the interpretation, when a non-existing dynamic array element is given a value, the necessary quantity of memory
is allocated and the missing elements are all set to 0 (numerical).
Warning! This may cause an unexpected out of memory error in some cases. Each index - even of a possibly wrong, huge value - is considered
valid, since the interpreter is unable to detect the error condition. A non-existing dynamic array element is 0 (numerical).
Arrays having a fixed dimension are checked for the validity of the actual index on the fixed dimension. Array variables with fixed length cannot
accept dynamic array values in assignments. However, dynamic arrays that are given whole array values will take on those values. This also
applies to some statements where whole array references can be used as return parameters. (REQUEST, INPUT, SPLIT).
Array elements can be used in any numerical or string expression. They can be given string or numerical values.
Indices start with 1, and any numerical expression can be used as an index.
Array elements can be of different simple types (numerical, string, group). The type of the whole array (main type) is the type of its first element
([1] or [1][1]). Parameter and global variable arrays cannot be of mixed type.
VARDIM1
VARDIM1 (expr)
VARDIM2
VARDIM2 (expr)
These functions return as integers the actual dimension values for the (array) expression specified as a parameter. They must be used if you
want to handle correctly all actual elements of a dynamic array or an array parameter. If no element of a dynamic array was previously set, the
return value is 0. For one-dimensional arrays VARDIM2 returns 0.
OPERATORS
The operators below are listed in order of decreasing precedence. The evaluation of an expression begins with the highest precedence operator
and from left to right.
Arithmetical Operators
^ (or **) Power of precedence 2
* Multiplication precedence 3
/ Division precedence 3
MOD (or %) Modulo (remainder of division) x MOD y = x - y * INT (x/y) precedence 3
+ Addition precedence 4
- Subtraction precedence 4
Note
+ (addition) can also be applied to string expressions: the result is the concatenation of the strings. The result of the '/' (Division)
is always a real number, while the result of the other operations depends on the type of the operands: if all operands are integer, the
result will be integer, otherwise real.
Relational Operators
= Equal precedence 5
< Less than precedence 5
> Greater than precedence 5
<= Less than or equal precedence 5
>= Greater than or equal precedence 5
<> (or #) Not equal precedence 5
Note
These operators can be used between any two string expressions also (string comparison is case sensitive). The result is an integer, 1
or 0. There is not recommended to use the '=' (Equal), '<=' (Less than or equal), '>=' (Greater than or equal), '<>' (or #) (Not equal)
operators with real operands, as these operations can result in precision problems.
Boolean Operators
AND (or &) Logical and precedence 6
OR (or |) Logical inclusive or precedence 7
EXOR (or @) Logical exclusive or precedence 8
Note
Boolean operators work with integer numbers. In consequence, 0 means false, while any other number means true. The value of a
logical expression is also integer, i.e., 1 for true and 0 for false. It is not recommended to use boolean operators with real operands,
as these operations can result in precision problems.
FUNCTIONS
Arithmetical Functions
ABS
ABS (x)
Returns the absolute value of x (integer if x integer, real otherwise).
CEIL
CEIL (x)
Returns the smallest integral value that is not smaller than x (always integer). (e.g., CEIL(1.23) = 2; CEIL (-1.9) = -1).
INT
INT (x)
Returns the integral part of x (always integer). (e.g., INT(1.23) = 1, INT(-1.23) = -2).
FRA
FRA (x)
Returns the fractional part of x (integer 0 if x integer, real otherwise). (e.g., FRA(1.23) = 0.23, FRA(-1.23) = 0.77).
ROUND_INT
ROUND_INT (x)
Returns the rounded integer part of x. The 'i = ROUND_INT (x)' expression is equivalent with the following script:
IF x < 0.0 THEN i = INT (x - 0.5) ELSE i = INT (x + 0.5)
SGN
SGN (x)
Returns +1 integer if x positive, -1 integer if x negative, otherwise 0 integer.
SQR
SQR (x)
Returns the square root of x (always real).
Circular Functions
These functions use degrees for arguments (COS, SIN, TAN) and for return values (ACS, ASN, ATN).
ACS
ACS (x)
Returns the arc cosine of x. (-1.0 <= x <= 1.0; 0° <= ACS(x) <= 180°).
ASN
ASN (x)
Returns the arc sine of x. (-1.0 <= x <= 1.0; -90° <= ASN(x) <= 90°).
ATN
ATN (x)
Returns the arc tangent of x. (-90° <= ATN(x) <= 90°).
COS
COS (x)
Returns the cosine of x.
SIN
SIN (x)
Returns the sine of x.
TAN
TAN (x)
Returns the tangent of x.
PI
PI
Returns Ludolph’s constant. (p = 3.1415926...).
Note: All return values are real.
Transcendental Functions
EXP
EXP (x)
Returns the x th power of e (e = 2.7182818).
LGT
LGT (x)
Returns the base 10 logarithm of x.
LOG
LOG (x)
Returns the natural logarithm of x.
Note: All returned values are real.
Boolean Functions
NOT
NOT (x)
Returns false (=0 integer) if x is true (<>0), and true (=1 integer) if x is false (=0)(logical negation).
Note: Parameter value should be integer.
Statistical Functions
MIN
MIN (x1, x2, ... xn)
Returns the smallest of an unlimited number of arguments.
MAX
MAX (x1, x2, ... xn)
Returns the largest of an unlimited number of arguments.
RND
RND (x)
Returns a random value between 0.0 and x (x > 0.0) always real.
Bit Functions
BITTEST
BITTEST (x, b)
Returns 1 if the b bit of x is set, 0 otherwise.
BITSET
BITSET (x, b [, expr])
expr can be 0 or different, the default value is 1. Sets the b bit of x to 1 or 0 depending on the value of the specified expression, and returns
the result. Parameter value should be integer, returned value is integer.
Special Functions
Special functions (besides global variables) can be used in the script to communicate with the executing program. They either ask the current
state and different preferences settings of the program, or refer to the current environment of the library part. Request calls can also be used
to communicate with GDL extensions.
REQ
REQ (parameter_string)
Asks the current state of the program. Its parameter - the question - is a string. The GDL interpreter answers with a numeric value. If it does
not understand the question, the answer is negative.
parameter_string: question string, one of the following:
"GDL_version": version number of the GDL compiler/interpreter. Warning: it is not the same as the ArchiCAD version.
"Program": code of the program (e.g., 1: ArchiCAD),
"Serial_number": the serial number of the keyplug,
"Model_size": size of the current 3D data structure in bytes,
"Red_of_material name"
"Green_of_material name"
"Blue_of_material name": Defines the given material’s color components in RGB values between 0 and 1,
"Red_of_pen index"
"Green_of_pen index"
"Blue_of_pen index": Defines the given pen’s color components in RGB values between 0 and 1,
"Pen_of_RGB r g b": Defines the index of the pen closest to the given color. The r, g and b constants’ values are between 0 and 1.
REQUEST
REQUEST (question_name, name | index, variable1 [, variable2, ...])
The first parameter represents the question string while the second represents the object of the question (if it exists) and can be of either string
or numeric type (for example, the question can be "Rgb_of_material" and its object the material’s name, or "Rgb_of_pen" and its object the
index of the pen). The other parameters are variable names in which the return values (the answers) are stored.
The return value of the requests is always the number of successfully retrieved values (integer), while the type of the retrieved values is defined
by each request in part. In the case of a badly formulated question or a nonexistent name, the return value will be 0.
For the list of available options see the section called “REQUEST Options”.
IND
IND (MATERIAL, name_string
IND (FILL, name_string)
IND (LINE_TYPE, name_string)
IND (STYLE, name_string)
IND (TEXTURE, name_string)
This function returns the current index of the material, fill, line type or style and texture attribute. The main use of the resulting number is to
transfer it to a macro that requires the same attribute as the calling macro.
The functions return an attribute index (integer) value. The result is negative for temporary definitions (inside the script or from Master_GDL
file) and positive for global definitions (from the project attributes).
See also the section called “Inline Attribute Definition”.
APPLICATION_QUERY
APPLICATION_QUERY (extension_name, parameter_string, variable1, variable2, ...)
GDL allows a way for the individual applications to provide specific request functions in their context. These query options aren’t defined
in the GDL syntax; consult the GDL developer documentation of the given application for specific options. Basic Library Documentation
applies for ArchiCAD.
LIBRARYGLOBAL
LIBRARYGLOBAL (object_name, parameter, value)
Fills value with the current model view option parameter value of the library global object defined by object_name if available. A library global
setting is available if the global object is currently loaded in the library, or was loaded earlier and its setting was saved in the current model
view option combination.
Returns 1 if successful, 0 otherwise.
object_name: name of library global object. Must be a string constant. Warning: If string variables or parameters are used as object names,
then the 2d and 3d view of objects querying this library global object will not refresh automatically.
parameter: name of requested parameter.
value: filled with the requested parameter value.
Example:
success = LIBRARYGLOBAL ("MyGlobalOptions", "detLevel2D", det)
if success > 0 then
text2 0, 0, det
else
text2 0, 0, "Not available"
endif
String Functions
STR
STR (numeric_expression, length, fractions)
STR (format_string, numeric_expression)
The first form of the function creates a string from the current value of the numeric expression. The minimum number for numerical characters
in the string is length, while fractions represents the numbers following the floating point. If the converted value has more than length characters,
it is expanded as required. If it has fewer characters, it is padded on the left (length > 0) or on the right (length < 0).
In the second form, the format_string can either be a variable or a constant. If the format is empty, it is interpreted as meters, with an accuracy
of three decimals (displaying 0s).
Example:
a=4.5
b=2.345
TEXT2 0, 2, STR(a, 8, 2) ! 4.50
TEXT2 0, 1, STR(b, 8, 2) ! 2.34
TEXT2 0, 0, STR(a*b, 8, 2) ! 10.55
STR{2}
STR{2} (format_string, numeric_expression [, extra_accuracy_string])
Extension of the second form of STR. If the extra accuracy flags are set in the format_string, then the STR{2} function will return the
corresponding extra accuracy string in the 3rd parameter.
pt: points,
for areas:
sqm: square meters,
sqcm: square centimeters,
sqmm: square millimeters,
sqf: square feet,
sqi: square inches,
for angles:
dd: decimal degrees,
dms: degrees, minutes, seconds,
gr: grads,
rad: radians,
surv: surveyors unit,
for volumes:
cum: cubic meters,
l: liters,
cucm: cubic centimeters,
cumm: cubic millimeters,
cuf: cubic feet,
cui: cubic inches,
cuy: cubic yards,
gal: gallons.
Example:
nr = 0.345678
TEXT2 0, 23, STR ("%m", nr) !0.346
TEXT2 0, 22, STR ("%#10.2m", nr) !35
TEXT2 0, 21, STR ("%.4cm", nr) !34.5678
TEXT2 0, 20, STR ("%12.4cm", nr) ! 34.5678
TEXT2 0, 19, STR ("%.6mm", nr) !345.678000
TEXT2 0, 18, STR ("%+15e", nr) !+3.456780e-01
TEXT2 0, 17, STR ("%ffi", nr) !1'-2"
TEXT2 0, 16, STR ("%0.16ffi", nr) !1'-1 5/8"
TEXT2 0, 15, STR ("% .3fdi", nr) ! 1'-1.609"
TEXT2 0, 14, STR ("% -10.4df", nr) ! 1.1341'
TEXT2 0, 13, STR ("%0.64fi", nr) !13 39/64"
TEXT2 0, 12, STR ("%+12.4di", nr)!+13.6094"
TEXT2 0, 11, STR ("%#.3sqm", nr) !346
TEXT2 0, 10, STR ("%+sqcm", nr) !+3,456.78
TEXT2 0, 9, STR ("% .2sqmm", nr)! 345,678.00
TEXT2 0, 8, STR ("%-12sqf", nr) !3.72
TEXT2 0, 7, STR ("%10sqi", nr) ! 535.80
TEXT2 0, 6, STR ("%.2pt", nr) !0.35
alpha = 88.657
TEXT2 0, 5, STR ("%+10.3dd", alpha) !+88.657°
TEXT2 0, 4, STR ("%.1dms", alpha) !88°39'
TEXT2 0, 3, STR ("%.2dms", alpha) !88°39'25"
TEXT2 0, 2, STR ("%10.4gr", alpha) ! 98.5078G
TEXT2 0, 1, STR ("%rad", alpha) !1.55R
TEXT2 0, 0, STR ("%.2surv", alpha) !N 1°20'35" E
SPLIT
SPLIT (string, format, variable1 [, variable2, ..., variablen])
Splits the string parameter according to the format in one or more numeric or string parts. The split process stops when the first non-matching
part is encountered. Returns the number of successfully read values (integer).
string: the string to be split.
format: any combination of constant strings, %s, %n and %^n -s. Parts in the string must fit the constant strings, %s denotes any string
value delimited by spaces or tabs, while %n or %^n denotes any numeric value. If the '^' flag is present, current system settings for decimal
separator and digit grouping characters are taken into consideration when matching the actual numerical value.
Example:
ss = "3 pieces 2x5 beam"
n = SPLIT (ss, "%n pieces %nx%n %s", num, ss1, size1, ss2, size2, name)
IF n = 6 THEN
PRINT num, ss1, size1, ss2, size2, name ! 3 pieces 2 x 5 beam
ELSE
PRINT "ERROR"
ENDIF
STW
STW (string_expression)
Returns the (real) width of the string in millimeters displayed in the current style. The width in meters, at current scale, is STW
(string_expression) / 1000 * GLOB_SCALE.
Example:
STRLEN
STRLEN (string_expression)
Returns the (integer) length of the string (the number of characters)
STRSTR
STRSTR (string_expression1, string_expression2)
Returns the (integer) position of the first appearance of the second string in the first string. If the first string doesn’t contain the second one,
the function returns 0.
Example:
szFormat = ""
n = REQUEST ("Linear_dimension", "", szFormat)
unit = ""
IF STRSTR (szFormat, "m") > 0 THEN unit = "m"
IF STRSTR (szFormat, "mm") > 0 THEN unit = "mm"
IF STRSTR (szFormat, "cm") > 0 THEN unit = "cm"
TEXT2 0, 0, STR (szFormat, a) + " " + unit !1.00 m
STRSUB
STRSUB (string_expression, start_position, characters_number)
Returns a substring of the string parameter that begins at the position given by the start_position parameter and its length is characters_number
characters.
Example:
string = "Flowers.jpeg"
len = STRLEN (string)
iDotPos = STRSTR (string, ".")
TEXT2 0, -1, STRSUB (string, 1, iDotPos - 1) !Flowers
TEXT2 0, -2, STRSUB (string, len - 4, 5) !.jpeg
CONTROL STATEMENTS
This chapter reviews the GDL commands available for controlling loops and subroutines in scripts and introduces the concept of buffer manipulation designed to store
parameter values for further use. It also explains how to use objects as macro calls and how to display calculated expressions on screen.
Example 1:
FOR i=1 TO 10 STEP 2
PRINT i
NEXT i
Example 2:
! The two program fragments below are equivalent:
! 1st
a = b
1:
IF c > 0 AND a > d OR c < 0 AND a < d THEN 2
PRINT a
a = a + c
GOTO 1
! 2nd
2:
FOR a = b TO d STEP c
PRINT a
NEXT a
The above example shows that step_value = 0 causes an infinite loop.
Only one NEXT statement is allowed after a FOR statement. You can exit the loop with the GOTO command and to return after leaving,
but you cannot enter a loop skipping the FOR statement.
DO - WHILE
DO [statment1
statement2
...
statementn]
WHILE condition
The statements between the keywords are executed as long as the condition is true.
The condition is checked after each execution of the statements.
WHILE - ENDWHILE
WHILE condition DO
[statement1
statement2
...
statementn]
ENDWHILE
The statements between the keywords are executed as long as the condition is true.
! 2nd
i = 1
DO
BRICK 0.5, 0.5, 0.1
ADDZ 0.3
i = i + 1
WHILE i <= 5
! 3rd
i = 1
WHILE i <= 5 DO
BRICK 0.5, 0.5, 0.1
ADDZ 0.3
i = i + 1
ENDWHILE
! 4th
i = 1
REPEAT
BRICK 0.5, 0.5, 0.1
ADDZ 0.3
i = i + 1
UNTIL i > 5
IF - GOTO
IF condition THEN label
IF condition GOTO label
IF condition GOSUB label
Conditional jump statement. If the value of the condition expression is 0 (logical 'false'), the command has no effect, otherwise execution
continues at the label. THEN, GOTO or THEN GOTO are equivalent in this context.
Example:
IF a THEN 28
IF i > j GOTO 200+i*j
IF i > 0 GOSUB 9000
Example:
IF a = b THEN height = 5 ELSE height = 7
IF needDoors THEN
CALL "door_macro" PARAMETERS
ADDX a
ENDIF
IF simple THEN
HOTSPOT2 0, 0
RECT2 a, 0, 0, b
ELSE PROJECT2 3, 270, 1
IF name = "Sphere" THEN
ADDY b
SPHERE 1
ELSE
ROTX 90
TEXT 0.002, 0, name
ENDIF
GOTO
GOTO label
Unconditional jump statement. The program executes a branch to the statement denoted by the value of the label (numerical or string). Variable
label expressions can slow down interpretation due to runtime jumping address determination.
Example:
GOTO K+2
GOSUB
GOSUB label
Internal subroutine call where the label is the entry point of the subroutine. Label value can be any numerical or string expression. Variable
label expressions can slow down interpretation due to runtime jumping address determination.
RETURN
RETURN
Return from an internal subroutine.
END / EXIT
END [v1, v2, ..., vn]
The parameter buffer is an infinitely long array in which you can store numeric values using the PUT command. PUT stores the given values
at the end of the buffer. These values can later be used (by the GET and USE commands) in the order in which they were entered (i.e., the
first stored value will be the first one used). A GET(n) or USE(n) command is equivalent with n values separated by commas. This way, they
can be used in any GDL parameter list where n values are needed.
PUT
PUT expression [, expression, ...]
Store the given values in the given order in the internal parameter buffer.
GET
GET (n)
Use the next n values from the internal parameter buffer and then disregard them.
USE
USE (n)
Use the next n values from the internal parameter buffer without deleting them. Following USE and GET functions can use the same parameter
sequence.
NSP
NSP
Returns the number of stored parameters in the internal buffer.
ADDZ d
REVOLVE 16, 180, 0,
0, b, 0,
2*r, b, 0,
2*r, c, 1,
r+r*COS(15), c-r*SIN(15), 1,
r+r*COS(30), c-r*SIN(30), 1,
r+r*COS(45), c-r*SIN(45), 1,
r+r*COS(60), c-r*SIN(50), 1,
r+r*COS(75), c-r*SIN(75), 1,
r+r*COS(90), c-r*SIN(90), 1,
r+r*COS(105), c-r*SIN(105), 1,
r+r*COS(120), c-r*SIN(120), 1,
r+r*COS(135), c-r*SIN(135), 1,
r+r*COS(150), c-r*SIN(150), 1,
r+r*COS(165), c-r*SIN(165), 1,
0, b, 1,
0, b, 0
MACRO OBJECTS
Although the 3D objects you may need can always be broken down into complex or primitive elements, sometimes it is desirable to define
these complex elements specifically for certain applications. These individually defined elements are called macros. A GDL macro has its own
environment which depends on its calling order. The current values of the MODEL, RADIUS, RESOL, TOLER, PEN, LINE_TYPE,
MATERIAL, FILL, STYLE, SHADOW options and the current transformation are all valid in the macro. You can use or modify them,
but the modifications will only have an effect locally. They do not take effect on the level the macro was called from. Giving parameters to a
macro call means an implicit value assignment on the macro’s level. The parameters A and B are generally used for resizing objects.
CALL
CALL macro_name_string [,]
PARAMETERS [ALL][name1=value1, ... namen=valuen][[,]
RETURNED_PARAMETERS r1, r2, ...]
macro_name_string: string, the name of an existing library part
Macro names cannot be longer than 31 characters. Macro names can be string constants, string variables or parameters. String operations
cannot be used with a macro call as a macro name. Warning: If string variables or parameters are used as macro names, the called macro may
not be included in the archive project. To let ArchiCAD know about the dependency, use the FILE_DEPENDENCE command for each
possible macro name. The macro name must be put between quotation marks (",',`,´,”,’,“,‘), unless it matches the definition of identifiers,
i.e., it begins with a letter or a '_' or '~' character and contains only letters, numbers and the '_' and '~' characters. Otherwise, the quotation
marks used in the CALL command must be the same at the beginning and at the end, and should be different from any character of the
macro name. Macro name itself also can be used as a command, without the CALL keyword.
PARAMETERS: the actual parameter list of the macro can follow
The parameter names of the called macro can be listed in any sequence, with both an '=' sign and an actual value for each. You can use string
type expressions here, but only give a string value to string type parameters of the called macro. Array parameters have to be given full array
values. If a parameter name in the parameter list cannot be found in the called macro, you will get an error message. Parameters of the called
macro that are not listed in the macro call will be given their original default values as defined in the library part called as a macro.
ALL: all parameters of the caller are passed to the macro
If this keyword is present, there is no need to specify the parameters one by one. For a parameter of the macro which cannot be found in
the caller, the default value will be used. If parameter values are specified one by one, they will override the values coming from the caller
or parameters of the called macro left to be default.
RETURNED_PARAMETERS: a variable list can follow to collect the returned parameters of the marco
At the caller’s side, returned values can be collected using the RETURNED_PARAMETERS keyword followed by a variable list. The returned
values will be stored in these variables in the order they are returned in the called macro. The number and the type of the variables specified
in the caller and those returned in the macro must match. If there are more variables specified in the caller, they will be set to 0 integers. Type
compatibility is not checked: the type of the variables specified in the caller will be set to the type of the returned values. If one of the variables
in the caller is a dynamic array, all subsequent values will be stored in it. See the syntax of returning parameters at the END / EXIT command.
CALL macro_name_string [,]PARAMETERS
value1 or DEFAULT [, ... valuen or DEFAULT]
This form of macro call can be used for compatibility with previous versions. Using this syntax the actual parameter values have to be specified
one by one in the order they are present in the called library part, no value can be missed, except from the end of the list. Using the DEFAULT
keyword in place of a parameter actual value means that the actual value will be the default value stored in the library part. For the missing
values defaults will be used automatically (the number of actual values n can be smaller than the number of parameters). When interpreting this
kind of macro call there is no need to find the parameters by name to assign them the actual value, so even though it is more uncomfortable
to use than the previous ones, a better performance can be achieved.
CALL macro_name_string [, parameter_list]
This form of macro call can be used for compatibility with previous versions. Can be used with simple GDL text files as well as any library
part, on the condition that its parameter list contains only single-letter numerical parameters (A ... Z). No string type expressions or arrays are
allowed with this method. The parameter list is a list of simple numerical values: the value of parameter A will be the first value in the list, the
value of parameter B will be the second value, and so on. If there are less then A ... Z values specified in the parameter list, for the missing
values 0 will be used automatically. If the (library part) macro does not have a single-letter parameter corresponding to the value, interpretation
will continue by skipping this value, but you will get a warning from the program.
Example:
CALL "leg" 2, , 5 ! A = 2, B = 0, C = 5 leg 2, , 5
CALL "door-1" PARAMETERS height = 2, a = 25.5,
name = "Director"
CALL "door-1" PARAMETERS ! use parameter default values
Example:
PRINT "loop-variable:", i
PRINT j, k-3*l
PRINT "Beginning of interpretation"
PRINT a * SIN (alpha) + b * COS (alpha)
PRINT "Parameter values: ", "a = ", a, ", b = ", b
PRINT name + STR ("%m", i) + "." + ext
FILE OPERATIONS
The following keywords allow you to open external files for reading/writing and to manipulate them by putting/getting values from/to GDL
scripts. This process necessarily involves using special Add-On extensions. Text files can be handled by the the section called “GDL Text I/
O Add-On”. Add-Ons for other file types can be developed by third parties.
See also the section called “GDL Text I/O Add-On”.
OPEN
OPEN (filter, filename, parameter_string)
Opens a file as directed. Its return value is a positive integer that will identify the specific file. This value, the channel number, will be the file’s
reference number in succeeding instances. To include the referenced file in the archive project, use the FILE_DEPENDENCE command
with the file name.
MISCELLANEOUS
GDL can also handle a number of operations on external files through special Add-On applications. The commands used to achieve this are described in this chapter
and illustrated with an example.
GLOBAL VARIABLES
The global variables make it possible to store special values of the model. This allows you to access geometric information about the environment
of the GDL macro. For example, you can access the wall parameters when defining a window which has to fit into the wall. Global variables
are not stacked during macro calls.
For doors, windows, labels and property library parts there is one more possibility to communicate with ArchiCAD through fix named, optional
parameters. These parameters, if present on the library part’s parameter list, are set by ArchiCAD. See the list of fix named parameters and more details
in the Basic Library documentation http://www.graphisoft.com/support/developer/documentation/LibraryDevDoc/16/.
Story information
GLOB_HSTORY_ELEV elevation of the home story
home story is the one the object is placed on
GLOB_HSTORY_HEIGHT height of the home story
home story is the one the object is placed on
Fly-through information
GLOB_FRAME_NR current frame number in animation
valid only for animation, -1 for still images
GLOB_FIRST_FRAME first frame index in fly-through
valid only for animation, 0 for still images
GLOB_LAST_FRAME last frame index in fly-through
valid only for animation, 0 for still images
GLOB_EYEPOS_X current camera position (x)
valid only in perspective projection for both animation and still images
GLOB_EYEPOS_Y current camera position (y)
valid only in perspective projection for both animation and still images
GLOB_EYEPOS_Z current camera position (z)
valid only in perspective projection for both animation and still images
GLOB_TARGPOS_X current target position (x)
valid only in perspective projection for both animation and still images
GLOB_TARGPOS_Y current target position (y)
valid only in perspective projection for both animation and still images
GLOB_TARGPOS_Z current target position (z)
valid only in perspective projection for both animation and still images
Object, Lamp, Door, Window, Wall End, Skylight, Curtain Wall Accessory parameters -
available for listing and labels only
SYMB_A_SIZE nominal length/width of library part
length of object/lamp, width of window/door (fixed parameter), width of accessory
SYMB_B_SIZE nominal width/height of library parts
width of object/lamp, height of window/door (fixed parameter), height of accessory
Object, Lamp, Curtain Wall Accessory parameters - available for listing and labels only
SYMB_Z_SIZE nominal height/length of the library part
length of accessory or if a user parameter is named in zzyzx format then it will be used for nominal height, otherwise 0
Label parameters
LABEL_POSITION position of the label
array[3][2] containing the coordinates of the 3 points defining the label position
LABEL_CUSTOM_ARROW use symbol arrow option on/off
1 if the Use symbol arrow checkbox is checked, 0 otherwise
LABEL_ARROW_LINETYPE line type of the line of the arrow
LABEL_ARROW_PEN pen of the arrow
LABEL_ARROWHEAD_PEN pen of the arrowhead
LABEL_FONT_NAME font name
LABEL_TEXT_SIZE text size
LABEL_TEXT_PEN pen of the text
LABEL_TEXT_BG_PEN text box background pen
0 if opaque is off, the background pen otherwise
LABEL_FONT_STYLE font style
0-normal, 1-bold, 2-italic, 4- underline
WALL_MAT_A material of the wall on the side opposite to the opening side
WALL_MAT_B material of the wall on the opening side
this can vary from opening to opening placed in the same wall
WALL_MAT_EDGE material of the edges of the wall
WALL_LINETYPE line type of the wall
applied on the contours only in the floor plan window
WALL_FILL fill type of the wall
fill index, first skin of a composite structure
WALL_FILL_PEN pen of the wall fill
WALL_COMPS_NAME name of the composite or complex structure of the wall
the name of the profile attribute for complex wall, the name of the composite attribute for composite walls, empty string otherwise.
WALL_SKINS_NUMBER number of composite or complex wall skins
range of 1to 127, 0 if single fill applied
WALL_SKINS_PARAMS parameters of the composite or complex wall skins
array with 16 columns: fill, thickness, (old contour pen), pen of fill, pen of fill background, core status, upper line pen, upper line type, lower line pen, lower line type, end face pen,
fill orientation, skin type, end face line type, finish skin status, oriented fill status and with arbitrary number of rows.
core status: 0 - not part, 1 - part, 3 - last skin of core, fill orientation: 0 - global, 1 - local, skin type: 0 - cut, 1 - below cutplane, 2 - above cutplane (all skin types are 0 for simple walls).
For D/W in complex walls on the floor plan this variable contains the data of all cut skins, for wall ends on the floor plan the data of all skins. finish skin status: 0 - not finish skin,
1 - finish skin, oriented fill status: 0 - global or local fill orientation as set in the "fill orientation" column, 1 - fill orientation and size match with the wall skin direction and thickness
For D/W and wall ends in the 3D window contains the data of the skins actually cut by the D/W or wall end.
WALL_SECT_PEN pen of the contours of the wall cut surfaces
applied on contours of cut surfaces both in floor plan and section/elevation windows
WALL_VIEW_PEN pen of the contours of the wall on view
applied on all edges in 3D window and on outline edges (edges on view below cutting plane) in floor plan and section/elevation window
WALL_FBGD_PEN pen of the background of the fill of the wall
WALL_DIRECTION direction of the wall
straight walls: the direction of the reference line, curved walls: the direction of the chord of the arc
BEAM_REFLINE_OFFSET offset of the reference line relative to the axes of the beam
BEAM_PRIORITY 3D intersection priority index number
BEAM_MAT_RIGHT material of the beam on the right side of the reference line
BEAM_MAT_LEFT material of the beam on the left side of the reference line
BEAM_MAT_TOP material of the beam on the top
BEAM_MAT_BOTTOM material of the beam at the bottom
BEAM_MAT_END material of the beam at both ends
BEAM_OUTLINE_LINETYPE line type of the beam outline
BEAM_AXES_LINETYPE line type of the beam axes
BEAM_FILL fill type of the beam
BEAM_FILL_PEN pen of the beam fill
BEAM_SECT_PEN pen of the contours of the beam cut surfaces
BEAM_FBGD_PEN pen of the background of the fill of the beam
BEAM_DIRECTION the direction of the beam reference line
BEAM_POSITION absolute coordinates of the beam axis starting point
BEAM_LENGTH_RIGHT length of the beam on the right side of the reference line
BEAM_LENGTH_LEFT length of the beam on the left side of the reference line
BEAM_RIGHT_SURF surface of the beam on the right side of the reference line
BEAM_LEFT_SURF surface of the beam on the left side of the reference line
BEAM_TOP_SURF surface of the top of the beam
BEAM_BOTTOM_SURF surface of the bottom of the beam
BEAM_END_SURF surface of both ends of the beam
BEAM_VOLUME volume of the beam
BEAM_VOLUME_CON conditional volume of the beam
BEAM_HOLES_NR number of holes in the beam
Curtain Wall Frame parameters - available for listing and labels only
CWFRAME_TYPE type of the frame
'Invisible', 'Generic', 'Butt-glazed' or the name of the GDL object
CWFRAME_CLASS class of the frame
0 - mullion, 1 - transom, 2 - boundary, 3 - custom
CWFRAME_POSITION location of the frame
0 - primary gridline, 1 - secondary gridline, 2 - boundary, 3 - other
Curtain Wall Panel parameters - available for listing and labels only
CWPANEL_TYPE type of the panel
"Generic" or the name of the GDL object
CWPANEL_CLASS class of the panel
0 - main, 1 - distinct, 2 - custom
CWPANEL_VERTICAL_DIRECTION slant angle of exterior surface of the panel
degree between -90 and 90
CWPANEL_HORIZONTAL_DIRECTION angle of exterior surface of the panel from Project North
degree between -180 and 180
CWPANEL_WIDTH width of the panel
CWPANEL_NOMINAL_WIDTH nominal width of the panel
CWPANEL_HEIGHT height of the panel
CWPANEL_NOMINAL_HEIGHT nominal height of the panel
CWPANEL_THICKNESS thickness of the panel
CWPANEL_SURF surface of the panel
CWPANEL_GROSS_SURF gross surface of the panel
CWPANEL_NOMINAL_SURF nominal surface of the panel
CWPANEL_PERIMETER perimeter of the panel
Curtain Wall Junction parameters - available for listing and labels only
CWJUNC_TYPE type of the junction
name of the GDL object
Curtain Wall Accessory parameters - available for listing and labels only
CWACC_TYPE type of the accessory
name of the GDL object
Common Parameters for Shells and Roofs - available for listing and labels only
SHELLBASE_THICKNESS thickness of the shell/roof/slab
equal to ROOF_THICKNESS for roofs
SHELLBASE_MAT_REFERENCE material of the bottom surface of the shell/roof
equal to ROOF_MAT_BOTT for roofs
SHELLBASE_MAT_EDGE material of the edges of the shell/roof
equal to ROOF_MAT_EDGE for roofs
SHELLBASE_MAT_OPPOSITE material of the top surface of the shell/roof
equal to ROOF_MAT_TOP for roofs
SHELLBASE_LINETYPE line type of the shell/roof
applied on the contours only in the floor plan window, equal to ROOF_LINETYPE for roofs
SHELLBASE_FILL fill of the shell/roof
fill index - its value is negative in case of a composite structure, equal to ROOF_FILL for roofs
SHELLBASE_FILL_PEN pen of the fill of the roof shell/roof
equal to ROOF_FILL_PEN for roofs
SHELLBASE_GROSS_OPPOSITE_SURF gross surface of the opposite side to the reference side of the shell/roof
reduced by the surface of the holes, equal to ROOF_GROSS_TOP_SURF for roofs
SHELLBASE_EDGE_SURF surface of the edge of the shell/roof
not reduced by the surface of holes, equal to ROOF_EDGE_SURF for roofs
SHELLBASE_GROSS_EDGE_SURF gross surface of the shell/roof edges
reduced by the surface of holes, equal to ROOF_GROSS_EDGE_SURF for roofs
SHELLBASE_PERIMETER perimeter of the shell/roof
equal to ROOF_PERIMETER for roofs
SHELLBASE_VOLUME volume of the shell/roof
not reduced by the volume of holes, equal to ROOF_VOLUME for roofs
SHELLBASE_COND_VOLUME conditional volume of the roof shell/roof
reduced by the volume of holes, which are bigger than the given value; equal to ROOF_VOLUME_CON for roofs
SHELLBASE_GROSS_VOLUME gross volume of the roof shell/roof
reduced by the volume of holes, equal to ROOF_GROSS_VOLUME for roofs
SHELLBASE_HOLES_NR number of holes in the shell/roof
equal to ROOF_HOLES_NR for roofs
SHELLBASE_HOLES_SURF surface of holes in the shell/roof
equal to ROOF_HOLES_AREA for roofs
SHELLBASE_HOLES_PRM perimeter of holes in the shell
equal to ROOF_HOLES_PRM for roofs
SHELLBASE_OPENINGS_NR number of openings in the shell
SHELLBASE_OPENINGS_SURF surface of openings in the shell
SHELLBASE_INSU_THICKNESS shell/roof insulation skin thickness
equal to ROOF_INSU_THICKNESS for roofs
GLOB_USER_14
GLOB_USER_15
GLOB_USER_16
GLOB_USER_17
GLOB_USER_18
GLOB_USER_19
GLOB_USER_20 free variables 11 to 20 are initialized to string by default
A_ GLOB_SCALE
B_ GLOB_HSTORY_ELEV
C_ WALL_THICKNESS
D_ WALL_HEIGHT
E_ WALL_SECT_PEN
F_ WALL_FILL_PEN
G_ WALL_MAT_A
H_ WALL_MAT_B
I_ WALL_MAT_EDGE
J_ GLOB_ELEVATION
K_ WIDO_SILL
L_ SYMB_VIEW_PEN
M_ SYMB_MAT
N_ GLOB_FRAME_NR
O_ GLOB_FIRST_FRAME
P_ GLOB_LAST_FRAME
Q_ GLOB_HSTORY_HEIGHT
R_ WIDO_ORIG_DIST
S_ GLOB_USER_1
T_ GLOB_USER_2
U_ GLOB_USER_3
V_ GLOB_USER_4
W_ GLOB_USER_5
X_ GLOB_USER_6
Y_ GLOB_USER_7
Z_ GLOB_USER_8
A~ WALL_FILL
B~ WIDO_RIGHT_JAMB
C~ WIDO_THRES_DEPTH
D~ WIDO_HEAD_DEPTH
E~ WIDO_REVEAL_SIDE
F~ WIDO_FRAME_THICKNESS
G~ GLOB_USER_9
H~ WIDO_POSITION
I~ GLOB_USER_10
J~ WALL_RESOL
K~ GLOB_EYEPOS_X
L~ GLOB_EYEPOS_Y
M~ GLOB_EYEPOS_Z
N~ GLOB_TARGPOS_X
O~ GLOB_TARGPOS_Y
P~ GLOB_TARGPOS_Z
Q~ GLOB_CSTORY_ELEV
R~ GLOB_CSTORY_HEIGHT
S~ GLOB_CH_STORY_DIST
T~ GLOB_SCRIPT_TYPE
U~ GLOB_NORTH_DIR
V~ SYMB_MIRRORED
W~ SYMB_ROTANGLE
X~ SYMB_POS_X
Y~ SYMB_POS_Y
Z~ SYMB_POS_Z
REQUEST OPTIONS
REQUEST (question_name, name | index, variable1 [, variable2, ...])
The first parameter represents the question string while the second represents the object of the question (if it exists) and can be of either string
or numeric type. The other parameters are variable names in which the return values (the answers) are stored. The function’s return value is the
number of the answer (in the case of a badly formulated question or a nonexistent name, the value will be 0).
REQUEST ("Name_of_program", "", program_name)
Returns in the given variable the name of the program, e. g., "ArchiCAD", etc.
Example 1: Printing the name of the program
n=REQUEST ("Name_of_program", "", program_name)
PRINT program_name
Example 2:
DIM t[]
n = REQUEST ("STORY_INFO", "", nr, t)
FOR i = 1 TO nr
nr = STR ("%.0m", t [4 * (i - 1) + 1])
name = t [4 * (i - 1) + 2]
elevation = STR ("%m", t [4 * (i - 1) + 3])
height = STR ("%m", t [4 * (i - 1) + 4])
TEXT2 0, -i, nr + "," + name + "," + elevation + "," + height
NEXT i
Example 3:
format = "" num = 60.55
REQUEST ("Angular_dimension", "",format)!"%.2dd"
TEXT2 0, 0, STR (format, num)!60.55
door. For doors and windows, there can be a maximum of two related zones. The return value of the request is the number of successfully
retrieved values (0 if the object has no owner, or its owner is not inside any zone).
REQUEST ("Zone_colus_area", "", area)
Returns in the area variable the total area of the columns placed in the current zone. Effective only for Zone Stamps. Available only for
compatibility reasons. It is recommended to use quantities set by ArchiCAD in Zone Stamp fix parameters.
REQUEST ("Custom_auto_label", "", name)
Returns in the name variable the name of the custom auto label of the library part or an empty string if it does not exist.
REQUEST ("Rgb_of_material", name, r, g, b)
REQUEST ("Rgb_of_pen", penindex, r, g, b)
REQUEST ("Pen_of_RGB", "r g b", penindex)
Like the REQ() function (but in just one call), returns in the specified variables the value of the r, g, b components of the material and pen,
or the index of the pen corresponding to the given RGB values.
REQUEST ("Height_of_style", name, height [, descent, leading])
Returns in the given variables the total height of the style measured in millimeters (height in meters is height / 1000 * GLOB_SCALE); the
descent (the distance in millimeters from the text base line to the descent line) and the leading (the distance in millimeters from the descent
line to the ascent line).
REQUEST ("Style_info", name, fontname [, size, anchor, face_or_slant])
Returns information in the given variables on the previously defined style (see style parameters at the DEFINE STYLE command). Can be useful
in macros to collect information on the style defined in a main script.
REQUEST ("Name_of_material", index, name)
Returns in the variable the material name identified by index.
REQUEST ("Name_of_fill", index, name)
Returns in the name variable the fill name identified by index.
REQUEST ("Name_of_line_type", index, name)
Returns in the given variable the line name identified by index.
REQUEST ("Name_of_style", index, name)
Returns in the given variable the name of the style identified by index.
If index < 0, it refers to a material, fill, line type or style defined in the GDL script or the MASTER_GDL file. A call of a request with index
= 0 returns in the variable the name of the default material or line type. (Empty string for fill and style.)
The return value of the request is the number of successfully retrieved values (1 if no error occurred, 0 for error when the index is not valid).
REQUEST ("WINDOW_DOOR_SHOW_DIM", "", show)
Before 9.0 returns 1 in the show variable if Options/Display Options/Doors & Windows is set to "Show with Dimensions", 0 otherwise. Since
9.0 display options were split to separate Door and Window display options, so for compatibility reasons AC checks if the request is used in a
Window (or marker of a Window) or a Door (or marker of a Door) and automatically returns the corresponding display option. In other cases
(symbol, lamp, label) the Window option is returned. Can be used to hide/show custom dimensions according to the current Display Options.
Since 9.0 the "window_show_dim", and the "door_show_dim" separate requests are available.
REQUEST ("window_show_dim", "", show)
Returns 1 in the show variable if in the Model View Options/Window options the "with Markers" is checked, 0 otherwise.
REQUEST ("door_show_dim", "", show)
Returns 1 in the show variable if in the Model View Options/Door options the "with Markers" is checked, 0 otherwise.
REQUEST ("name_of_listed", "", name)
Returns in the name variable the name of the library part associated with the property type library part containing this request. For elements
(Walls, Slabs, etc.), the name is an empty string.
REQUEST ("window_door_zone_relev", "", out_direction)
Effective only for Doors and Windows. Use it as complement to the "zone_relations" request. Returns 1 in the out_direction variable if the
Door/Window opening direction is in that of the first room identified by the "zone_relations" request, 2 if the opening direction is towards
the second room. It also returns 2 if there is only one room and the opening direction is to the outside.
REQUEST ("window_door_zone_relev_of_owner", "", out_direction)
Effective only if the library part’s parent is a door or a window (markers, labels). Use it as a complement to the "zone_relations_of_owner"
request. Returns 1 in the out_direction variable if the parent’s opening direction is in that of the first zone identified by the zone relations
type requests, 2 if the opening direction is towards the second zone. It also returns 2 if there is only one zone and the opening direction is
to the outside.
REQUEST ("matching_properties", type, name1, name2, ...)
If type = 1, returns in the given variables individually associated property library part names, otherwise property library part names associated
by criteria. If used in an associative label, the function returns the properties of the element the label is associated with.
REQUEST ("Constr_Fills_display", "", optionVal)
Returns in the given variable the value of the Cut Fills Display option as set in the Document/ Set Model View/ Model View Options (previous
Construction Fills).
optionVal: cut fill display code.
1: Show cut fill contours only (previous Empty)
2: Show cut fill contours only with separator lines (previous No Fills)
4: Cut fill patterns: Solid (previous Solid)
6: Cut fill patterns: as in Settings (previous Vectorial Hatching)
REQUEST ("Working_length_unit", "", format_string)
REQUEST ("Working_angle_unit", "", format_string)
With these requests, the user can get the working unit formats as set in the Options > Project Preferences > Working Units dialog box. They
return a format string that can be used as the first parameter in the STR () function. The requests work only when interpreting the parameter
or the user interface scripts.
REQUEST ("Model_length_unit", "", format_string)
REQUEST ("Layout_length_unit", "", format_string)
With these requests, the user can get the layout and the model unit formats as set in the Options > Project Preferences > Working Units dialog
box. They return a format string that can be used as the first parameter in the STR () function. The requests work only when interpreting the
parameter or the user interface scripts.
REQUEST ("Model_text_size_unit", "", format_string)
REQUEST ("Layout_text_size_unit", "", format_string)
With these requests, the user can get the layout and the model text size formats. They return a format string that can be used as the first
parameter in the STR () function. The requests work only when interpreting the parameter or the user interface scripts.
REQUEST ("ASSOCLP_PARVALUE", expr, name_or_index, type, flags, dim1, dim2, p_values)
Returns information in the given variables on the library part parameter with which the library part containing this request is associated. Can
be used in property objects, labels and marker objects.
The function return value is the number of successfully retrieved values, 0 if the specified parameter does not exist or an error occurred.
expr: the request’s object, associated library p art parameter name or index expression.
name_or_index: returns the index or the name of the parameter, depending on the previous expression type (returns index if a parameter
name, name if the index is specified).
type: parameter type, possible values:
1: boolean
2: integer
3: real number
4: string
5: length
6: angle
7: line
8: material
9: fill
10: pen color
11: light switch
12: rgb color
"NAME"
"FULLNAME"
"QUANTITY"
"TOTQUANTITY"
"UNITCODE"
"UNITNAME"
"UNITFORMATSTR"
"PROPOBJNAME"
nr_data: returns the number of the data items.
data: returns the property data, records containing and being ordered by the fields specified in the parameter string. Values are returned as
a one dimensional array which contains the requested record fields successively, independently of the dimensions of the variable specified to
store it. If the variable is not a dynamic array, there are as many elements stored as there is room for (in case of a simple variable only one,
the first element). If values is a two dimensional dynamic array, all elements are stored in the first row.
Example 4:
DIM DATA []
n = REQUEST ("ASSOCEL_PROPERTIES", "iscomp, code, name", nr, data)
IF nr = 0 THEN
TEXT2 0, 0, "No properties"
ELSE
j = 0
FOR i = 1 TO nr
IF i MOD 3 = 0 THEN
TEXT2 0, -j, DATA [i] ! name
j = j + 1
ENDIF
NEXT i
ENDIF
REQUEST ("REFERENCE_LEVEL_DATA", "", name1, elev1, name2, elev2, name3, elev3, name4, elev4)
Returns in the given variables the names and elevations of the reference levels as set in the Options/Project Preferences/Reference Levels
dialog. The function return value is the number of successfully retrieved values, 0 if an error occurred.
REQUEST ("ANCESTRY_INFO", expr, name [, guid,
parent_name1, parent_guid1,
...,
parent_namen, parent_guidn)
• if placed on the floor plan: the story internal ID, index as a string and name, homeContext = 1,
• if placed on a section: the section internal ID, reference ID and name, homeContext = 2,
• if placed on a detail: the detail internal ID, reference ID and name, homeContext = 3,
• if placed on a master layout: the layout internal ID, empty string and name, homeContext = 4,
• if placed on a layout: the layout internal ID, number and name, homeContext = 5.
For labels the returned data refers to the labeled element. The collected data can be used to uniquely identify elements in different ArchiCAD
databases of a plan file.
REQUEST ("floor_plan_option", "", storyViewpointType)
Returns the story viewpoint type which is set in the Model View Options. 0 stands for "Floor Plan", 1 stands for "Ceiling Plan".
REQUEST ("class_of_fill", index, class)
Returns class of the fill identified by index in the class variable.
class: Possible values:
1: vector fill
2: symbol fill
3: translucent fill
4: linear gradient fill
5: radial gradient fill
6: image fill
REQUEST ("view_rotangle", "", angleViewRotation)
Returns the rotation angle of the current view.
REQUEST ("program_info", "", name[, version[, keySerialNumber[, isCommercial]]])
Returns information on the currently running program.
name: name of the program
version: version number of the program
keySerialNumber: serial number of the keyplug
isCommercial: returns true if there is running a full (commercial) version of the program
REQUEST (extension_name, parameter_string, variable1, variable2, ...)
If the question isn’t one of those listed above, the REQUEST() function will attempt to use it as an extension-specific name. If this extension
is loaded, it will be used to get as many variable names as are specified. The parameter string is interpreted by the extension.
General Guidelines
Once a door/window is inserted into a wall, the default position of these library parts’ coordinate system is rotated so that the x-y plane is
vertical and the z axis points horizontally into the wall. The origin is placed on the bottom center of the wall opening, on the exterior side of
the wall. This way, doors/windows can be easily modeled by elements in the x-y plane. See the illustrations below.
Because of the special behavior of these library parts, the 2D symbol is generated from a special built-in projection otherwise not accessible by
users (an upside-down side view from a 90 degree direction). The symbol and the 3D shape are fitted to the Door/Window origin by the lower
(y) center (x) of the bounding box, but no adjustment is made along the z axis to enable users to design doors/windows extending beyond
the wall in either z direction.
Considering these rules, here are some hints that will help you construct doors/windows that will work properly:
• When constructing the door/window in the floor plan window, visualize it as if you are looking at it from the inside of the wall it will be
inserted into.
• Think of the project zero level as the external surface of the wall.
• Elements that should be inside the wall, like the window frame, should be above the zero level.
• Door panels opening to the outside should be below the zero level.
• 2D related challenges
• Cutting custom wall opening
• WALLHOLE2
• Extending the wall polygon
• WALLBLOCK2
• WALLLINE2
• WALLARC2
1:
FOR i=1 TO h-1
ADDX (a-2*d)/3
BLOCK g, f-d, g
ADDY f+e-d
BLOCK g, b-f-d-e, g
DEL 1
NEXT i
DEL h-1
RETURN
3D Related Challenges
• With the WALLHOLE or WALLNICHE command, you can define a polygon shape to be cut into the wall where the door/window is placed.
WALLHOLE
WALLHOLE n, status,
x1, y1, mask1,
...
xn, yn, maskn
[, x, y, z]
n: the number of polygon nodes.
status:
1: use the attributes of the body for the generated polygons and edges,
2: generated cut polygons will be treated as normal polygons.
xi, yi: cross-section polygon coordinates.
y Z j3
x n
i+1
Y j2
j1
1
i X
This command can be used in doors’/windows’ 3D script to cut custom hole(s) in the wall they are placed into. During the 3D generation of
the current wall, the 3D script of all its doors/windows is interpreted without model generation to collect the WALLHOLE commands. If they
exist, the current wall will be cut using an infinite tube with the polygonal cross-section and direction defined in the script. There can be any
number of WALLHOLEs for any door/window, so it is possible to cut more holes for the same door/window, even intersecting ones. If at
least one WALLHOLE command is interpreted in a door/window 3D script, no rectangular opening will be generated for that door/window.
Note: The 3D reveal will not be generated automatically for custom holes, you have to generate it from the script. The hole customized this
way will only be visible in 3D, because WALLHOLE commands do not have any effect in 2D. A 2D representation can be scripted if needed
(used with framing in plan off).
The use of convex polygonal cross-sections is recommended; using concave polygons may result in strange shadings/renderings or cut errors.
Convex polygons can be combined to obtain concave ones. Mirroring transformations affect the cutting direction in an unexpected way - to
get a more straightforward result, use the WALLNICHE command.
Example 1:
RESOL 72
l1 = 2.7: l2=1.2
h1=2.1: h2=0.3: h3=0.9
r = ((l1/2)^2+h2^2)/(2*h2)
a = ATN((l1/2)/(r-h2))
WALLHOLE 5, 1,
-l1/2, h3, 15,
l1/2, h3, 15,
l1/2, h1-h2, 13,
0, h1-r, 915,
0, 2*a, 4015
WALLHOLE 4, 1,
l1/2-l2, 0, 15,
l1/2, 0, 15,
l1/2, h3, 15,
l1/2-l2, h3, 15
Example 2:
WALLHOLE 5, 1,
-0.45, 0, 15,
0.45, 0, 15,
0.45, 1.5, 15,
0, 1.95, 15,
-0.45, 1.5, 15
PRISM_ 12, 0.1,
-0.45, 0, 15,
0.45, 0, 15,
0.45, 1.5, 15,
0, 1.95, 15,
-0.45, 1.5, 15,
-0.45, 0, -1,
-0.35, 0.1, 15,
0.35, 0.1, 15,
0.35, 1.45, 15,
0, 1.80, 15,
-0.35, 1.44, 15,
-0.35, 0.1, -1
WALLNICHE
WALLNICHE n, method, status,
rx, ry, rz, d,
x1, y1, mask1, [mat1,]
...
xn, yn, maskn[, matn]
Similar to the CUTFORM definition.
method: Controls the form of the cutting body:
1: prism shaped,
2: pyramidal,
3: wedge-shaped cutting body. The direction of the wedge’s top edge is parallel to the Y axis and its position is in rx, ry, rz (ry is ignored).
status: Controls the extent of the cutting body and the treatment of the generated cut polygons and new edges.
status = j1 + 2*j2 + 8*j4 + 16*j5 + 32*j6 + 64*j7 + 128*j8 + 256*j9, where each j can be 0 or 1.
j1: use the attributes of the body for the generated polygons and edges,
The hole in the wall on the left is created when the program automatically cuts the hole for the door/window. In this case the sides will be of
radial direction. On the right, the hole is cut using the WALLHOLE command in the 3D Script of the door/window object. The object itself
needs to be written by taking these factors into consideration.
Another thing to consider is whether the door/window placed into the curved wall is a straight or a curved one.
In the case of a straight door/window, as on the left above, the thickness and width of the object and the thickness of the wall are closely related,
since above a certain dimension the object would fall outside of the wall. When using true curved doors/windows, this problem doesn’t occur.
RESOL 72
ROTX -90 : MULY -1
C= 0.12 : Z=360*A/(2*WIDO_ORIG_DIST*PI)
Y= 360*C/(2*WIDO_ORIG_DIST*PI) : A1= 270+Z/2 : A2=270-Z/2
GOSUB "curved_horizontal_frame"
ADDZ B
MULZ -1
GOSUB "curved_horizontal_frame"
DEL 2
ADDZ C
GOSUB "vertical_frame"
MULX -1
GOSUB "vertical_frame"
END
"curved_horizontal_frame":
PRISM_ 9, C,
cos(A2)*R_, SIN(A2)*R_+R_, 11,
cos(A2+Y)*R_, sin(A2+Y)*R_+R_, 13,
0, R_, 900,
0, Z-2*Y, 4009,
cos(A1)*R_, sin(A1)*R_+R_, 11,
cos(A1)*(R_-0.1), sin(A1)*(R_-0.1)+R_, 11,
cos(A1-Y)*(R_-0.1), sin(A1-Y)*(R_-0.1)+R_, 13,
0, -(Z-2*Y), 4009,
cos(A2)*(R_-0.1), sin(A2)*(R_-0.1)+R_, 11
RETURN
"vertical_frame":
PRISM_ 4, B-2*C,
cos(A2)*R_, sin(A2)*R_+R_, 10,
cos(A2+Y)*R_, sin(A2+Y)*R_+R_, 15,
cos(A2+Y)*(R_-0.1), sin(A2+Y)*(R_-0.1)+R_, 10,
cos(A2)*(R_-0.1), sin(A2)*(R_-0.1)+R_, 10
RETURN
Example:
wFrame=0.1: wDivider=0.025
Z=A/2-SQR(2)*wFrame: Y=A/2-SQR(2)*wFrame-wDivider
ADDY A/2
WALLHOLE 4, 1,
0, -A/2, 15,
A/2, 0, 15,
0, A/2, 15,
-A/2, 0, 15
PRISM_ 10, 0.1,
0, -A/2, 15,
A/2, 0, 15,
0, A/2, 15,
-A/2, 0, 15
0, -A/2, -1,
0, -Z, 15,
Z, 0, 15,
0, Z, 15,
-Z, 0, 15,
0, - Z, -1
ADDZ 0.02
GOSUB "cross_divider"
ADDZ 0.03
GOSUB "cross_divider"
ADDY -Z
SET MATERIAL "Glass-Blue"
ROTZ 45
RECT SQR(2)*Z, SQR(2)*Z
END
"cross_divider":
PRISM_ 16, 0.03,
0, -Z, 15,
wDivider, -Y, 15,
wDivider, -wDivider, 15,
Y, -wDivider, 15,
Z, 0, 15,
Z, wDivider, 15,
wDivider, wDivider, 15,
wDivider, Y, 15,
0, Z, 15,
-wDivider, Y, 15,
-wDivider, wDivider, 15,
-Y, wDivider, 15,
-Z, 0, 15,
-Y, -wDivider, 15,
-wDivider, -wDivider, 15,
-wDivider, -Y, 15
RETURN
2D Related Challenges
WALLBLOCK2{2}
WALLBLOCK2{2} n, frame_fill, fillcategory, distortion_flags,
fill_pen, fill_background_pen,
fillOrigoX, fillOrigoY,
mxx, mxy, myx, myy,
innerRadius,
x1, y1, s1, ..., xn, yn, sn
Wall polygon (extension) definition for the plan view. Both the cut and view wall polygons are cut by the defined polygon. Wall openings
defined via WALLHOLE2 in an other window/door object cut the polygon generated by this command, while wallholes coming from the
same object don’t.
This command can be used in the 2D script of door/window objects only.
The parameterization of the command is exactly the same as the ones of WALLHOLE2.
WALLLINE2
WALLLINE2 x1, y1, x2, y2
Wall line (extension) definition between two points for the plan view. Wall openings defined via WALLHOLE2 in an other window/door object
cut the line generated by this command, while wallholes coming from the same object don’t.
This command can be used in the 2D script of door/window objects only.
The parameterization of the command is exactly the same as the one of the LINE2 command.
WALLARC2
WALLARC2 x, y, r, alpha, beta
An arc with its centerpoint at (x, y) from the angle alpha to beta, with a radius of r, which is drawn by the containing wall. Wall openings defined
via WALLHOLE2 in an other window/door object cut the arc generated by this command, while wallholes coming from the same object don’t.
This command can be used in the 2D script of door/window objects only.
The parameterization of the command is exactly the same as the one of the ARC2 command.
KEYWORDS
Common Keywords
FILE_DEPENDENCE
MOD
AND
OR
EXOR
FOR
TO
STEP
NEXT
DO (at DO - WHILE, at WHILE - ENDWHILE)
WHILE (at DO - WHILE, at WHILE - ENDWHILE)
ENDWHILE
REPEAT
UNTIL
IF (at IF - GOTO, at IF - THEN - ELSE - ENDIF)
THEN (at IF - GOTO, at IF - THEN - ELSE - ENDIF)
GOTO (at IF - GOTO, at GOTO)
GOSUB (at IF - GOTO, at GOSUB)
ELSE
ENDIF
RETURN
END
EXIT
BREAKPOINT
PUT
GET
USE
NSP
CALL
RETURNED_PARAMETERS
DEFAULT
PRINT
VARDIM1
VARDIM2
ABS
CEIL
INT
FRA
ROUND_INT
SGN
SQR
ACS
ASN
ATN
COS
SIN
TAN
PI
EXP
LGT
LOG
NOT
MIN
MAX
RND
BITTEST
BITSET
REQ
REQUEST
IND
APPLICATION_QUERY
LIBRARYGLOBAL
STR
STR{2}
SPLIT
STW
STRLEN
STRSTR
STRSUB
OPEN
INPUT
VARTYPE
OUTPUT
CLOSE
INITADDONSCOPE
PREPAREFUNCTION
CALLFUNCTION
CLOSEADDONSCOPE
Reserved Keywords
The keywords listed below are reserved; they exist for compatibility reasons or are not publicized.
BAS
BOX
CONT
FILTER
GDLBIN
HIP_ROOFS
LIN
LINE
MIGRATIONWARNING
NOD
NODE
ORIGO
PARS
PAUSE
PLOTMAKER
PLOTTER
RECT_
REF
SFLINE
TET
TETRA
TRI
WALL_
VOCA
UI_OK
UI_CANCEL
3D Use Only
ADDX
ADDY
ADDZ
ADD
MULX
MULY
MULZ
MUL
ROTX
ROTY
ROTZ
ROT
XFORM
BLOCK
BRICK
CYLIND
SPHERE
ELLIPS
CONE
PRISM
PRISM_
CPRISM_
CPRISM_{2}
BPRISM_
FPRISM_
HPRISM_
SPRISM_
SPRISM_{2}
SLAB
SLAB_
CSLAB_
CWALL_
BWALL_
XWALL_
XWALL_{2}
BEAM
CROOF_
CROOF_{2}
MESH
ARMC
ARME
ELBOW
EXTRUDE
PYRAMID
REVOLVE
REVOLVE{2}
RULED
RULED{2}
SWEEP
TUBE
TUBEA
COONS
MASS
POLYROOF
EXTRUDEDSHELL
REVOLVEDSHELL
REVOLVEDSHELLANGULAR
RULEDSHELL
TEXT
BODY
BASE
CUTPLANE
CUTEND (at CUTPLANE, at CUTPLANE{2}, at CUTPLANE{3}, at CUTPOLY, at CUTPOLYA, at CUTSHAPE)
CUTPLANE{2}
CUTPLANE{3}
CUTPOLY
CUTPOLYA
CUTSHAPE
CUTFORM
GROUP
ENDGROUP
ADDGROUP
ADDGROUP{2}
SUBGROUP
SUBGROUP{2}
ISECTGROUP
ISECTGROUP{2}
ISECTLINES
PLACEGROUP
KILLGROUP
SWEEPGROUP
SWEEPGROUP{2}
SWEEPGROUP{3}
CREATEGROUPWITHMATERIAL
BINARY
WALLNICHE
HOTSPOT
HOTLINE
HOTARC
LIN_
RECT
POLY
POLY_
PLANE
PLANE_
CIRCLE
ARC
LIGHT
PICTURE
RICHTEXT
VERT
TEVE
VECT
EDGE
PGON
PGON{2}
PIPG
COOR
MODEL
WIRE
SURFACE
SOLID
MATERIAL
SECT_FILL
SECT_ATTRS
SHADOW
ON
OFF
AUTO
DEFINE MATERIAL (at DEFINE MATERIAL, at DEFINE MATERIAL BASED_ON)
BASED_ON
DEFINE TEXTURE
WALLHOLE
2D Use Only
ADD2
MUL2
ROT2
LINE2
RECT2
POLY2
POLY2_
POLY2_A
POLY2_B
POLY2_B{2}
POLY2_B{3}
POLY2_B{4}
POLY2_B{5}
ARC2
CIRCLE2
SPLINE2
SPLINE2A
TEXT2
RICHTEXT2
FRAGMENT2
PROJECT2
PROJECT2{2}
PROJECT2{3}
DRAWING2
DRAWING3
DRAWING3{2}
DRAWING3{3}
WALLHOLE2
WALLHOLE2{2}
WALLBLOCK2
WALLBLOCK2{2}
WALLLINE2
WALLARC2
HOTSPOT2
HOTLINE2
HOTARC2
PICTURE2
PICTURE2{2}
LINE_PROPERTY
DRAWINDEX
FILL
LINE_TYPE
DEFINE FILL
DEFINE FILLA
DEFINE SYMBOL_FILL
DEFINE SOLID_FILL
DEFINE EMPTY_FILL
DEFINE LINEAR_GRADIENT_FILL
DEFINE RADIAL_GRADIENT_FILL
DEFINE TRANSLUCENT_FILL
DEFINE IMAGE_FILL
DEFINE LINE_TYPE
DEFINE SYMBOL_LINE
2D and 3D Use
DEL (at DEL, at DEL TOP)
TOP
NTR
ADDITIONAL_DATA (at LIGHT, at DEFINE MATERIAL BASED_ON)
LET
RADIUS
RESOL
TOLER
PEN
SET (at [SET] STYLE, at [SET] MATERIAL, at [SET] FILL, at [SET] LINE_TYPE)
STYLE
DEFINE STYLE
DEFINE STYLE{2}
PARAGRAPH
ENDPARAGRAPH
TEXTBLOCK
TEXTBLOCK_
Non-Geometric Scripts
Properties Script
DATABASE_SET
DESCRIPTOR
REF DESCRIPTOR
COMPONENT
REF COMPONENT
BINARYPROP
SURFACE3D
VOLUME3D
POSITION
WALLS
COLUMNS
BEAMS
DOORS
WINDOWS
OBJECTS
CEILS
PITCHED_ROOFS
LIGHTS
HATCHES
ROOMS
MESHES
DRAWING
Parameter Script
VALUES
CUSTOM (at VALUES, at UI_INFIELD{3})
RANGE
PARAMETERS (at PARAMETERS, at CALL)
LOCK
ALL (at LOCK, at HIDEPARAMETER, at CALL)
HIDEPARAMETER
Interface Script
UI_DIALOG
UI_PAGE
UI_CURRENT_PAGE
UI_BUTTON (at UI_BUTTON, at UI_TOOLTIP)
UI_PREV
UI_NEXT
UI_FUNCTION
UI_LINK
UI_PICT_BUTTON (at UI_PICT_BUTTON, at UI_TOOLTIP)
UI_SEPARATOR
UI_GROUPBOX
UI_PICT (at UI_PICT, at UI_TOOLTIP)
UI_STYLE
UI_OUTFIELD (at UI_OUTFIELD, at UI_TOOLTIP)
UI_INFIELD (at UI_INFIELD, at UI_TOOLTIP)
UI_INFIELD{2} (at UI_INFIELD{2}, at UI_TOOLTIP)
UI_INFIELD{3} (at UI_INFIELD{3}, at UI_TOOLTIP)
UI_RADIOBUTTON (at UI_RADIOBUTTON, at UI_TOOLTIP)
UI_TOOLTIP
Note
Handlers add extra functionality to library parts (e.g. doors and windows cut holes in walls). Parameters names with the prefix ac_ are
reserved for special parameters associated with ArchiCAD handlers (e.g. ac_corner_window). Check the standard ArchiCAD Library
subtype templates for the complete list.
Standard GRAPHISOFT parameter names are marked with the gs_ prefix (e.g. gs_frame_pen). Please check the AC library parts for reference.
Use these parameters in your GDL scripts to ensure full compatibility with GRAPHISOFT libraries.
FM_ is reserved for ArchiFM (e.g. FM_Type) and HVAC_ is assigned to HVAC for ArchiCAD parameters (e.g. HVAC_Manufacturer).
Description of Database
The database is a text file in which the records are stored in separate lines. The database can be queried and modified based on a single key.
The key and the other items are separated by a character (specified in the OPEN command).
The length of the lines does not need to be the same and even the number of columns in the records may be different.
If a database is open for writing then there should be enough space beside the database file for duplicating the whole file.
Opening and closing a database may be time consuming, so consecutive closing and opening of a database should be avoided.
Large databases (with more than some hundred thousand records) should be ordered by the key values.
A database can be opened, queried, modified and closed by this Add-On using the OPEN, INPUT, OUTPUT and CLOSE GDL commands.
Opening a Database
channel = OPEN (filter, filename, paramstring)
Opens the database. If the database file is to be opened for modification and the file does not exist, it creates a new file. If the database file is
to be opened for reading and the file does not exist, an error message is displayed.
Its return value is a positive integer that will identify the specific database. This value will be the database’s future reference number.
If the database is opened before open command, it will generate a channel number only.
filter: the internal name of the Add-On, in this case "DATA"
filename: the name of the database file to be opened
paramstring: add-on specific parameter, contains separator characters and file opening mode parameters
The paramstring may contain the following:
SEPARATOR: after the keyword between single quotation marks ('') you can define a character that you want to use in your text file (both
in case of writing and reading) for the separation of data fields. A special case is the tabulator character ('\t').
MODE: after the keyword the mode of opening has to follow. There are three modes of opening:
• RO (read only)
• WA (read, append/modify)
• WO (overwrite) Empties the database if exists.
DIALOG: the 'filename' parameter is working as a file-identifier, otherwise it is a full-path-name. The file-identifier is a simple string, which
will be matched to an existing file by the Add-On during a standard 'Open/Save as' dialog. This matching is stored by the Add-On and it
won't ask again except when the file is not available any more. If the open mode is read only, the Add-On will put up an Open dialog to
select an existing document. Otherwise the Add-On put up an alert-dialog to select between the 'Create' and 'Browse' options:
• Create: create a new data-file (Save as Dialog).
• Browse: search an existing data-file (Open dialog)
LIBRARY: If the LIBRARY keyword is present in the parameter string, the data file has to be in the loaded library.
Always put a comma (,) between the components of paramstring.
If you use keywords that don’t exist, if the separator characters given are wrong or if there is nothing in the parameter string, the extension
will use the default settings: "SEPARATOR = '\t', MODE = RO"
Example:
ch1 = OPEN ("DATA", "file1",
"SEPARATOR=';', MODE = RO, DIALOG")
ch2 = OPEN ("DATA", "file2", "")
ch3 = OPEN ("DATA", "newfile",
"SEPARATOR = '\t', MODE = WA")
Example:
! input of three values from the first column of the first row
nr = INPUT (ch1, "key1", 1, v1, v2, v3)
Example:
string = "Date: 19.01.1996"
a = 1.5
OUTPUT ch2, "keyA", 1, "New record"
OUTPUT ch2, "keyA", 1, "Modified record"
OUTPUT ch2, "keyA", 0, 0 ! deletes the record
OUTPUT ch2, "keyB", 1, a, string
Closing Database
CLOSE channel
channel: channel value
Closes the database identified by the channel value.
Opening Channel
channel = OPEN (filter, filename, paramstring)
Its return value is a positive integer that will identify the opened channel. This value will become the channel’s future reference number. The
paramstring can contain specifiers and other characters.
filter: the internal name of the Add-On, in this case "DateTime"
filename: unused (there is no need to open any file to get the system date and time)
paramstring: add-on specific parameter, contains the desired output format of the date and time
The specifiers are replaced with date and time values as follows:
%c date and time in the form: 01:35:56 PM Wednesday, March 27, 1996
%x date in the form Wednesday, March 27, 1996
%X time in the form 01:35:56 PM
%a abbreviated weekday name
%A full weekday name
%w weekday, as a decimal number (0 (Sunday)-6 (Saturday))
%j day of the year, as a decimal number (001-366)
%U week number of the year (with Sunday as the first day of the first week), as a decimal number
%W week number of the year (with Monday as the first day of the first week), as a decimal number (00-53)
%Z GDL ignores this specifier. According to the standard, it prints the time zone if it can be determined
%% the % character
Example:
dstr = ""
ch = OPEN ("DateTime", "", "%w/%m/%d/%Y, %H:%M%P")
n = INPUT (ch, "", "", dstr)
CLOSE (ch)
PRINT dstr !it prints 3/03/27/1996, 14:36 PM
Reading Information
n = INPUT (channel, "", "", datetimestr)
It reads a string type value which represents the date and/or time in the format given at the OPEN sequence. The second and third parameters
are unused (they can be empty strings or 0-s as well)
The return value is the number of successfully read values, in this case 1.
channel: channel value, used to identify the connection.
datetimestr: string type value
Closing Channel
CLOSE channel
Closes the channel identified by the channel value.
Specifying Folder
channel = OPEN (filter, filename, paramstring)
channel: folder id
filter: the internal name of the Add-On, in this case "FileMan"
filename: the name of folder to be scanned (OS dependent path) - folder id string (in DIALOG mode - see later)
paramstring: Add-on specific parameter. The parameters in paramString must be separated by commas (,).
1. parameter: FILES/FOLDERS: What would you like to search for?
2. parameter (optional): DIALOG: Indicates that the folder is given by a file id string instead of a file path. When this is
the case, at the first time (and each time when the corresponding file path seems to be invalid) the user will be faced a dialog box to set the
id string - file path correspondence, which will be stored.
Example: Opening the root directory of the C drive (on a PC) for file-scanning
folder = OPEN ("FileMan", "c:\", "FOLDERS")
Example: Fetching the next file name from the specified folder
n = INPUT (folder, 0, 0, fileName)
If it succeeds, n will be 1. If there are no more files/subfolders the variable n will be set to zero.
Opening File
channel = OPEN (filter, filename, paramstring)
Opens the file. If the file into which you want to write doesn’t exist, it creates the file. If a file to be read doesn’t exist, an error message is displayed.
Its return value is a positive integer that will identify the specific file. This value will be the file’s future reference number.
filter: the internal name of the Add-On, in this case "TEXT"
filename: the name of the file to be opened
paramstring: add-on specific parameter, contains separator characters and file opening mode parameters
Example:
ch1 = OPEN ("TEXT", "file1", "SEPARATOR = ';', MODE = RO")
ch2 = OPEN ("TEXT", "file2", "")
ch3 = OPEN ("TEXT", "file3", "SEPARATOR = '\n', MODE = WO")
Reading Values
INPUT (channel, recordID, fieldID, var1 [, var2, ...])
It reads as many values from the given starting position of the file identified by the channel value as many parameters are given. In the parameter
list there has to be at least one value. The function puts the read values into the parameters in sequence. The values can be of numeric or string
type independently of the parameter type defined for them.
The return value is the number of successfully read values, in case of end of file (-1).
Both the row and the column numbers have to be positive integers, otherwise you will get an error message.
If the row or column numbers are incorrect, the input will not be carried out. (n = 0)
If the row and the column can be identified, as many values shall be input from the given starting position as many parameters are given, or if
there are more parameters than values, the parameters without corresponding values will be set to zero.
In case of empty columns (i.e. if there is nothing between the separator characters) the parameters will be set to zero.
channel: channel value, used to identify the connection.
recordID: the row number (numeric or string)
Example:
nr = INPUT (ch1, 1, 1, v1, v2, v3) ! input of three values
! from the firstcolumn of the first row
PRINT nr, v1, v2, v3
Writing Values
OUTPUT channel, recordID, fieldID, expr1 [, expr2, ...]
Outputs as many values into the file identified by the channel value from the given position as many expressions are defined. There has to be
at least one expression. The types of the output values are the same as those of the expressions.
In case of a text extension, the OUTPUT will either (depending on the mode of opening) overwrite the file or add to the end of the file the
given expressions to consecutive positions using between them the separator characters defined when opening the file. In this case, the given
position is not interpreted.
channel: channel value
recordID: The recordID is used to direct the new rows in the output
If the recordID is positive, the output values will be followed by a new row, otherwise the last value will be followed by a separator character.
fieldID: no role, its value is not used
expr1: values to output
Example:
string = "Date: 19.01.1996"
a = 1.5
OUTPUT ch2, 1, 0, string ! string followed by a new row
OUTPUT ch2, 0, 0, a, a + 1, a + 2! separator character after a + 2 ! without new row
Closing File
CLOSE channel
Closes the text file identified by the channel value.
channel: channel value
Example:
A GDL object that will simply copy the contents of the "f1" file both into the "f2" and the "f3" files, but will write all the values tabulated
in "f1" into a separate row in both "f2" and "f3".
ch1 = open ("TEXT", "f1", "mode = ro")
ch2 = open ("TEXT", "f2", "separator = '\n', mode = wo")
ch3 = open ("TEXT", "f3", "separator = '\n', mode = wo")
i = 1
1:
n = input (ch1, i, 1, var1, var2, var3, var4)
if n <> -1 then
output ch2, 1, 0, var1, var2, var3, var4
output ch3, 1, 0, var1, var2, var3, var4
i = i + 1
goto 1
else
goto "close all"
endif
"close all":
close ch1
close ch2
close ch3
end
database set name: an arbitrary name that will identify a set of database files in subsequent OPEN calls.
database files: a list of text files that are part of the property database. This parameter is optional, if you have previously assigned
database set name to the files you would like to read. The order of the files is fixed: key file, component file, descriptor
file, unit file. You don’t need to give full paths, because ArchiCAD will look up these files for you in the active libraries. If you use
long filenames or names with spaces, put them between quotes (' or ").
Example 1:
channel = OPEN ("PROP", "sample",
"'AC 8_KEY.txt', 'AC 8_COMP.txt', 'AC 8_DESC.txt', 'AC 8_UNIT.txt'")
Opens a database that consists of the files above (those are the files of the ArchiCAD Property database), and names it "sample". Note that
inside the third parameter you must use a different quotation character (you can use " and ').
Example 2:
channel = OPEN ("PROP", "sample", "")
This command can be issued after explicitly opening the database files (like in example 1), but before closing it. This lets you use the explicit
command at one place in the Master_GDL script, and use the shorter version later.
• COMP, <keycode>, <code> - query the record from the unit database where <keycode> is the key code attribute value, and <code>
is the component code attribute value. Valid fields: KEYCODE, KEYNAME, CODE, NAME, QUANTITY, QUANTITYSTR,
UNITCODE, UNITNAME, UNITFORMATSTR
• DESC, <keycode>, <code> - query the record from the unit database where <keycode> is the key code attribute value, and <code>
is the descriptor code attribute value. Valid fields: KEYCODE, KEYNAME, CODE, NAME, NUMOFLINES, FULLNAME
• Listing queries:
• KEYLIST - list all records in the key database. Valid fields: KEYCODE, KEYNAME
• UNITLIST - list all records in the unit database. Valid fields: UNITCODE, UNITNAME, UNITFORMATSTR
• COMPLIST[, <keycode>] - list all records in the component database, or if <keycode> is given, then only those records are listed whose
keycode equals <keycode>. Valid fields: KEYCODE, KEYNAME, CODE, NAME, QUANTITY, QUANTITYSTR, UNITCODE,
UNITNAME, UNITFORMATSTR
• DESCLIST[, keycode] - list all records in the descriptor database, or if <keycode> is given, then only those records are listed whose
keycode equals <keycode>. Valid fields: KEYCODE, KEYNAME, CODE, NAME, NUMOFLINES, FULLNAME
• COMPDESCLIST[, <keycode>] - list all records in the component and the descriptor database, or if <keycode> is given, then only those
records are listed whose keycode equals <keycode>. Valid fields: ISCOMP, KEYCODE, KEYNAME, CODE, NAME, QUANTITY,
QUANTITYSTR, UNITCODE, UNITNAME, UNITFORMATSTR, NUMOFLINES, FULLNAME
Use this query with care! If either field is not valid in a database (eg. FULLNAME in the component database) it will be simply left
out from the resulting list (you should be aware of that)
field list: lists the database attributes whose values you would like to see in the output. If the output is a list, it will be sorted in the
order of the fields listed here.
The following fields can be used:
• KEYCODE - key code attribute. Type: string. Usable in queries: KEY, COMP, DESC, KEYLIST, COMPLIST, DESCLIST,
COMPDESCLIST
• KEYNAME - key name attribute. Type: string. Usable in queries: KEY, COMP, DESC, KEYLIST, COMPLIST, DESCLIST,
COMPDESCLIST.
• UNITCODE - unit code attribute. Type: string. Usable in queries: UNIT, COMP, UNITLIST, COMPLIST, COMPDESCLIST
• UNITNAME - unit name attribute. Type: string. Usable in queries: UNIT, COMP, UNITLIST, COMPLIST, COMPDESCLIST
• UNITFORMATSTR - GDL format string of the unit. Type: string. Usable in queries: UNIT, COMP, UNITLIST, COMPLIST,
COMPDESCLIST.
• CODE - component or descriptor code attribute (depends on the query). Type: string. Usable in queries: COMP, DESC, COMPLIST,
DESCLIST, COMPDESCLIST.
• NAME - name of component or the first line of a descriptor record. Type: string. Usable in queries: COMP, DESC, COMPLIST,
DESCLIST, COMPDESCLIST.
• QUANTITY - quantity of a component as a number (for calculations). Type: number. Usable in queries: COMP, COMPLIST,
COMPDESCLIST.
• QUANTITYSTR - quantity of a component in string format. Type: string. Usable in queries: COMP, COMPLIST, COMPDESCLIST.
• NUMOFLINES - number of lines in a descriptor record. Type: number. Usable in queries: DESC, DESCLIST.
• FULLNAME - the whole descriptor record. Type: string(s). Usable in queries: DESC, DESCLIST.
• ISCOMP - tells you whether the next record is a component or a descriptor. Type: number (1 if component, 0 if descriptor). Usable in
queries: COMPDESCLIST
variables: will hold the result of the query upon completion. You can list several variables if you know exactly how many you need (eg.
with single queries) or you can specify a dynamic array. The records are listed sequentially.
Example 1:
INPUT (channel, "KEY, 001", "KEYNAME", keyname)
This is a simple query: the name of the key with "001" code is put into the keyname variable.
Example 2:
INPUT (channel, "DESC, 004, 10", "NUMOFLINES, FULLNAME", desc_txt)
The descriptor record with keycode "004" and code "10" is processed, the number of lines of the description text and the text itself is put
into the desc_txt array. The result is:
desc_txt[1] = <numoflines> (number)
desc_txt[2] = <first row of description> (string)
...
desc_txt[<numoflines+1>] = <last row of description>
Example 3:
INPUT (channel, "COMPLIST", "NAME, KEYNAME, QUANTITY", comp_list)
Create a component list, sort it by the name field, then by the keyname and finally by the quantity field and put it into the comp_list array.
The result is:
complist[1] = <name1> (string)
complist[2] = <keyname1> (string)
complist[3] = <quantity1> (number)
complist[4] = <name2> (string)
... etc.
Example 4:
INPUT (channel, "COMPDESCLIST, 005", "ISCOMP, KEYNAME, NAME, QUANTITY", x_list)
Creates a common component and descriptor list, which means that records from both tables are listed where <keycode> is "005". The output is:
x_list[1] = 0 (number, 0 –> it is a descriptor)
x_list[2] = <name1> (string –> descriptors do not have <keyname> field, so it is left out)
x_list[3] = 0 (number, descriptors do not have quantity field)
...
x_list[(n*2)-1] = 1 (number –> there were n-1 descriptors listed, now the components come)
x_list[n*2] = <keyname_n> (string) ... etc.
name value
Element name of the tag "" (empty string)
Text "#text" the text content of the node
Comment "#comment" the text content of the node
CDATASection "#cdata-section" the text content of the node
Entity-reference name of the referenced entity "" (empty string)
For each node in the tree there is a name and a value string associated whose meanings depend on the type of the node:
Element: ELEM
Text: TXT
Comment: CMT
CDATA section: CDATA
Entity reference: EREF
The success or error code of an OPEN, INPUT or OUTPUT command can be retrieved by the GetLastError instruction of the INPUT
command.
'w': overwrite file with empty document if it exists. If it doesn’t exist, a new file will be created. (After the OPEN the CreateDocument
instruction must be the first to execute.)
'd': the file is obtained from the user in a dialog box. In later runs it will be associated with the identifier given in the filename parameter
of the OPEN command. (If the identifier is already associated to a file, the dialog box will not be opened to the user.)
'f': the filename parameter contains a full path.
'l': the file is in the loaded library parts.
channel: used to identify the connection in subsequent I/O commands.
If you want to open an existing XML file for modification, then none of the 'r', 'n' and 'w' flags must be set in the parameter string. Only one of
the 'd', 'f' and 'l' flags should be set. If none of these flags is set then filename is considered to be a path relative to the user’s documents folder.
• CopyPositionDesc: request for a new position descriptor whose starting node is taken from another descriptor.
recordID: "CopyPositionDesc"
fieldID: an existing position descriptor
return value: var1: the new position descriptor (initially refers to where the descriptor given in fieldID refers to)
• ReturnPositionDesc: when a position descriptor is no longer needed.
recordID: "ReturnPositionDesc"
fieldID: the position descriptor
var1: ignored
Call this instruction when a position descriptor received from the NewPositionDesc or CopyPositionDesc instructions is no longer used.
• MoveToNode: change the position of a descriptor. (and retrieve the data of the new node)
This instruction can be used for navigating in the tree hierarchy.
recordID: "MoveToNode searchmode nodename nodetype nodenumber">
fieldID: position descriptor
searchmode (or movemode): the nodename parameter must contain a path that determines an element or entity reference node in the xml
document.
The path is relative to the node given in fieldID. The delimiter is the ':' character (which is otherwise an accepted character in an element's
name so this doesn't work for all cases). The '..' string in the path means a step to the parent node. The starting node can be different from
an element or entity reference node, in which case the path must begin with '..' to step back. If there are several element nodes on the same
level with the same name then the first one is chosen.
For the following move-modes the rest of the parameters must not be present:
ToParent: moves to the parent of the node given in fieldID.
ToNextSibling: moves to the next node on the same level.
ToPrevSibling: moves to the previous node on the same level.
ToFirstChild: moves to the first descendant of the fieldID node.
ToLastChild: moves to the last descendant of the fieldID node.
The following are the search-modes for which the rest of the parameters may occur, but they have default values if not present:
FromNextSibling: searching starts from the next node on the same level and it moves forward.
FromPrevSibling: searching starts from the node before fieldID and it moves backward on the same level.
FromFirstChild: searching starts from the first descendant of the fieldID node and moves forward.
FromLastChild: searching starts from the last descendant of the fieldID node and moves backward.
nodename: the searching considers those nodes only whose name or value matches nodename. The * and ? characters in nodename are
considered as wildcard characters. For element and entity reference type nodes the name is compared, while for text, comment and CDATA
section nodes the value is compared. Default value: *
nodetype: the searching considers those nodes only whose type is allowed by nodetype. The * means all types are allowed. Otherwise the
type keywords can be combined with the + character to form the nodetype (it must be one word without spaces, like TXT+CDATA.) The
default value is *
nodenumber: if there are several matching nodes, this gives the number of the searched node in the sequence of matching nodes. (Starts
from 1) Default value: 1
return values:
var1: name of the node
var2: value of the node
var3: type keyword of the node
Example:
We want to move backwards on the same level to the 2nd node that is an element or an entity reference and whose name starts with K:
INPUT (ch, "MoveToNode FromPrevSibling K* ELEM+EREF 2", posDesc, name, val, type)
• GetNodeData: retrieve the data of a given node.
recordID: "GetNodeData"
fieldID: the position descriptor
return values:
var1: name of the node
var2: value of the node
var3: type keyword of the node
• NumberofChildNodes: gives the number of child nodes of a given node
recordID: "NumberofChildNodes nodetype nodename"
The following optional parameters can narrow the set of child nodes considered:
nodetype: allowed node types as defined in the MoveToNode instruction
nodename: allowed node names or values as defined in the MoveToNode instruction
fieldID: position descriptor
return values:
var1: number of child nodes
• NumberofAttributes: returns the number of attributes of an element node.
recordID: "NumberofAttributes attrname"
attrname: if present, it can narrow the set of attributes considered as only those attributes will be counted whose names (and not the values)
match attrname. In attrname the * and ? characters are considered wildcard characters.
fieldID: position descriptor (must refer to an element node)
return values:
var1: number of attributes
• GetAttribute: return the data of an attribute of an element node
recordID: "GetAttribute attrname attrnumber"
fieldID: position descriptor (must refer to an element node)
optional parameters:
attrname: give the name of the attribute. The * and ? are considered wildcard characters. Default value: *
attrnumber: If several attribute matches attrname, attrnumber chooses the attribute in the sequence of matching attributes. (Counting starts
from 1.) Default value: 1
return values:
var1: value of the attribute
var2: name of the attribute
• Validate: check the validity of the document.
The validity is not checked during a document modification instruction. It is checked during writing back the file to disk if the 'v' flag was set
in the open-mode string. A validity check can be forced any time by the Validate instruction, however it can consume considerable amount
of time and memory so it is not advisable to do so after every modification.
recordID: "Validate"
fieldID: ignored
var1: ignored
CreateDocument is allowed only if the file was opened in new-file or overwrite mode. In these modes this instruction must be the first to
be executed in order to create the XML document.
• NewElement: insert a new element type node in the document
recordID: "NewElement insertpos"
fieldID: a position descriptor relative to which the new node is inserted
var1: name of the new element (element tag-name)
insertpos can be:
AsNextSibling: new element is inserted after the position given in fieldID
AsPrevSibling: new element is inserted before the position given in fieldID
AsFirstChild: new element is inserted as the first child of the node given in fieldID (which must be an element node)
AsLastChild: new element is inserted as the last child of the node given in fieldID (which must be an element node)
• NewText: insert a new text node in the document
recordID: "NewText insertpos"
fieldID: position descriptor
var1: text to be inserted
See also the NewElement.
• NewComment: insert a new comment node in the document
recordID: "NewComment insertpos"
fieldID: position descriptor
var1: text of the comment to be inserted
See also the NewElement.
• NewCDATASection: insert a new CDATA section node in the document
recordID: "NewCDATASection insertpos"
fieldID: position descriptor
var1: text of the CDATA section to be inserted
See also the NewElement.
• Copy: make a copy of a subtree of the document under some node
recordID: "Copy insertpos"
fieldID: position descriptor relative to which the subtree is inserted
var1: position descriptor giving the node of the subtree to be copied
insertpos: same as in the NewElement
The copied subtree remains unchanged. Position descriptors pointing to some node in the copied subtree will point to the same node after
the copy.
recordID: "ChangeFileName"
fieldID: new file path
var1: gives how fieldID should be interpreted. If var1 is an empty string, fieldID contains a path relative to the user's documents folder.
'd' means the file's location is obtained from the user from a file dialog box (see open-mode flags in the section called “Opening an XML
Document”). 'l' means the file is taken from the loaded libraries. 'f' means fieldID contains a full path.
This instruction can be called even if the file was opened in read-only mode. In this case after the execution the document loses the read-
only attribute, so it can be modified and saved to the new file location.
Opening a channel
ch = INITADDONSCOPE ("PolyOperations ", "", "")
Opens a channel. The return value is the ID of the opened channel.
Polygon management
PREPAREFUNCTION ch, "Store", "poly1", nVertices, nContours, vertArray, contourArray [,
defaultInhEdgeInfo, inhEdgeInfosArray]
Stores the polygon "poly1" with the given parameters in the actual source container.
poly1: name of the stored polygon
nVertices: number of vertices
nContours: number of contours
vertArray: Array containing exactly nVertices items that describes all contours of the polygon. Two dimension array of (x, y, angle) records
where x, y, and angle is real value. The angle parameter is the view-angle (deflection) in case of arched edges. This is a signed value, reflecting
the orientation. Zero value means straight edge.
contourArray: An array which contains the index of the last vertex of the i-th contour. It must have exactly nContours items.
defaultInhEdgeInfo: One piece of inherited edge information. To the brand new edges (not created with split) in operations performed
later this information will be attached. With the aid of this you can easily trace the newly created edges after complex operations. (Optional)
inhEdgeInfosArray: Array containing information attached to edges. It must of contain exactly nVertices integer type items. If an edge
splits into more than one new edge in an operation, this information will be inherited without change to all new edges created. You can use
it for example to store the side angles of a roof. (Optional)
Remarks:
• Polygons can have holes and curved edges though these curved edges can be only circle-arcs.
• This polygon can link to additional data for every edge.
• The first vertex must be always repeated in the last for all contours. So in this representation, a triangle have four vertices, where the first
and the last vertex is identical.
• The first contour is the main contour, and it must contain the others.
PREPAREFUNCTION ch, "Dispose", "poly1", "myContainer"
Deletes the polygon "poly1" from the container "myContainer".
Polygon operations
In the following polygon operations the "poly1" and "poly2" source polygons are located in the source polygon container. The resulting polygons
are stored in the destination polygon container with an unique name started with "resPolygonID", where "ID" is a number.
dim resPolyIDArray[]
nPgon = CALLFUNCTION (ch, "poly1 OP poly2", "", resPolyIDArray)
Executes the "OP" operation with "poly1" and "poly2" polygons and puts the new values into the given parameters. The return value is the
number of the generated polygons
OP: can be:
+: Polygon addition
-: Polygon subtraction
/: Polygon intersection
resPolyIDArray: Array of resulting polygon identifiers.
dim resVertices[]
nVertices = CALLFUNCTION (ch, "GetVertices", polygonID, resVertices)
Getting the resulting polygon contour end indices after any polygon operation call.
The polygon with name "polygonID" located in the destination polygon container.
dim contArr[]
nContours = CALLFUNCTION (ch, "GetContourEnds", polygonID, contArr)
Getting the resulting polygon edge informations after any polygon operation call.
dim inhEdgeInfosArr[]
nEdgeInfos = CALLFUNCTION (ch, "GetInhEdgeInfos", polygonID, inhEdgeInfosArr)
The polygon with name "polygonID" located in the destination polygon container.
Closing channel
CLOSEADDONSCOPE (ch)
Closes channel "ch". Deletes all of the stored polygons.
INDEX
SYNTAX LISTING OF GDL COMMANDS
A
ABS (x)
ACS (x)
ADD dx, dy, dz
ADD2 x, y
ADDGROUP (g_expr1, g_expr2)
ADDGROUP{2} (g_expr1, g_expr2, edgeColor, materialId, materialColor)
ADDX dx
ADDY dy
ADDZ dz
APPLICATION_QUERY (extension_name, parameter_string, variable1, variable2, ...)
ARC r, alpha, beta
ARC2 x, y, r, alpha, beta
ARMC r1, r2, l, h, d, alpha
ARME l, r1, r2, h, d
ASN (x)
ATN (x)
B
BASE
BEAM left_material, right_material, vertical_material, top_material, bottom_material,
height,
x1, x2, x3, x4,
y1, y2, y3, y4, t,
mask1, mask2, mask3, mask4
BINARY mode [, section]
BINARYPROP
BITSET (x, b [, expr])
BITTEST (x, b)
BLOCK a, b, c
BODY status
BPRISM_ top_material, bottom_material, side_material,
n, h, radius,
x1, y1, s1, ... xn, yn, sn
BREAKPOINT expression
BRICK a, b, c
BWALL_ left_material, right_material, side_material,
height, x1, x2, x3, x4, t, radius,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1, frame_shown1,
...,
x_startn, y_lown, x_endn, y_highn, frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm
C
CALL macro_name_string [,]
PARAMETERS [ALL][name1=value1, ... namen=valuen][[,]
RETURNED_PARAMETERS r1, r2, ...]
CALL macro_name_string [,]PARAMETERS
value1 or DEFAULT [, ... valuen or DEFAULT]
...,
x_startn, y_lown, x_endn, y_highn, frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm
CYLIND h, r
D
DATABASE_SET set_name [, descriptor_name, component_name, unit_name, key_name,
criteria_name, list_set_name]
DEFINE EMPTY_FILL name [[,] FILLTYPES_MASK fill_types]
DEFINE FILL name [[,] FILLTYPES_MASK fill_types,]
pattern1, pattern2, pattern3, pattern4,
pattern5, pattern6, pattern7, pattern8,
spacing, angle, n,
frequency1, direction1, offset_x1, offset_y1, m1,
length11, ... length1m,
...
frequencyn, directionn, offset_xn,
lengthn1, ... lengthnm
DEFINE FILLA name [,] [FILLTYPES_MASK fill_types,]
pattern1, pattern2, pattern3, pattern4,
pattern5, pattern6, pattern7, pattern8,
spacing_x, spacing_y, angle, n,
frequency1, directional_offset1, direction1,
offset_x1, offset_y1, m1,
length11, ... length1m,
...
frequencyn, directional_offsetn, directionn,
namen = valuen]
DEFINE TEXTURE name expression, x, y, mask, angle
DEFINE TRANSLUCENT_FILL name [[,] FILLTYPES_MASK fill_types]
pat1, pat2, pat3, pat4, pat5, pat6, pat7, pat8,
percentage
DEL n [, begin_with]
DEL TOP
DELETED_PAR_VALUE (oldparname, outputvalue)
DESCRIPTOR name [, code, keycode]
DIM var1[dim_1], var2[dim_1][dim_2], var3[ ],
var4[ ][ ], var5[dim_1][ ],
var5[ ][dim_2]
DO [statment1
statement2
...
statementn]
WHILE condition
DRAWINDEX number
DRAWING
DRAWING2 [expression]
DRAWING3 projection_code, angle, method
DRAWING3{2} projection_code, angle, method [, backgroundColor,
fillOrigoX, fillOrigoY, filldirection]
DRAWING3{3} projection_code, angle, method, parts [, backgroundColor,
fillOrigoX, fillOrigoY, filldirection][[,]
PARAMETERS name1=value1, ... namen=valuen]
E
EDGE vert1, vert2, pgon1, pgon2, status
ELBOW r1, alpha, r2
ELLIPS h, r
END [v1, v2, ..., vn]
EXIT [v1, v2, ..., vn]
EXP (x)
EXTRUDE n, dx, dy, dz, mask,
x1, y1, s1,
...,
xn, yn, sn
EXTRUDEDSHELL topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
defaultMat,
n, offset, thickness, flipped, trimmingBody,
x_tb, y_tb, x_te, y_te, topz, tangle,
x_bb, y_bb, x_be, y_be, bottomz, bangle,
preThickenTran_11, preThickenTran_12, preThickenTran_13, preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23, preThickenTran_24,
preThicakenTran_31, preThickenTran_32, preThickenTran_33, preThickenTran_34,
x_1, y_1, s_1,
...
x_n, y_n, s_n
F
FILE_DEPENDENCE "name1" [, "name2", ...]
FOR variable_name = initial_value TO end_value [ STEP step_value ] NEXT variable_name
FPRISM_ top_material, bottom_material, side_material, hill_material,
G
GET (n)
GOSUB label
GOTO label
GROUP "name"
[statement1 ... statementn]
ENDGROUP
H
HIDEPARAMETER name1 [, name2, ..., namen]
HIDEPARAMETER ALL [name1 [, name2, ..., namen]]
HOTARC r, alpha, beta, unID
HOTARC2 x, y, r, startangle, endangle
HOTLINE x1, y1, z1, x2, y2, z2, unID
HOTLINE2 x1, y1, x2, y2
HOTSPOT x, y, z [, unID [, paramReference, flags] [, displayParam]]
HOTSPOT2 x, y [, unID [, paramReference, flags] [, displayParam]]
HPRISM_ top_mat, bottom_mat, side_mat,
hill_mat,
n, thickness, angle, hill_height, status,
x1, y1, s1,
...,
xn, yn, sn
I
IF condition THEN label
IF condition GOTO label
IF condition GOSUB label
IF condition THEN statement [ELSE statement]
IF condition THEN
[statement1
statement2
...
statementn]
[ELSE
statementn+1
statementn+2
...
statementn+m]
ENDIF
IND (MATERIAL, name_string
IND (FILL, name_string)
IND (LINE_TYPE, name_string)
IND (STYLE, name_string)
IND (TEXTURE, name_string)
INITADDONSCOPE (extension, parameter_string1, parameter_string2)
K
KILLGROUP g_expr
L
[LET] varnam = n
LGT (x)
LIBRARYGLOBAL (object_name, parameter, value)
LIGHT red, green, blue, shadow,
radius, alpha, beta, angle_falloff,
distance1, distance2,
distance_falloff [[,] ADDITIONAL_DATA name1 = value1,
name2 = value2, ...]
LINE2 x1, y1, x2, y2
LINE_PROPERTY expr
LIN_ x1, y1, z1, x2, y2, z2
LOCK name1 [, name2, ..., namen]
LOCK ALL [name1 [, name2, ..., namen]]
LOG (x)
M
MASS top_material, bottom_material, side_material,
n, m, mask, h,
x1, y1, z1, s1,
...
xn, yn, zn, sn,
xn+1, yn+1, zn+1, sn+1,
...
xn+m, yn+m, zn+m, sn+m
MAX (x1, x2, ... xn)
MESH a, b, m, n, mask,
z11, z12, ... z1m,
z21, z22, ... z2m,
...
zn1, zn2, ... znm
MIN (x1, x2, ... xn)
MODEL WIRE
MODEL SURFACE
MODEL SOLID
MUL mx, my, mz
MUL2 x, y
MULX mx
MULY my
MULZ mz
N
NEWPARAMETER name, type [, dim1 [, dim2]]
NOT (x)
NSP
NTR ()
O
OPEN (filter, filename, parameter_string)
OUTPUT channel, recordID, fieldID, expression1 [, expression2, ...]
P
PARAGRAPH name alignment, firstline_indent,
left_indent, right_indent, line_spacing [,
tab_position1, ...]
[PEN index]
[[SET] STYLE style1]
[[SET] MATERIAL index]
'string1'
'string2'
...
'string n'
[PEN index]
[[SET] STYLE style2]
[[SET] MATERIAL index]
'string1'
'string2'
...
'string n'
...
ENDPARAGRAPH
PARAMETERS name1 = expression1 [,
name2 = expression2, ...,
namen = expressionn]
PEN n
PGON n, vect, status, edge1, edge2, ... edgen
PGON{2} n, vect, status, wrap, edge_or_wrap1, ..., edge_or_wrapn
PI
PICTURE expression, a, b, mask
PICTURE2 expression, a, b, mask
PICTURE2{2} expression, a, b, mask
PIPG expression, a, b, mask, n, vect,
status,
edge1, edge2, ... edgen
PLACEGROUP g_expr
PLANE n, x1, y1, z1, ... xn, yn, zn
PLANE_ n, x1, y1, z1, s1, ... xn, yn, zn, sn
POLY n, x1, y1, ... xn, yn
POLY2 n, frame_fill, x1, y1, ... xn, yn
POLY2_ n, frame_fill, x1, y1, s1, ... xn, yn, sn
POLY2_A n, frame_fill, fill_pen,
x1, y1, s1, ..., xn, yn, sn
POLY2_B n, frame_fill,
fill_pen, fill_background_pen,
x1, y1, s1, ..., xn, yn, sn
POLY2_B{2} n, frame_fill,
fill_pen, fill_background_pen,
fillOrigoX, fillOrigoY, fillAngle,
R
RADIUS radius_min, radius_max
RECT a, b
RECT2 x1, y1, x2, y2
REF COMPONENT code [, keycode [, numeric_expression]]
REF DESCRIPTOR code [, keycode]
REPEAT [statement1
statement2
...
statementn]
UNTIL condition
REQ (parameter_string)
REQUEST (question_name, name | index, variable1 [, variable2, ...])
RESOL n
RETURN
REVOLVE n, alpha, mask, x1, y1, s1, ... xn, yn, sn
REVOLVEDSHELL topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
defaultMat,
n, offset, thickness, flipped, trimmingBody, alphaOffset, alpha,
preThickenTran_11, preThickenTran_12, preThickenTran_13, preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23, preThickenTran_24,
preThickenTran_31, preThickenTran_32, preThickenTran_33, preThickenTran_34,
x_1, y_1, s_1,
...
x_n, y_n, s_n
REVOLVEDSHELLANGULAR topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
defaultMat,
n, offset, thickness, flipped, trimmingBody, alphaOffset, alpha,
segmentationType, nOfSegments,
preThickenTran_11, preThickenTran_12, preThickenTran_13,
preThickenTran_14,
preThickenTran_21, preThickenTran_22, preThickenTran_23,
preThickenTran_24,
preThickenTran_31, preThickenTran_32, preThickenTran_33,
preThickenTran_34,
x_1, y_1, s_1,
...
x_n, y_n, s_n
S
SECT_ATTRS fill, fill_background_pen,
fill_pen, contour_pen [, line_type]
SECT_FILL fill, fill_background_pen,
fill_pen, contour_pen
[SET] STYLE name_string
[SET] STYLE index
[SET] MATERIAL name_string
[SET] MATERIAL index
[SET] FILL name_string
[SET] FILL index
[SET] LINE_TYPE name_string
[SET] LINE_TYPE index
SETMIGRATIONGUID guid
SGN (x)
SHADOW casting [, catching]
SIN (x)
STW (string_expression)
SUBGROUP (g_expr1, g_expr2)
SUBGROUP{2} (g_expr1, g_expr2, edgeColor, materialId, materialColor)
SURFACE3D ()
SWEEP n, m, alpha, scale, mask,
u1, v1, s1, ... un, vn, sn,
x1, y1, z1, ... xm, ym, zm
SWEEPGROUP (g_expr, x, y, z)
SWEEPGROUP{2} (g_expr, x, y, z)
SWEEPGROUP{3} (g_expr, x, y, z, edgeColor, materialId, materialColor, method)
T
TAN (x)
TEVE x, y, z, u, v
TEXT d, 0, expression
TEXT2 x, y, expression
TEXTBLOCK name width, anchor, angle, width_factor, charspace_factor, fixed_height,
'string_expr1' [, 'string_expr2', ...]
TEXTBLOCK_ name width, anchor, angle, width_factor, charspace_factor, fixed_height,
'string_expr1' [, 'string_expr2', ...]
TOLER d
TUBE n, m, mask,
u1, w1, s1,
...
un, wn, sn,
x1, y1, z1, angle1,
...
xm, ym, zm, anglem
TUBEA n, m, mask,
u1, w1, s1,
...
un, wn, sn,
x1, y1, z1,
...
xm, ym, zm
U
UI_BUTTON type, text, x, y [, width, height, id [, url]]
UI_BUTTON type, text, x, y, width, height [, id [, url]] [ UI_TOOLTIP tooltiptext ]
UI_CURRENT_PAGE index
UI_DIALOG title [, size_x, size_y]
UI_GROUPBOX text, x, y, width, height
UI_INFIELD "name", x, y, width, height [,
method, picture_name,
images_number,
rows_number, cell_x, cell_y,
image_x, image_y,
expression_image1, text1,
...,
expression_imagen, textn]
UI_INFIELD "name", x, y, width, height [, extra parameters ... ]
[ UI_TOOLTIP tooltiptext ]
UI_INFIELD{2} name, x, y, width, height [,
method, picture_name,
images_number,
V
VALUES "parameter_name" [,]value_definition1 [, value_definition2, ...]
VALUES "fill_parameter_name" [[,] FILLTYPES_MASK fill_types,] value_definition1
[, value_definition2, ...]
VARDIM1 (expr)
VARDIM2 (expr)
VARTYPE (expression)
VECT x, y, z
VERT x, y, z
VOLUME3D ()
W
WALLARC2 x, y, r, alpha, beta
WALLBLOCK2 n, fill_control, fill_pen, fill_background_pen,
fillOrigoX, fillOrigoY, fillAngle,
x1, y1, s1, ...
xn, yn, sn
WALLBLOCK2{2} n, frame_fill, fillcategory, distortion_flags,
fill_pen, fill_background_pen,
fillOrigoX, fillOrigoY,
mxx, mxy, myx, myy,
innerRadius,
x1, y1, s1, ..., xn, yn, sn
WALLHOLE n, status,
x1, y1, mask1,
...
xn, yn, maskn
[, x, y, z]
WALLHOLE2 n, fill_control, fill_pen, fill_background_pen,
fillOrigoX, fillOrigoY, fillAngle,
x1, y1, s1,
...
xn, yn, sn
WALLHOLE2{2} n, frame_fill, fillcategory, distortion_flags,
fill_pen, fill_background_pen,
fillOrigoX, fillOrigoY,
mxx, mxy, myx, myy,
innerRadius,
x1, y1, s1, ..., xn, yn, sn
WALLLINE2 x1, y1, x2, y2
WALLNICHE n, method, status,
rx, ry, rz, d,
x1, y1, mask1, [mat1,]
...
xn, yn, maskn[, matn]
WHILE condition DO
[statement1
statement2
...
statementn]
ENDWHILE
X
XFORM a11, a12, a13, a14,
a21, a22, a23, a24,
a31, a32, a33, a34
XWALL_ left_material, right_material, vertical_material, horizontal_material,
height, x1, x2, x3, x4,
y1, y2, y3, y4,
t, radius,
log_height, log_offset,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1,
frame_shown1,
...,
x_startn, y_lown, x_endn, y_highn,
frame_shownn,
m,
a1, b1, c1, d1,
...,
am, bm, cm, dm,
status
XWALL_{2} left_material, right_material, vertical_material, horizontal_material,
height, x1, x2, x3, x4,
y1, y2, y3, y4,
t, radius,
log_height, log_offset,
mask1, mask2, mask3, mask4,
n,
x_start1, y_low1, x_end1, y_high1,
sill_depth1, frame_shown1,
...,