Shapes Generated from Polylines


These elements let you create complex 3D shapes using a polyline and a built-in rule.
You can rotate, project or translate the given polyline.
The resulting bodies are a generalization of some previously described elements like
PRISM_ and CYLIND.

Shapes generated from a single polyline:

Shapes generated from two polylines:

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:

Shape generated from any number of polylines:

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).

j1base surface.
j2top surface.
j3side surface.
j4other side surface.
j5base edges.
j6top edges.
j7cross-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
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_extrude.png

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.
j1base surface is present,
j2top surface is present,
j3side (closing) surface is present,
j5base edges are visible,
j6top edges are visible.
j7cross-section edges are visible, surface is articulated,
j8cross-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.

n > 2

Example 1:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_extrude_ex1.png
EXTRUDE 14, 1, 1, 4, 1+2+4+16+32,
        0, 0, 0,
        1, -3, 0,
        2, -2, 1,
        3, -4, 0,
        4, -2, 1,
        5, -3, 0,
        6, 0, 0,
        3, 4, 0,
        0, 0, -1,
        2, 0, 0,
        3, 2, 0,
        4, 0, 0,
        3, -2, 0,
        2, 0, -1

 

Example 2:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_extrude_ex2.png
A = 5
B = 5
R = 2
S = 1
C = R - S
D = A - R
E = B - R
EXTRUDE 28, -1, 0, 4, 1+2+4+16+32,
        0, 0, 0,
        D+R*sin(0),  R-R*cos(0), 1,
        D+R*sin(15), R-R*cos(15), 1,
        D+R*sin(30), R-R*cos(30), 1,
        D+R*sin(45), R-R*cos(45), 1,
        D+R*sin(60), R-R*cos(60), 1,
        D+R*sin(75), R-R*cos(75), 1,
        D+R*sin(90), R-R*cos(90), 1,
        A, B, 0,
        0, B, 0,
        0, 0, -1,
        C, C, 0,
        D+S*sin(0),  R-S*cos(0), 1,
        D+S*sin(15), R-S*cos(15), 1,
        D+S*sin(30), R-S*cos(30), 1,
        D+S*sin(45), R-S*cos(45), 1,
        D+S*sin(60), R-S*cos(60), 1,
        D+S*sin(75), R-S*cos(75), 1,
        D+S*sin(90), R-S*cos(90), 1,
        A-C,B-C,0,
        R-S*cos(90), E+S*sin(90), 1,
        R-S*cos(75), E+S*sin(75), 1,
        R-S*cos(60), E+S*sin(60), 1,
        R-S*cos(45), E+S*sin(45), 1,
        R-S*cos(30), E+S*sin(30), 1,
        R-S*cos(15), E+S*sin(15), 1,
        R-S*cos(0),  E+S*sin(0), 1,
        C, C, -1

 

PYRAMID

PYRAMID n, h, mask, x1, y1, s1, ..., xn, yn, sn
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_pyramid.png

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.
j1base surface is present,
j3side (closing) surface is present,
j5base 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.

h > 0 and n > 2

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_pyramid_ex.png
PYRAMID 4, 1.5, 1+4+16,
        -2, -2, 0,
        -2, 2, 0,
        2, 2, 0,
        2, -2, 0
PYRAMID 4, 4, 21,
        -1, -1, 0,
        1, -1, 0,
        1, 1, 0,
        -1, 1, 0
for i = 1 to 4        ! four peaks
    ADD -1.4, -1.4, 0
    PYRAMID 4, 1.5, 21,
            -0.25, -0.25, 0,
            0.25, -0.25, 0,
            0.25, 0.25, 0,
            -0.25, 0.25, 0
    DEL 1
    ROTZ 90
next i
del 4

 

REVOLVE

REVOLVE n, alpha, mask, x1, y1, s1, ..., xn, yn, sn
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve.png

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 + 256*j9, where each j can be 0 or 1.
j1closing disc at first point is present,
j2closing disc at last point is present,
j3base closing side (in profile plane) is present,
j4end closing side (in revolved plane) is present,
j5base edges (in profile plane) are visible,
j6end edges (in revolved plane) are visible,
j7cross-section edges are visible, surface is articulated,
j8horizontal edge in line elimination,
j9vertical edge in line elimination.
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 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.

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).

