Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Technical Report TUBS-CG-2003-10

Generative Parametric Design of Gothic Window


Tracery

Sven Havemann, Dieter W. Fellner


{s.havemann,d.fellner}@tu-bs.de

Institute of Computer Graphics


University of Technology
Mühlenpfordtstr. 23, D-38106 Braunschweig
http://graphics.tu-bs.de


c Computer Graphics, TU Braunschweig, 2003
Generative Parametric Design
of Gothic Window Tracery
Sven Havemann Dieter Fellner
Computer Graphics Group Computer Graphics Group
TU Braunschweig,Germany TU Braunschweig, Germany
s.havemann@tu-bs.de d.fellner@tu-bs.de

a) b) c)
Fig. 1. Some holiday photos: Stephansdom in Vienna, Cologne Cathedral
a) b)
Fig. 3. High gothic period.

a) b) c)
Fig. 2. Early gothic period.
a) b)
Fig. 4. Late gothic period.
Abstract— Gothic architecture, and especially window tracery,
exhibits quite complex geometric shape configurations. But this
complexity is achieved by combining only a few basic geometric I. T HE CONSTRUCTION OF A G OTHIC W INDOW
patterns, namely circles and straight lines, using a limited set of The basic pattern in Gothic Architecture is the pointed arch.
operations, such as intersection, offsetting, and extrusions. The
reason for this lies in the nature of the process how these objects Its geometric construction is based on the intersection of two
have been physically realized, i.e., through constructions with circles. The circles are tangent continuous to the sides of an
compass and ruler. Consequently, Gothic architecture is a great, arch or a window, given as two parallel vertical line segments.
although challenging, domain for parametric modeling. Consequently the midpoints mL and mR of the circles lie on
We present some principles of this long-standing domain, to- the horizontal line through the upper segment endpoints pL
gether with some delicate details, and show how the constructions and pR . The pointed arch
of some prototypic Gothic windows can be formalized using  is symmetric, so both circles have
the same radius r dist p L  mR  dist pR  mL  .
our Generative Modeling Language (GML). The emphasis of
our procedural approach is on modularization, so that complex We call the ratio r  dist pL  pR  the excess of the arch. When
configurations can be obtained from combining elementary con- the excess is 1  0, the circle midpoints coincide with the upper
structions. Different combinations of specific parametric features segment endpoints. Together with the circle intersection, they
can be grouped together, which leads to the concept of styles. form an equilateral triangle. This is the standard pointed arch,
They permit to differentiate between the basic shape and its
also called equilateral arch. With an excess  1  0, the circles
appearance, i.e., a particular ornamental decoration.
intersect at a sharper angle, and this is what is actually called
This leads to an extremely compact representation for a whole
class of shapes, which can nevertheless be quickly evaluated a pointed arch. When the excess is  1  0, the arch is not so
to obtain a connected manifold mesh of a particular window high, and this is called four-centered arch. The extreme case
instance. The resulting mesh may also contain free-form surface is an excess of 0.5, where mL  mR coincide in the midpoint
parts, represented as subdivision surfaces. between pL  pR . Examples are shown in Fig. 5.
mL mL mL pL pM pR mR mL
pL pR pL pR pL pR
mLR mLL mRL
mRR
a) b)
a) b) c) Fig. 7. Geometry of the prototype window

Fig. 5. Gothic arch with varying excess parameters: Four-centered (0.75),


