Solid Geometry Commands

GDL is capable of performing specialized 3D operations between
solids represented by groups. These operations can be one of the
following:

ADDGROUP

forming the Boolean union of two solids

SUBGROUP

forming the Boolean difference of two solids

ISECTGROUP

forming the Boolean intersection of two solids

ISECTLINES

calculating the intersection lines of two solids

SWEEPGROUP

sweeping a solid along a vector

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

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 4.1. Union (base » tool)

solid base

surface base

wireframe base

hybrid base

solid tool

solid result

surface result (merging)

wireframe result (merging)

hybrid result (merging)

surface tool

surface result (merging)

surface result (merging)

hybrid result (merging)

hybrid result (merging)

wireframe tool

wireframe result (merging)

hybrid result (merging)

wireframe result (merging)

hybrid result (merging)

hybrid tool

hybrid result (merging)

hybrid result (merging)

hybrid result (merging)

hybrid result (merging)

Table 4.2. Difference (basetool)

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 4.3. Intersection (base « tool)

solid base

surface base

wireframe base

hybrid base

solid tool

solid result

surface result

wireframe result

hybrid result

surface tool

surface result

empty result

empty result

empty result

wireframe tool

wireframe result

empty result

empty result

empty result

hybrid tool

hybrid result

empty result

empty result

empty result

Table 4.4. Intersection lines (base « tool)

solid base

surface base

wireframe base

hybrid base

solid tool

wireframe result

wireframe result

empty result

wireframe result

surface tool

wireframe result

empty result

empty result

empty result

wireframe tool

empty result

empty result

empty result

empty result

hybrid tool

wireframe result

empty result

empty result

empty result

Table 4.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.

materialColor: the color of the new face when the materialId is 0 and it differs from 0.

operationStatus: status control of the operation.

operationStatus = j1 + 2*j2, where each j can be 0 or 1.

j1: generated new edges will be invisible.

j2: cut polygons of the result inherit material and texture projection from the corresponding polygons of the tool group.

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.

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