Example 1:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve_ex1.png
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve_ex2.png
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve_ex3.png
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:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve_ex4.png
workaround without status code 2: the same result with status code 2:
ROTY -90
REVOLVE 26, 180, 16+32,
        7, 1, 0,
        6.0001, 1,      1,
        6,      1,      0,
        5.9999, 1.0002, 1,
        5.5001, 1.9998, 1,
        5.5,    2,      0,
        5.4999, 1.9998, 1,
        5.0001, 1.0002, 1,
        5,      1,      0,
        4.9999, 1,      1,
        4.0001, 1,      1,
        4,      1,      0,
        3+cos(15),  1+sin(15),  1,
        3+cos(30),  1+sin(30),  1,
        3+cos(45),  1+sin(45),  1,
        3+cos(60),  1+sin(60),  1,
        3+cos(75),  1+sin(75),  1,
        3,      2,      1,
        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
ROTY -90
REVOLVE 18, 180, 48,
        7, 1, 0,
        6, 1, 2,
        5.5, 2, 2,
        5, 1, 2,
        4, 1, 2,
        3+cos(15), 1+sin(15), 1,
        3+cos(30), 1+sin(30), 1,
        3+cos(45), 1+sin(45), 1,
        3+cos(60), 1+sin(60), 1,
        3+cos(75), 1+sin(75), 1,
        3, 2, 1,
        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, 2,
        1, 1, 0

 

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 + 256*j9, where each j can be 0 or 1.
j3base closing side (in profile plane) is present,
j4end closing side (in revolved plane) is present,
j5base edges (in profile plane) are visible,
j6end edges (in revolved plane) are visible,
j7cross-section edges are visible, surface is articulated,
j8horizontal edge in line elimination,
j9vertical edge in line elimination.
sideMat: material of the closing faces.
mati: material of the face generated from the i-th edge.

REVOLVE{3}

REVOLVE{3} n, alphaOffset, alpha, betaOffset, beta, mask, sideMat,
        x1, y1, s1, mat1, ..., xn, yn, sn, matn

REVOLVE{3} is an extension of the REVOLVE{2} command with the possibility of defining two snap position.
During the revolution the path of each point of the base polyline is a circular arc, which is approximated by a polyline.
With REVOLVE{3} two snap location can be defined where polyline exactly fits the circle.
With REVOLVE{2} this two snap locations are at the beginning and the end of the revolution.
With REVOLVE{3} the end points are not necessarily on the circle but simply cut at end planes.

betaOffset: Angle defining the first snap location. The defined angle need not be in the range of revolution.
beta: Angle defining the second snap location relative to the first snap location. May be negative. The defined angle need not be in the range of revolution.

 

Example:

revolve{2} snap positions at ends revolve{3} custom snap positions
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve_ex5.png
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolve_ex6.png
resol 8
revolve{2} 4,
  10, 335,    ! alphaOffset, alpha
  444, 2,
  0, 4, 2, 2,
  3, 4, 2, 2,
  3, 6, 2, 2,
  0, 6, 2, 2
! reference circle
resol 72
revolve{2} 4,
  0, 360,    ! alphaOffset, alpha
  444, 0,
  -0.01, 3.99, 2, 0,
  0, 3.99, 2, 0,
  0, 4, 2, 0,
  -0.01, 4, 2, 0
resol 8
revolve{3} 4,
  10, 335,    ! alphaOffset, alpha
  67.5, 100,  ! betaOffset, beta
  444, 2,
  0, 4, 2, 2,
  3, 4, 2, 2,
  3, 6, 2, 2,
  0, 6, 2, 2
! reference circle
resol 72
revolve{2} 4,
  0, 360,    ! alphaOffset, alpha
  444, 0,
  -0.01, 3.99, 2, 0,
  0, 3.99, 2, 0,
  0, 4, 2, 0,
  -0.01, 4, 2, 0

 

REVOLVE{4}

REVOLVE{4} n, alphaOffset, alpha, betaOffset, beta, mask, sideMat,
        x1, y1, s1, mat1, ..., xn, yn, sn, matn