equilateral (1.0), and pointed arch (1.25)
windows were grouped together, forming an ensemble. But
the windows were created by cutting openings into large stone
plates in the wall. This premature form of window tracery
is therefore called plate tracery (Fig. 2). In the High Gothic
period, from around 1250, the stone parts became ever thinner,
and the windows covered an increasing portion of the wall.
The glass windows were set into a network of stone bars, and
a) b) this is when the basic patterns of bar tracery evolved (Fig.
Fig. 6. The height of a pointed arch can be kept constant even when the 3). The late Gothic period, in the 14th and 15th centuries,
width varies. saw a great refinement and sophistication of window tracery.
The basic patterns were varied over and over again, exhibiting
repeated sub-structures with a high degree of self-similarity,
A. Historical Development of Window Tracery up to the point where the static stone construction appeared to
The pointed arch is a generalization of its predecessor, be actually moving (Fig. 4). One example is the French and
the round arch. It was a technological breakthrough that, English flamboyant style with its flame symbolics [2].
after its introduction around 1140, has truly revolutionized the
construction of cathedrals. It was first systematically employed B. The Prototype Window
by abbot Suger in the cathedral of St. Denis (near Paris, The focus of this paper is to demonstrate how the con-
France), and the new style spread over all Europe in just a struction rules for Gothic architecture can be mapped to a
few decades. It has dominated the European sacral architecture parametric modeling language. We chose one basic High
for more than two hundred years, and gave rise to a veritable Gothic window pattern as our prototype, because it exhibits
footrace between cities, where the constructions became ever the main shape features, the “shape vocabulary”, that was
more sophisticated and risky. subsequently refined and varied in the Late Gothic period.
Technologically, the great advantage of the pointed arch This prototype window is shown in Fig. 7. It has two
over the round arch lies in the fact that the distance between sub-windows which are also pointed arches. They have the
columns determines also the height of the round arch, whereas same form, and most often also the same excess as the large
height and width do not have to be equal with the pointed arch pointed arch itself, and so the excess parameter is one high-
(see Fig. 6). This leaves greater flexibility for positioning the level parameter of the window. The particular window shown
columns, and helps to solve delicate problems with the design has excess 1, so that the midpoints of the circular arcs and
of the ground layout in a cathedral (Fig. 6 right). the segment endpoints pL , pR coincide. So they are also the
Basically the same shape as for an arch can also be used midpoints of the circular arcs from the subwindow’s arches.
for a window. The idea of Gothic cathedrals is to make the There is another degree of freedom however, as shown in
walls of the church as transparent as possible, in order to let a the right image. In order to increase the space for the rosette in
maximum of light enter the room. With coloured windows, a the top, the sub-windows have been set down. Geometrically,
cathedral was flooded with light in all colors, which was one this is a vertical offset between the midpoints of the outer arcs
of the manifestations of God in the perception of the medieval and those of the inner arcs, for example between mL and mL R.
christian. The size of the windows in relation to the size of the
walls increased, and the walls actually “dissolved” to the point C. Adding a Circular Rosette
where they completely lost their supporting function. Gothic Now, given the outer and inner pointed arches, the space
cathedrals get their stability almost exclusively from columns, between them can be filled in many different ways, which
and not from walls [1]. is the distinguished feature of each window. In early days of
There is a remarkable development of the ornamental dec- Gothic, this space was quite often filled with a circular rosette.
oration in the upper part of the window, the couronnement. Geometrically, the problem is to find midpoint and radius of
In the Early Gothic period, starting around 1140, pairs of the circle so that it touches the outer and inner arches. First
mC

mR

mLR
a) b) a) b) c)
Fig. 8. Determining the midpoint and radius of the rosette’s circle Fig. 9. a),b) The regions are shrunk to embed them in a common border
plane. c) The offset operation changes the excess of a pointed arch, but keeps
. the circle midpoints constant.

note that the window is symmetric, so the midpoint mC has to


lie on the vertical line through pM . Then consider the set of
all points that have the same distance from the arcs of the sub-
windows and the big arcs, for example arcLR and arcR , as in
Fig. 8. The intersection of this set with the axis of symmetry
gives the midpoint mC of the circle for the rosette window. Fig. 10. Lying and standing trefoil and quatrefoil rosettes.
This set is depicted as a dotted curve in Figure 8. What kind
of curve is this? A point
 m with the same distance  from the
circles mR  rR  and mLR  rLR  with rL  rLR  dist mL  mLR  in an intersection of the respective circles, the intersection of
must be on the outside of one circle and inside the the offset circles must be computed for obtaining the offset
 other. Con- curve sequence. Simple scaling is not sufficient to create offset
sider m  mC as in Fig. 8, and set r :  rR dist m  m R  . Then
r dist m  mLR  rLR . So the sum dist m  mR   dist m  mLR curves: The offset of a pointed arch has a different excess than
rR r  r rLR rR  rLR is actually independent from m’s the original arch, as shown in Fig. 9 c).
position and thus constant for all points in the set. Conse- E. Rosette Window with Multiple Foils
quently, the dotted curve is an ellipse. It can be computed
as A very common way to fill a circular region is by an
 the intersection of the axis of symmetry and the ellipse rosette with multiple foils, for example a trefoil or a quatrefoil.
mR  mLR  rR  rLR  . The intersection of a line and an ellipse
is the intersection of a circle with the corresponding linearly We consider two variants of rosettes, namely with round and
transformed line. with pointed foils. A further distinction is between lying and

D. Offset Curves
The rosette circle and the sub-arches partition the window
into disjoint regions. These regions give the basic window
structure, which is then further refined. This can be done by
simply adding a profile around the actual window holes to b
emphasize the shape, or, especially in the later period, by m
α
adding sub-structures, again composed of lines and circular 2 α
arcs. It is very common that there is a thin planar border 2
c a
between adjacent regions, so that there is actually a connected a) b)
border plane. Geometrically, this means that the region border
is offset by a certain distance, as depicted in Fig. 9, so that a Fig. 11. Construction of a rosette with six rounded foils, so α

6
.
contiguous border plane results, shown in yellow.
Regarding the great variety of examples where this pattern c
is used, it is reasonable to distinguish between two different
offset parameters, namely the interior offset and the offset
distance of the ensemble to the outer pointed arch: Both m m
parameters are equal in Fig. 9 a), while in 9 b) the outer
offset is doubled. m
b a
The great thing about the circle is that its offset is again a
circle. This applies also to curves like a pointed arch that are a) b)
created from a sequence of circular arcs and line segments. But Fig. 12. Construction of a rosette with pointed foils, with a relative
note that if the sequence contains corners, e.g. two arcs joining displacement of 1.15 to obtain m and m from m.
a) b)
Fig. 13. Offset operation to obtain the region borders.
a) b)
Fig. 15. Window profiles.

line and circular arc segments. All constructions presented


a) b)
are solely two-dimensional. The fascinating and impressive
Fig. 14. Pointed trefoil obtained from pointed arch. three-dimensionality of Gothic windows is achieved by profiles
that give depth to the two-dimensional geometric figures. In
architectural illustrations, profiles can often be found above or
standing rosettes, as shown in Fig. 10. below a front view, like those in Fig. 15 from Egle [3].
The geometry is fairly straightforward: Given the number Technically, these profiles are swept along the region border
n of foils in a unit circle, the radius r of the round foils is curves, with the profile plane being orthogonal to the tangent
computed as shown in  Fig. 11 b). Consider the tangent from of the curve. At corner points, where the tangent is discontinu-
center c to the circle m  r  . The distance from c to m is 1 r, ous, the sweep is continued onto the bisector plane. This is the
so
 the length of the perpendicular from m to the tangent is plane that is spanned by the bisecting line of the angle in the
1 r  sin α2 , which is supposed to be r. This equation gives corner and the normal of the 2D construction plane. Actually
r sin α2  1  sin α2 ). The perpendicular feet a and b are the this only applies when the curve is locally symmetric to the
endpoints of the circular arc that is rotated and copied n times bisector plane. In more general cases, the discontinuity locally
to make up the rosette. follows the medial axis of the two parts of the curve.
The pointed foils can be obtained from the round foils as
shown in Fig. 12. The midpoints m  m are obtained from II. GML R EALIZATION
m by displacement along the lines a  m  and b  m  . The The Generative Modeling Language (GML) is a very sim-
pointedness, and thus the radius of the circles, is influenced by ple, stack-based programming language for creating polygonal
the amount of displacement, which can be specified in relation meshes [4]. The language core is very similar to that of
to the original radius. Points a and b and the intersection point Adobe’s PostScript, as concisely described in chapter 3 of
c then specify the arcs which make up the pointed foils. In the PostScript “Redbook” [5], which largely applies also
order to fit into the original circle, the foils are scaled: Circles to the GML. The GML doesn’t have PostScript’s extensive
permit uniform scaling, and so do circular arcs. set of operators for typesetting, though. Instead, it provides
Just as described in section I-D, a connected boundary quite a number of operators for three-dimensional modeling,
region is constructed from the network of circular arcs. Exam- from low-level Euler operators for mesh editing, to high-level
ples are shown in Fig. 13. Note that also these offset curves modeling tools, such as different forms of extrusions, and
also only consist of arcs and line segments. operators to convert back and forth between polygons and
F. Further Refinements mesh faces.
Circular arcs can be combined very flexibly. Both corners Despite its simplicity, the GML is a full programming
and tangent continuous joints can be obtained from quite language, and it can be used to efficiently exploit the striking
elementary geometric constructions. The pointed trefoil in Fig. similarity between 3D modeling and programming: Good,
14 for instance is easily obtained from a pointed arch: First well-structured 3D modeling often follows a coarse-to-fine ap-
both arcs are symmetrically split, and then the lower parts are proach when designing a shape, and well-structured programs
replaced each by a pair of smaller arcs. Tangent continuity use re-usable parameterized classes or modules to accomplish
is obtained by choosing the midpoint of the next arc on the any particular instance of the type of task they have been
line through mid- to endpoint of the given arc. This example designed for.
shows the source of the great variability of geometric patterns A. The Pointed Arch
in Gothic architecture.
A pointed arch is composed of two circular arcs. An arc can
G. Appearance: Profiles be specified by start- and endpoint, and the midpoint of the
So far, the structure of the window is solely defined by circle, like in Fig. 11 b). In GML, we write this as an array of
the different regions, with their closed borders composed of three points: [ a m b ]. This alone is ambiguous, as there are
two possible arcs, in clockwise (CW) and in counterclockwise
(CCW) orientations from a to b. So we also specify a normal
vector n and introduce the convention that the arc is always
CCW oriented when seen from above (i.e., when the normal
points to the viewer). Alternatively, an arc could be specified
by midpoint, radius and two angles, or by midpoint, start point
and angle. But this either depends on the orientation of the a) b) c)
zero angle axis (i.e. the x-axis), or start and endpoint are not
Fig. 16. Creation of a pointed arch: a) The circular arcs are sampled and
treated symmetrically.
  combined into a single outline polygon. b) A double-sided Combined BRep