REVOLVE{4} is an extension of the REVOLVE{3} command with the possibility of hiding all edges.

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 + 256*j9 + 512*j10, where each j can be 0 or 1.
j3base closing side (in profile plane) is present,
j4end closing side (in revolved plane) is present,
j5base edges (in profile plane) are visible,
j6end edges (in revolved plane) are visible,
j7cross-section edges are visible, surface is articulated,
j8horizontal edge in line elimination,
j9vertical edge in line elimination,
j10hide all edges of revolve,
j11side edge and surface is smooth in curved sections of the profile. Compatibility: introduced in ARCHICAD 21.

REVOLVE{5}

REVOLVE{5}n, alphaOffset, alpha, betaOffset, beta, mask, sideMat,
        x1, y1, s1, mat1, ..., xn, yn, sn, matn

 


REVOLVE{5} is an extension of the REVOLVE{4} command
with the possibility of using inline material definition, that means materials defined in GDL script locally
also can be used next to materials defined in global material definitions.

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
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_ruled_2.png

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.
j1base surface is present,
j2top surface is present (not effective if the top surface is not planar),
j3side surface is present (a planar quadrangle or two triangles),
j5edges on the planar curve are visible,
j6edges on the space curve are visible,
j7edges 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.
n > 1
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_ruled_2_ex1.png

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_ruled_2_ex2.png
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, 10,
        cos(135)*R,   sin(135)*R,   10,
        cos(157.5)*R, sin(157.5)*R, 10,
        cos(180)*R,   sin(180)*R,   10,
        cos(202.5)*R, sin(202.5)*R, 10,
        cos(225)*R,   sin(225)*R,   10,
        cos(247.5)*R, sin(247.5)*R, 10,
        cos(270)*R,   sin(270)*R,   10,
        cos(292.5)*R, sin(292.5)*R, 10,
        cos(315)*R,   sin(315)*R,   10,
        cos(337.5)*R, sin(337.5)*R, 10,
        cos(360)*R,   sin(360)*R,   10,
        cos(22.5)*R,  sin(22.5)*R,  10,
        cos(45)*R,    sin(45)*R,    10,
        cos(67.5)*R,  sin(67.5)*R,  10,
        cos(90)*R,    sin(90)*R,    10

RULEDSEGMENTED

RULEDSEGMENTED n, mask,
        x11, y11, z11, s1, ..., x1n, y1n, z1n, sn,
        x21, y21, z21,     ..., x2n, y2n, z2n

Compatibility: introduced in ARCHICAD 21.

RULEDSEGMENTED creates a surface based on two arbitrary-shaped polyline in 3D space. The two polylines must consist of the same number of vertices.
It generates a sequence of doubly ruled surfaces, like RULED, but with less restriction on input polylines and with a subdivision of better quality.
Corresponding vertices of the two profiles are connected with straight lines. Corresponding pair of skew segments of the profiles are connected by a doubly ruled surface (mathematically hyperbolic paraboloid), with segmentation in both directions, resulting much smoother renderings and cross-sections.
Conditions of profile polylines:
  • both are 3D polylines, does not need to be coplanar
  • each may be closed but, neither may contain holes
  • each may contain identical vertices, even multiple consecutive ones resulting in fan-shaped surface
  • if a profile polyline is closed and coplanar, closing polygon can be generated
n: number of polyline nodes in each curve.
x1i, y1i, z1i: 3D positions of vertices on first profile polyline.
x2i, y2i, z2i: 3D positions of vertices on second profile polyline.
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.
j1: base surface is present (not effective if the first polyline is not coplanar or j3 is not set),
j2: top surface is present (not effective if the second polyline is not coplanar or j3 is not set),
j3: closing side surface is present (surface on additional segments between the last and first nodes),
j5: edges on the first profile polyline are visible,
j6: edges on the second profile polyline are visible,
j7: edges on the surface are visible, surface is not smooth.
si: status of the generatrices (lateral edges between one node on first profile polyline and corresponding node on second polyline).
0: generatrix is visible,
1: generatrix is used for showing the contour,
2: generatrix visible and defines a break in rendering.
n > 1

Example:

RULEDSEGMENTED 4, 16+32,
               0, 0, 0, 2,
               1, 0, 0, 2,
               1, 1, 0, 2,
               1, 1, 1, 2,
               0, 0, 1,
               0, 1, 1,
               0, 1, 2,
               1, 2, 2

RULEDSEGMENTED{2}

RULEDSEGMENTED{2} top_material, bottom_material,
        n, mask, textureMode,
        x11, y11, z11, s1, mat1, ..., x1n, y1n, z1n, sn, matn,
        x21, y21, z21, ..., x2n, y2n, z2n