Now given the circles mL  r  and mR  r  as in Fig. 5, the face is created and then extruded. Sharp edges are shown in red, smooth
intersection is computed by an operator that expects midpoints edges in green. c) Front and back are sharp faces as their border contains
BSpline curve segments. Quads on the sides are tesselated using Catmull/Clark
and radii of two circles and the plane normal on the stack: subdivision.
mL r mR r nrml intersect_circles pop
Every operator simply pops its arguments from the stack,
The repeat operator expects a number n and a function on
computes one or more results, and pushes them back on the
the stack, and simply executes the function n times.
stack. In this case, the intersection points above and below the
Functions and executable arrays are synonymous in the
line between m0 and m1 are pushed on the stack, in this order.
GML: The opening brace { puts the interpreter in deferred
As we’re only interested in the intersection above, the other
mode, and subsequent tokens are not executed but just put on
result is popped. The remaining point now defines a variable
the stack. The closing } is a signal to create an ordinary array
q, and the two arcs are assembled with just another line of
from these tokens, and to set its executable flag to true. So
code:
this is an executable array, ready to be executed as the loop
/q exch def [ q mL pL ] [ pR mL q ] body.
C. Creating a Polygonal Mesh
B. Creating a Closed Polygon
Two very basic modeling operations turn this polygon into
The resulting two arcs can be seen as a high-level represen- a mesh, as shown in Fig. 16:
tation of a pointed arch. In order to create a discrete polygonal 5 poly2doubleface (0.0,1.0,5) extrude
mesh, the continuos arcs need to be sampled, i.e. converted to The poly2doubleface creates an n-sided face from an
polygons. This is done by the circleseg operator that expects n-sided polygon. It provides different modes to do this. So
an arc, a plane normal vector, an integer resolution and a mode in addition to the polygon it expects an integer number on
flag on the stack. As the arc is already there, it is sufficient to the stack that specifies how to handle successive identical
push only the other parameters: nrml 4 1 circleseg leaves points, and whether the face should have smooth or sharp
the polygon as an array of 4+1=5 points on the stack. To edges. Mode 5 for example creates sharp edges, and if a point
also convert the other array, the topmost stack elements are occurs repeatedly, only a single mesh vertex is created and it
swapped using exch. The two arrays are then concatenated is flagged as corner vertex, whereas the other vertices are set
into one polygon: to crease vertex. This creates two n-sided faces on front and
nrml 4 1 circleseg exch back, which is topologically a solid, but with zero volume.
nrml 4 1 circleseg arrayappend The result of this operation is one halfedge as a handle on the
The arrayappend operator yields arr1  arr2  arr1 arr2  . stack. Halfedges are an integral data type in the GML.
But note that the order is always very crucial when operating Besides  this halfedge, the extrude operation expects a
on the stack: The arcs were pushed in order left, right, so that 3D point dx  dy mode  on the stack, where dx specifies the
they could be processed right, left. This way, a combined CCW shrinking and dy the vertical distance of the extruded face to
oriented polygon can be created. But note that it contains the the original face. The mode flag again specifies vertex types
tip of the arch twice, as it was the last point of the right arc and edge sharpness flags. Mode 5 for example means that
and the first point of the left arc. This was done intenionally to for “vertical” edges (along normal direction) the vertex type
create a corner there (see below). The bottom of the arch can determines the sharpness, and the “horizontal” edges (in the
also be created the same way: Suppose bL , bR are the bottom displaced face plane) are sharp. This is why just the vertical
corners of the window, so that bL  qL  and bR  qR  are the edges from the three corner vertices are sharp in Fig. 16 b).
left and right vertical line segments. Then the complete code This image also shows the halfedge returned by extrude as
to create the polygon in Fig. 16 a) looks like this: the red half-arrow in the lower left.
mL r mR r nrml intersect_circles pop
D. Mesh Representation: Combined BReps
/q exch def [ q mL pL ] [ pR mL q ]
[ bL dup bR dup ] The underlying mesh representation is the Combined BReps
2 { exch nrml 4 1 circleseg arrayappend } [6], CBRep for short. Each CBRep edge carries a sharpness
repeat flag that can be set to either sharp (red) or smooth (green).
a) b) c) a) b) c)
Fig. 17. Creating a window in a wall: a) The arch is inverted by negative Fig. 18. a) The execution of gothic-window yields eight polygons on the
extrusion. The backface (culled, not rendered) is closer and CW oriented stack defining the structure of the prototype window. b) The seven interior
(black halfedge). b) A wall with its front face in the same geometric plane polygons are embedded in the face created from the outer arch. c) Simple
as the arch’s backface. The backface (black halfedge) is made a ring of the negative etrusion of the interior regions.
wall’s front face (halfedge at bottom) using the killFmakeRH Euler operator.
c) The tesselation of the wall respects the ring just created and trims it out.