Compatibility: introduced in ARCHICAD 23.

RULEDSEGMENTED{2} is an extension of the RULEDSEGMENTED command with the possibility of controlling the surface attributes of the generated surfaces in segment detail and applying custom texture projection.

Additional parameters:

top_material: surface attribute index of the base surface (if the first polyline is coplanar and j1+j3 are set).
bottom_material: surface attribute index of the top surface (if the second polyline is coplanar and j2+j3 are set).
textureMode: texture projection mode
  • 0: automatic, optimized for curved surfaces, the same as with the RULEDSEGMENTED command.
  • 1: custom, defined by the COOR command.
mati: surface attribute index of generated surface segment i.

Example:

_topMatIndex       = 22
_bottomMatIndex    = 34
_segmentMatIndex_1 = 55
_segmentMatIndex_2 = 44

RULEDSEGMENTED{2} _topMatIndex, _bottomMatIndex,
                  4, 1+2+16+32, 0,
                  0, 0, 0, 2, _segmentMatIndex_1,
                  1, 0, 0, 2, _segmentMatIndex_2,
                  1, 1, 0, 2, _segmentMatIndex_1,
                  0, 1, 0, 2, _segmentMatIndex_2,
                  1, 0, 1,
                  1, 1, 1,
                  0, 1, 1,
                  0, 0, 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.
j1base surface is present,
j2top surface is present,
j3side surface is present,
j5base edges are visible,
j6top edges are visible,
j7cross-section edges are visible, surface is articulated.
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_sweep_mask.png
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.

n > 1
m > 1
z1 < z2
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_sweep_ex1.png

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_sweep_ex2.png
SWEEP 4, 12, 7.5, 1, 1+2+4+16+32,
        -0.5, -0.25, 0,
        0.5, -0.25, 0,
        0.5, 0.25, 0,
        -0.5, 0.25, 0,
        0, 0, 0.5,
        0, 0, 1,
        0, 0, 1.5,
        0, 0, 2,
        0, 0, 2.5,
        0, 0, 3,
        0, 0, 3.5,
        0, 0, 4,
        0, 0, 4.5,
        0, 0, 5,
        0, 0, 5.5,
        0, 0, 6

 

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 + 512*j10 + 1024*j11 + 2048*j12 + 4096*j13, where each j can be 0 or 1.
j1base surface is present,
j2end surface is present,
j5base edges (at x2, y2, z2) are visible,
j6end edges (at xm-1, ym-1, zm-1) are visible,
j7cross-section edges are visible, surface is articulated,
j8cross-section edges are sharp, the surface smoothing will stop here in OpenGL and rendering,
j10: base edges participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
j11end edges participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
j12: longitudinal edges (which connect cross sections) participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
j13: edges of cross sections participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tube_mask.png
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.
2: 
when using or Z-buffer Rendering Engine and setting Smooth Surfaces,
the lateral 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.

Note

The path comprises two points more than the number of generated sections.
The first and the last points determine the position in space of the first and the last surfaces belonging to the TUBE.
These points only play a role in determining the normal of the surfaces, they are not actual nodes of the path.
The orientation of the surfaces is the same as that of the surfaces that would be generated at the nodes nearest to the two endpoints,
if the TUBE were continued in the directions indicated by these.

n > 2 and m > 3

 

Example 1:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tube_ex1.png
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tube_ex2.png
TUBE 4, 18, 16+32,
        2.0, 0.0, 0,
        0.0, 0.0, 0,
        0.0, 0.4, 0,
        2.0, 0.4, 0,
        -1, 0, 0, 0,
        0, 0, 0, 0,
        4, 0, 0.1, 0,
        6, 0, 0.15, 0,
        6+4*sin(15), 4 - 4*cos(15), 0.2, 0,
        6+4*sin(30), 4 - 4*cos(30), 0.25, 0,
        6+4*sin(45), 4 - 4*cos(45), 0.3, 0,
        6+4*sin(60), 4 - 4*cos(60), 0.35, 0,
        6+4*sin(75), 4 - 4*cos(75), 0.4, 0,
        10, 4, 0.45, 0,
        6+4*sin(105), 4 - 4*cos(105), 0.5, 0,
        6+4*sin(120), 4 - 4*cos(120), 0.55, 0,
        6+4*sin(135), 4 - 4*cos(135), 0.6, 0,
        6+4*sin(150), 4 - 4*cos(150), 0.65, 0,
        6+4*sin(165), 4 - 4*cos(165), 0.7, 0,
        6, 8, 0.75, 0,
        0, 8, 1, 0,
        -1, 8, 1, 0

 

Example 2:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tube_ex4.png
TUBE 14, 6, 1+2+16+32,
        0, 0,0,
        0.03, 0,0,
        0.03, 0.02, 0,
        0.06, 0.02, 0,
        0.05, 0.0699, 0,
        0.05, 0.07, 1,
        0.05, 0.15, 901,
        1, 0, 801,
        0.08, 90, 2000,
        0.19, 0.15, 0,
        0.19, 0.19, 0,
        0.25, 0.19, 0,
        0.25, 0.25, 0,
        0, 0.25, 0,
        0, 1, 0, 0,
        0, 0.0001, 0, 0,
        0, 0, 0, 0,
        -0.8, 0, 0, 0,
        -0.8, 0.0001, 0, 0,
        -0.8, 1, 0, 0

 

Example 3:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tube_ex3.png
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

TUBE{2}

TUBE{2} top_material, bottom_material, cut_material,
        n, m, mask,
        u1, w1, s1, mat1,
        ...
        un, wn, sn, matn,
        x1, y1, z1, angle1,
        ...
        xm, ym, zm, anglem

Compatibility: introduced in ARCHICAD 21.

Extended version of the TUBE command.
  • holes can be defined within the contour base polygon
  • individual surfaces attribute for top, bottom polygons and cut areas
  • individual surface attribute for side polygons belonging to the same base polygon edge
V axis, W axis, U axis: same meaning as in the TUBE command.
top_material: surface of the closing polygon.
bottom_material: surface of the starting polygon.
cut_material: surface of the cut areas.
n, m, ui, wi: same meaning as in the TUBE command.
xi, yi, zi, anglei: same meaning as in the TUBE command.
mask: controls the existence of the bottom and top polygons’ surfaces and edges.
mask = j1 + 2*j2 + 16*j5 + 32*j6 + 256*j9 + 512*j10 + 1024*j11 + 2048*j12 + 4096*j13, where each j can be 0 or 1.
j1base surface is present,
j2end surface is present,
j5base edges (at x2, y2, z2) are visible,
j6end edges (at xm-1, ym-1, zm-1) are visible,
j9side edge and surface is smooth in curved sections of the profile,
j10: base edges participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
j11: end edges participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
j12: longitudinal edges (which connect cross sections) participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
j13: edges of cross sections participate in line elimination (Compatibility: introduced in ARCHICAD 23.),
si: status of the lateral edges.
-1: indicates the last node of a hole within the base polygon (duplicated first node of the hole), or the closing node of the outside polygon in case of a base polygon containing holes. The matn parameter is ignored in these duplicated nodes with status -1,
0, 1, 2: same meaning as in the TUBE command.
mati: individual surface of the side polygons belonging to the edge starting from ui, wi node of the base polygon.
Additional status codes allow you to create segments and arcs in the planar polyline using special constraints. Such polygon edges are automatically segmented during processing.
matEnds1 = 12
matEnds2 = 24
matCut = 15
matOuter = 10
matInner = 13

TUBE{2} matEnds1, matEnds2, matCut,
          10, 4, 1 + 2 + 16 + 32,

          ! outside contour
          -0.01,  0.01,  0, matOuter,
          -0.01, -0.01,  0, matOuter,
           0.01, -0.01,  0, matOuter,
           0.01,  0.01,  0, matOuter,
          -0.01,  0.01, -1, matOuter,

          ! hole contour
          -0.008,  0.008,  0, matInner,
          -0.008, -0.008,  0, matInner,
           0.008, -0.008,  0, matInner,
           0.008,  0.008,  0, matInner,
          -0.008,  0.008, -1, matInner,

          ! path
          0, 0, -1, 45,
          0, 0,  0, 45,
          0, 0,  1, 45,
          0, 0,  2, 45

TUBEA