as in /nrml (0,0,1) def, that are stored in dictionaries –


but searching through the dictionary stack can be slow. As
These flags determine which tesselation method to use for
an alternative, we have introduced named registers. A fixed
a face: Faces that contain one or more smooth edges are
number (currently 100) of registers can be used between a
smooth faces. They are treated as Catmull/Clark subdivision
beginreg  endreg pair. Values can be set using !myvar
surfaces. Faces with only sharp edges and where all vertices
and retrieved using :myvar, which is actually even faster than
are corners are treated as polygonal faces. Faces with only
a push or pop on the stack. This enables a more “procedural”
sharp edges but where not all vertices are corners are sharp
programming style, while still retaining the flexibility of the
faces. The border of such a sharp face contains BSpline curves,
stack for passing parameters between functions. As an example
but it is triangulated for display just like polygonal faces. An
consider the following parameterized version of the pointed
example is the front face of the arch in Fig. 16 c). A vertex
arch, now formulated as a function pointed-arch:
is classified as corner vertex if three or more of its edges are
sharp, with exactly two sharp edges it is a crease vertex. So beginreg !nrml !offset !excess !pR !pL
the classification actually proceeds from edges to vertices to :pR :pL :excess line_2pt !mR
faces. :pL :pR :excess line_2pt !mL
Combined BReps have another feature, which is that polyg- :pR :mR dist :offset sub !r
onal or sharp faces may have rings. A ring is a “negative”, :mL :r :mR :r :nrml intersect_circles pop !q
CW oriented, face in the interior of another face, which is the [ :q :mL :pL :pR :offset move_2pt ]
ring’s baseface. It trims out a hole, which is quite useful e.g. [ :pR :pL :offset move_2pt :mR :q ]
for creating windows in a façade. endreg