TUBEA n, m, mask,
        u1, w1, s1,
        ...
        un, wn, sn,
        x1, y1, z1,
        ...
        xm, ym, zm
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tubea.png

 


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.

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tubea_ex1.png

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_tubea_ex2.png
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.
j3edges of the 1st boundary (x1, y1, z1) are visible (effective only if j7 is set),
j4edges of the 2nd boundary (x2, y2, z2) are visible (effective only if j7 is set),
j5edges of the 3rd boundary (x3, y3, z3) are visible (effective only if j7 is set),
j6edges of the 4th boundary (x4, y4, z4) are visible (effective only if j7 is set),
j7edges on surface are visible, surface is not smooth.

In case the edges on the surface are invisible (bit j7 is set to zero), all boundary edges become visible, with the bits j3-j6 becoming ineffective. To define boundary edge visibility independent of surface edge visibility, use COONS{2} command.

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_coons_mask.png
The orientation of the boundaries is obligatory: curves 1 and 2 must go from curve 3 towards 4, and curves 3 and 4 must go from curve 1 towards 2. The corner coordinates have to be the same in the respective curves.
n > 1, m > 1

 

Example 1:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_coons_ex1.png
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:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_coons_ex2.png
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

 

COONS{2}

COONS{2} 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

COONS{2} is an extension of the COONS command with the possibility of setting the visibility of surface and boundary edges independently.

mask: 
mask = 4*j3 + 8*j4 + 16*j5 + 32*j6 + 64*j7, where each j can be 0 or 1.
j3edges of the 1st boundary (x1, y1, z1) are visible,
j4edges of the 2nd boundary (x2, y2, z2) are visible,
j5edges of the 3rd boundary (x3, y3, z3) are visible,
j6edges of the 4th boundary (x4, y4, z4) are visible,
j7edges on surface are visible, surface is not smooth.

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 .

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.
j1base surface is present,
j3side surfaces are present,
j5base and side edges are visible,
j6triangulation edges are visible,
j7triangulation edges are visible, top surface is not smooth,
j8all ridges will be sharp, but the surface is smooth.
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_masking.png

 

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.

n >= 3, m >= 0

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_mass_ex.png
MASS "Surf-White", "Surf-White", "Surf-White",
        15, 12, 117, -5.0,
        0, 12, 0, 15,
        8, 12, 0, 15,
        8, 0, 0, 15,
        13, 0, 0, 13,
        16, 0, 0, 13,
        19, 0, 0, 13,
        23, 0, 0, 13,
        24, 0, 0, 15,
        24, 12, 0, 15,
        28, 12, 0, 15,
        28, 20, 8, 13,
        28, 22, 8, 15,
        0, 22, 8, 15,
        0, 20, 8, 13,
        0, 12, 0, -1,
        0, 22, 8, 0,
        28, 22, 8, -1,
        23, 17, 5, 0,
        23, 0, 5, -1,
        13, 13, 1, 0,
        13, 0, 1, -1,
        16, 0, 7, 0,
        16, 19, 7, -1,
        0, 20, 8, 0,
        28, 20, 8, -1,
        19, 17, 5, 0,
        19, 0, 5, -1

 

MASS{2}

MASS{2} 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

 


Extension of the MASS command with an additional mask bit and the possibility of hiding all top edges of the mass.

mask: 
mask = j1 + 4*j3 + 16*j5 + 32*j6 + 64*j7 + 128*j8 + 256*j9 + 512*j10, where each j can be 0 or 1.
j1base surface is present,
j3side surfaces are present,
j5base and side edges are visible,
j6top edges are visible,
j7top edges are visible, top surface is not smooth,
j8all ridges will be sharp, but the surface is smooth.
j9edges participate in line elimination.
j10all top edges will be hidden.

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_mass_2_ex.png
PEN 1
mat = IND (MATERIAL, "Metal-Aluminium")
FOR i=1 TO 2 STEP 1
  MASS{2} mat, mat, mat,
    5,  0,  1+4+16+32+64+256,   -1,
    0,  0,  0,   15,
    2,  0,  0,   15,
    2,  2,  0,   15,
    0,  2,  0,   15,
    0,  0,  0,   -1
  BODY -1
  ADDX 2
NEXT i

 

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 below the pivot polygon plane.
If set to 1, the outer contour polygon is applied both above and below the pivot polygon plane.
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
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_polyroofMaterials.png
Figure 1: Materials
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_polyroofAngles.png
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

 

POLYROOF{2}

POLYROOF{2} defaultMat, k, m, n,
        offset, thickness, totalThickness, 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

 