Note that the backface of the arch model is actually CW The line_2pt function just computes pR  excess pL pR  ,
oriented from the perspective in Fig. 16 c). So one way to which results in pL as the midpoint mR of the right arch when
create a hole is by negative extrusion, so that the model the excess is 1.0. The radius of the circles is then given by the
appears inverted when backface culling is active. A halfedge distance from pR to mR , minus the desired offset, of course.
of the backface is obtained using “halfedge navigation”: The Now the intersection q of the circles left to the line from
edgeflip operator returns the mate of a halfedge, which is mL to mR can be computed. Finally, the two circular arcs are
part of the neighbour face, and runs in reverse direction. Given assembled: The move_2pt operator moves a point into the
an edge eWall of the wall, the backside is turned into a ring of direction of another point by a specified amount of units. Note
the wall using the killFmakeRH Euler operator, which reads that the start point of the right and the end point of the left
“kill Face, make Ring Hole”: arcs, i.e. the basis points, are computed “inline”: An open
5 poly2doubleface dup edgeflip exch bracket [ is just a literal symbol that is put on the stack, and
(0,-0.3,5) extrude exch eWall killFmakeRH the closed ] just makes the interpreter create an array from
Here, the halfedge on the front-facing side of the double- all stack elements until it finds the [.
sided face is duplicated, and the duplicate is flipped on the The family of pointed arches in Fig. 9 c) was created using
backside. The top two stack elements are exchanged, so that this function by varying the offset parameter.
the negative extrusion of -0.3 units operates on the front face
F. The Prototype Window in GML
and pushes it farther away, returning a halfedge of the extruded
face. Another exch brings the backside-halfedge again to the The GML representation of the prototype Gothic window is
top, and it is made a ring of the wall’s front side. of course a function gothic-window that expects the essential
parameters as described in section I-B on the stack: The left
E. The Pointed Arch as a Function and right base points of the arch, the height of the vertical
This last example illustrates one of the drawbacks of the segments of the lower part of the window, the excess of the
stack approach: It can be very tedious to keep track of the arch, the plane normal, the vertical offset of the sub-arches
items and their order. Another option is to use named variables, (cf. Fig. 7), and the outer and inner border thicknesses. The
following call produces the eight polygons that are shown in
Fig. 18 a) together with the wall from before:
(-1,0,2) (1,0,2) 4.0 1.25 (0,-1,0) 0.2 0.1 0.05
gothic-window
This function uses only operators and techniques that were
presented so far. The only additional operator needed is
intersect_line_ellipse, to compute the midpoint of the a) b) c)
circle in the top from two points specifying the line, the two
Fig. 19. a) Profiles are created by also shrinking an extruded face. b) A simple
focal points of the ellipse, and its radius. horizontal translation of the edges can yield self-intersections of the surface
The computation of the four fillets, each composed of three c) The more elaborate extrudestable operator removes self-intersections.
arcs, is done explicitly: The start-, mid-, and endpoints of each
arc are uniquely defined by the intersection of circles. Those
are derived from the big arch, the sub-arches, and the circle,
based on the inner and outer border thicknesses.
G. The Idea of a Window Style
Executing gothic-window creates eight polygons on the
stack, in a defined order. They can be used to directly create a) b) c)
mesh faces, in a similar manner as in section II-C. But Fig. 20. a) Profile used for multiple extrusions. Extrusion starts in the origin
much more flexibility is gained by introducing the idea of (top left corner); x-direction defines shrinking offset, y-direction pushes into
window styles – based on the observation that the eight the wall. b) Shape created by sweeping the profile along the border of a ring.
c) View more from above.
polygons fall into four groups: Main arch, sub-arches, circle,
and fillets. Instead of using gothic-window directly, one can
wrap this into another function gothic-window-style that
My-Simple-Style begin
subsequently calls four functions corresponding to the four
(-1,0,2) (1,0,2) 4.0 1.25 (0,-1,0) 0.2 0.1 0.05
groups:
gothic-window-style
beginreg !eBack !eWall end
gothic-window
:eWall style-arch !eArch H. Adding Profiles
:eArch :eBack style-circle The simple extrude operator used so far can also be used
2 { :eArch :eBack style-sub-arch } repeat to shrink the extruded face. This is done by a simple horizontal
4 { :eArch :eBack style-fillet } repeat offset, translating each edge to the left (i.e. towards the face
endreg interior) by a specified amount of units. This works well in
What does this function do? First, it expects the same pa- most cases (Fig. 19 a), but it can lead to self-intersections in
rameters as gothic-window, and additionally two halfedges, faces with sharp corners, such as the central fillet, see 19 b).
namely of the front- and of the backside of the wall where We have therefore added a more sophisticated extrudestable
the window is to be inserted. After the polygons are created, operator, based on the straight line skeleton, which is related
a function style-arch is expected to take the topmost main to the medial axis of a polygon [7]. This operator not only
arch-polygon from the stack, to somehow insert it into the removes self-intersections, it can also handle
 multiple extrude-