POLYROOF{2} is an extension of the POLYROOF command with the possibility of defining the total thickness of the roof.
This parameter should be considered together with offset and thickness, when the generation of a slice of the roof is desirable.
In this case the thickness and the offset should be set to the thickness of the slice and to the distance between the top planes of the slice
and the complete roof respectively.

totalThickness: 
the total thickness of the roof.

POLYROOF{3}

POLYROOF{3} defaultMat, mask, k, m, n,
          offset, thickness, totalThickness, 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

POLYROOF{3} is an extension of the POLYROOF{2} command with the possibility of controlling the global behavior of the generated roof.

mask: controls the global behavior of the generated roof.
mask = j1 + 2*j2, where each j can be 0 or 1.
j1edges participate in line elimination.
j2Make all edges invisible.

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_polyroof_3_ex.png
pen 1
mat = IND (MATERIAL, "Metal-Aluminium")
a = -0.4242640691048 : b =  4.424264068326
c =  6.424264068326
POLYROOF{3} mat,1, 2,  5,  5,
  0, 0.3, 0.3,  1, 0, 1,
  a, b, 0, 45, 0, mat, mat, 90, 0, mat, mat,
  a, a, 0, 45, 0, mat, mat, 90, 0, mat, mat,
  c, a, 0, 45, 0, mat, mat, 90, 0, mat, mat,
  c, b, 0, 45, 0, mat, mat, 90, 0, mat, mat,
  a, b, -1,45, 0, mat, mat, 90,  0, mat, mat,
  -0.8, -0.8,  0,  2,  0, mat,
  6.8, -0.8,  0,  2,  0, mat,
  6.8,  4.8,  0,  2,  0, mat,
  -0.8,  4.8,  0,  2,  0, mat,
  -0.8, -0.8, -1,  2,  0, mat

a = 0.1514718617904 : b = 3.848528136652
c = 5.848528136652 : q = 0.5757359305057
w = 5.424264067936 :  e = 3.424264056692
POLYROOF{3} mat,1, 1,  5,  5,
  0,   0.3,  0.3,  1, 0.5757359312847,
  a, b, 0, 45,  0, mat, mat,
  a, a, 0, 45,  0, mat, mat,
  c, a, 0, 45,  0, mat, mat,
  c, b, 0, 45,  0, mat, mat,
  a, b, -1, 45,  0, mat, mat,
  q, q,   0,  0,  0, mat,
  w, q,   0,  0,  0, mat,
  w, e,   0,  0,  0, mat,
  q, e,   0,  0,  0, mat,
  q, q,  -1,  0,  0, mat

 

POLYROOF{4}

POLYROOF{4} defaultMat, mask, k, m, n,
          offset, thickness, totalThickness, 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

 


POLYROOF{4} is an extension of the POLYROOF{3} command
with the possibility of using inline material definition, that means materials defined in GDL script locally
also can be used next to materials defined in global material definitions.

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. Cannot 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 cannot be controlled with the status.

EXTRUDEDSHELL{2}

EXTRUDEDSHELL{2} topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
        defaultMat,
        n, status, 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

EXTRUDEDSHELL{2} is an extension of the EXTRUDEDSHELL command with the possibility of hiding edges between original and thickened surface.

status: Status bits:
status = j1, where each j can be 0 or 1.
j1Make edges invisible between original and thickened surface.

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_extrudeshell_ex.png
EXTRUDEDSHELL "Paint-02", "Surf-Stucco Yellow",
        "Surf-Stucco Yellow", "Surf-Stucco Yellow", "Surf-Stucco Yellow",
        "Surf-Stucco Yellow", "Surf-Stucco Yellow",
        3,   0.00,   0.30,      0, 0,
        ! 2 slant planes
        0.00,   0.00,   0.00,   1.00,   0.00,   0.00,
        0.00,   0.00,   0.00,   1.00, -10.00,   0.00,
        ! transformation matrix
        0.00,   0.00,   1.00,   0.00,
        1.00,   0.00,   0.00,   0.00,
        0.00,   1.00,   0.00,   0.00,
        ! profile polyline
        2.00,   0.00,     15,
        0.00,   2.00,     15,
        -2.00,   0.00,     15

 

EXTRUDEDSHELL{3}

EXTRUDEDSHELL{3} topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
        defaultMat,
        n, status, 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

 