wall, and to return a halfedge to the new face. The other items, operations at a time, i.e., an array of dx  dy mode  triplets.
the sub-arches, the circle and the fillets, are then inserted into This essentially defines a profile, see Fig. 20 for an example.
this main arch face. Each of these functions is supposed to
take two halfedges and one polygon from the stack, so that III. R ESULTS
finally all polygons are popped and processed. We have carried out a number of experiments to test the
One great thing GML has inherited from Postscript is its variability of our style library, some of which are shown in
quite flexible name lookup mechanism – namely the dictionary Fig. 21.
stack technique. When the GML interpreter encounters an In 21 a) only the basic structure is used, and the same profile
executable name, such as style-arch, it searches top to is used for fillets, circles and sub-arches. The openings are
bottom through the current dictionary stack to find the first created by negative extrusion until the backside of the wall
dictionary that contains this name as a key. If it exists, the in- is reached, and then the extruded face is made a ring of the
terpreter takes the corresponding value (literal or executable), backside. In 21 b), the circle style is set to contain a rounded
and executes it. The dictionary stack can be freely manipulated rosette, but with the same profile as before. In the next model
at any time, using begin and end. 21 c), we switch to pointed foils in the rosette and to a more
So if for example there is a dictionary My-Simple-Style elaborate profile (the one from Fig. 20). The model Fig. 21 d)
where all four Style-X keys point to suitable functions, a has the same structure as the one before, but a different profile,
particular window instance can be created just like this: the number of foils is set to 4, and the sub-arches use a pointed
trefoil (cf. Fig. 14). The next model 21 e) shows the same
window with a different profile just for the sub-arches, and
another set of parameters for the pointed trefoil.
The next example, Fig. 21 f), is actually quite interesting:
This time we use the fillets and the rosette from 21 c), and
combine them with the style from 21 d) as the style of the
sub-arches. So we can make use of the somewhat recursive
structure of Gothic architecture, where the sub-arches are
pointed arches just like the outer arch, and consequently permit
the same type of refinement. The next two images show one
further iteration: First a style with 21 c) in both sub-arches
(21 g), and then this new style is again used for the sub-arches
(21 h).
At the second refinement level of this model, the ex-
trudestable operator has to remove quite a bit of self-
intersections that would otherwise destroy the model, as can
be seen in 21 i). This is due to the fact that in this style
the profile, which is essentially a 2D polygon, is uniformly
scaled by an amount depending on the wall thickness. Fig.
21 j) shows the tesselation and gives an idea of the number of
triangles that are created by the subdivision surfaces (about 7
million, after 3 subdivision steps).
The final example 21 k) marks one area of future work:
Given an image of a window like in 21 l), how well can we ac-
tually reproduce the existing shape? And could there be ways
to determine some of the shape parameters automatically?
It should be mentioned that the complete GML code for all
examples, styles, and the library of basic Gothic window tools
such as pointed-arch, rosette, etc. fits into an ascii file of
27KB. Building the most complicated example window, 21 h),
takes not much more than a second on a state-of-the-art PC.
An interactive GML demo can be downloaded from the
GML website [4] for verification – and for enjoying Gothic
window tracery, of course.
R EFERENCES
[1] Binding, Hochgotik. Taschen Verlag, Cologne, Germany, 2002.
[2] ——, Masswerk. Wiss. Buchgesellschaft, Darmstadt, Germany, 1989.
[3] von Egle and Fiechter, Gotische Baukunst, reprint from 1905 ed., ser.
Baustil- und Bauformenlehre. Verlag Th. Schäfer, Hannover, Germany,
1996, vol. Bd. 3.
[4] Havemann. (2003, Aug.) The gml homepage. [Online]. Available:
http://graphics.tu-bs.de/gml
[5] Adobe Systems Inc., PostScript Language Reference Manual, 3rd ed.
Addison-Wesley, 1999.
[6] Havemann and Fellner, “Progressive combined breps – multi-resolution
meshes for incremental real-time shape manipulation,” Computer Graph-
ics Forum, submitted for publication, also available as technical report
TUBSCG-2003-01, Institute of ComputerGraphics, TU at Brunswick,
Germany.
[7] Eppstein and Erickson, “Raising roofs, crashing cycles, and playing
pool: Applications of a data structure for finding pairwise interactions,”
Discrete & Computational Geometry, vol. 22, no. 4, pp. 569–592, 1999.
[Online]. Available: http://compgeom.cs.uiuc.edu/j̃effe/pubs/cycles.html
a) b) c)

d) e) f)

g) h) i)

j) k) l)
Fig. 21. Results. Yop.

You might also like