EXTRUDEDSHELL{3} is an extension of the EXTRUDEDSHELL{2} command
with the possibility of using inline material definition, that means materials defined in GDL script locally
also can be used next to materials defined in global material definitions.

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. Cannot 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 cannot be controlled with the status.

REVOLVEDSHELL{2}

REVOLVEDSHELL{2} topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
        defaultMat,
        n, status, 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

REVOLVEDSHELL{2} is an extension of the REVOLVEDSHELL command with the possibility of hiding edges of surfaces, and edges between original and thickened surface.

status: Status bits:
status = j1 + 2*j2, where each j can be 0 or 1.
j1Make edges invisible between original and thickened surface.
j2Make edges invisible on surfaces.

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
https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_revolvedshell_ex.png

 

REVOLVEDSHELL{3}

REVOLVEDSHELL{3} topMat, bottomMat, sideMat_1, sideMat_2, sideMat_3, sideMat_4,
        defaultMat,
        n, status, 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

 


REVOLVEDSHELL{3} is an extension of the REVOLVEDSHELL{2} command
with the possibility of using inline material definition, that means materials defined in GDL script locally
also can be used next to materials defined in global material definitions.

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.

REVOLVEDSHELLANGULAR{2}

REVOLVEDSHELLANGULAR{2} topMat, bottomMat,
        sideMat_1, sideMat_2, sideMat_3, sideMat_4, defaultMat,
        n, status, 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

REVOLVEDSHELLANGULAR{2} is an extension of the REVOLVEDSHELLANGULAR command with the possibility of hiding edges of surfaces, and edges between original and thickened surface.

status: Status bits:
status = j1 + 2*j2, where each j can be 0 or 1.
j1Make edges invisible between original and thickened surface.
j2Make edges invisible on surfaces.

REVOLVEDSHELLANGULAR{3}

REVOLVEDSHELLANGULAR{3} topMat, bottomMat,
        sideMat_1, sideMat_2, sideMat_3, sideMat_4, defaultMat,
        n, status, 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

REVOLVEDSHELLANGULAR{3} is an extension of the REVOLVEDSHELLANGULAR{2} command
with the possibility of using inline material definition, that means materials defined in GDL script locally
also can be used next to materials defined in global material definitions.

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. Cannot 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.

RULEDSHELL{2}

RULEDSHELL{2} topMat, bottomMat,
        sideMat_1, sideMat_2, sideMat_3, sideMat_4, defaultMat,
        n, m, g, status,
        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

RULEDSHELL{2} is an extension of the RULEDSHELL command with the possibility of hiding edges of surfaces, and edges between original and thickened surface.

status: Status bits:
status = j1 + 2*j2, where each j can be 0 or 1.
j1Make edges invisible between original and thickened surface.
j2Make edges invisible on surfaces.

Example:

https://gdl.graphisoft.com/wp-content/uploads/ac19-gdl/3Dshapes_ruledshell_ex.png
RULEDSHELL "Paint-14", "Paint-14",
        "Paint-14", "Paint-14", "Paint-14", "Paint-14", "Paint-14",
        4,      3,      3,
        0.00,   0.30,      0, 0,
        ! transformation matrix
        1.00,   0.00,   0.00,   0.00,
        0.00,   0.00,  -1.00,   0.00,
        0.00,   1.00,   0.00,   0.00,
        ! profile 1 polyline
        0.00,   0.00,      2,
        2.00,   2.00,      2,
        4.00,   0.00,      2,
        6.00,   0.00,      2,
        ! profile 2 polyline
        0.00,   0.00,      2,
        2.00,   2.00,      2,
        6.00,   1.00,      2,
        ! transformation matrix
        1.00,   0.00,   0.00,   0.00,
        0.00,   1.00,   0.00,   0.00,
        0.00,   0.00,   1.00, -10.00,
        ! generatrices
        1,      1,
        2,      2,
        4,      3

 

RULEDSHELL{3}

RULEDSHELL{3} topMat, bottomMat,
        sideMat_1, sideMat_2, sideMat_3, sideMat_4, defaultMat,
        n, m, g, status,
        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

 


RULEDSHELL{3} is an extension of the RULEDSHELL{2} command
with the possibility of using inline material definition, that means materials defined in GDL script locally
also can be used next to materials defined in global material definitions.