Jig
Strut
Reference
Controller
Mapping
Organized Collection of Points
\pbOneCol[r]
{\pbIncludeGraphics[\extImagesPath/VikingShipSculpture.jpg]{width=\currentWidth}
\source{Amy Taylor}}
Build simple abstract frameworks to isolate structure and
location from geometric detail.
Designers sketch. Carpenters make jigs. These acts share intent;
they both abstract away inessential detail, leaving a simple
framework that can be easily changed. Design sketches express
structure and form. Carpenters' jigs fix locations and tool paths
in space. A parametric Jig mixes both
of these traditions. Use this pattern when you want to quickly
make and modify a simple version of your design and develop
detail later.
Most models contain many elements and few controls. The logic of
the controls is typically simple. A
Jig is a simplified model that allows
you to understand how the controls work without the distracting
detail and slow interaction implied by a larger
model. Jigs can be changed easily
compared to complex models. Once developed, a
Jig can be reused in other contexts,
but only if it is can be isolated from the rest of the model.
Jigs are like abstracting
controllers, but are more specialized (they abstract a
particular design), typically describe the whole design and are
embedded within the design rather than being separated from
it. The design is built directly on top of the Jig
A Jig should appear and behave like a
simplified version of your end goal. An physical example is the
strongback and stations used in building a small boat. The
stations locate and support the hull when it is being
constructed. Fairing, the process of making the hull smooth and
continuous, can be done much more simply with stations than with
a complete hull. Jigs are like
construction lines in that they help locate elements. They are
unlike such lines in that they are linked to the controls that
enliven the parametric model.
Jigs typically connect to the model
they control more richly than controllers, but still with a
limited number of links\index{graph!link}. Most of these links should come from
\afit{sink} nodes\index{node!sink}. This is not necessity---it is good
programming style. Non-sink nodes capture the internal logic of
the Jig. Connections from other than
sink nodes run the risk of becoming invalidated when the Jig is
refactored. In fact, if a sink node of a
Jig is not used in the model it
serves, it probably should not be there and can be deleted.
To make a Jig, you need to understand
the parametric behaviour you want and how the
Jig will be used to define the
complete model. A good Jig typically
has relatively few geometric inputs (for example, points, lines,
planes, coordinate systems) and each of these is carefully
named. The small number of geometric inputs allows you to easily
locate the Jig. The names\index{name} are the
primary means by which you will understand the
Jig when you (or someone else) reuse
the Jig in the future.
Use the internal structure of the Jig
to capture intended logical behaviour For example, if the depth
of a truss is proportional to its span, a
Jig might comprise a line and a
variable whose value is proportional to the length of the line.
Lift
Use a moving point\index{point} to smoothly move each of a
collection of points, which, in turn, define a surface\index{surface}.
Free form surfaces require a set of defining points, which
the surface's control net. They are the sink nodes of this
Jig and the main intent behind
its structure. Each of the points are responsive to the
controlling point. To create such a set, start with two
simple points. Create a line\index{line}, starting from one point
and having a length that varies inversely with the distance
between the two points. The actual function by which the
length varies can be crucial. The
Mapping pattern shows how to
clearly specify and control such functions.
Call the start point of the line the *reference*
and the other point the *controller.* The length of
the line is given by any function that reduces as its input
grows. For example
$1/Distance(controller,reference)$
or
$10-Distance(controller,reference)$. Replicate the start point and hide
it. The model now has a set of lines that react to the
movement of the controller. Each of these lines acts as a
Jig to mark the form of the
future surface. In the final step, use the end points of the
Jig lines as the surface\index{surface} control
net.
\begin{bodyNote}
\pbOneCol
{\tikzPlaceHolder[Explanatory figure here]{\currentWidth}{\currentWidth*0.75}}
\end{bodyNote}
Controlled Surface Variation
Make surface variations starting from a surface with a
parabolic cross section. Use a
Jig to model variations in a
controlled way.
Low order curves\index{curve} and
surfaces\index{surface} are easy to model and
provide visual regularity that is difficult to achieve with
higher orders. An order $3$ curve can
be represented by a higher-order curve by locating the
control points of the higher order curve\index{curv!degree} in precise relation
to those of the lower order curve\index{curve!order}. In the curve literature
this is called *degree elevation.*
A symmetric Jig comprising an
upright and a cross bar provides a simple set of parameters
that support controlled surface variations starting from a
parabolic curve (see (a) below). To generate the control
points of an identical order $4$ curve
from those of an order $3$ curve (see
(b)), divide the two sides of the order $3$ control polygon in the ratio of
$2:1$ and $1:2$ respectively. The
order $5$ control polygon divides the
three sides of the $4$ in the ratios
$3:1$, $2:2$ and
$1:3$. Initially locate and size the cross bar to
give these ratios. Varying the ratios (d) produces symmetric
curves that are visually close to the parabola. Restoring
the cross bar settings to the above defaults restores the
initial parabolic surface section. This allows the designer
to vary the surface cross section in comparison to a known,
simple and potentially fabricatable form.
\begin{bodyNote}
\pbTwoCol
{\input{\GCFigsPath/Patterns/JigControlledSurfaceVariationExplainCore00.tex}}
{\currentWidth/2}
{\input{\GCFigsPath/Patterns/JigControlledSurfaceVariationExplainCore10.tex}}
{\currentWidth/2}
\pbTwoCol{\textsf{(a)}}{\currentWidth/2}{\textsf{(b)}}{\currentWidth/2}
\pbTwoCol
{\input{\GCFigsPath/Patterns/JigControlledSurfaceVariationExplainCore20.tex}}
{\currentWidth/2}
{\input{\GCFigsPath/Patterns/JigControlledSurfaceVariationExplainCore30.tex}}
{\currentWidth/2}
\pbTwoCol{\textsf{(c)}}{\currentWidth/2}{\textsf{(d)}}{\currentWidth/2}
\end{bodyNote}
Tube
Use the local properties of a curve\index{curve} to
determine the local radius and orientiation of circular
Jigs. Use the circles\index{circle} to define a
tube. In turn use a curve as another
Jig to apply a global form to the
tube as a whole.
Start with a curve as the central path of the tube. See (a) below. It can
be specified by four points with almost arbitrary $x,$ $y,$ and
$z,$ coordinates. Along this path,
place a sequence of circles on planes perpendicular to
global $y$-axis. The circles are
evenly distributed in parameter space, so the geometric
spacing between circles varies along the curve. Each circle
takes its radius from a property of its centrepoint, in this
case, the height above some external datum. In this sample,
the radius is the absolute value of the centrepoint's $z,$ value plus a small increment (to
avoid the possibility of a zero or negative radius). Since
these circles are the elements that construct the tube, they
comprise a Jig.
Now (b) Jig the
Jig. Make a simple curve using an
low-order
\bspline[.]B-Spline. Substitute it
for the existing curve used to define the
Jig. The tube now reflects the
simple, strong geometry of the curve.
Make (c) arcs comprising those parts of the circle
Jigs that are above the $xy$-plane.
Lastly (d), change the planes on which the circle
Jigs lie to be perpendicular to
the defining curve, resulting in a subtle, but significant
change to the tube's form.
\begin{bodyNote}
\pbTwoCol
{\input{\GCFigsPath/Patterns/JigTubeExplain00.tex}}
{\currentWidth/2}
{\input{\GCFigsPath/Patterns/JigTubeExplain10.tex}}
{\currentWidth/2}
\pbTwoCol{\textsf{(a)}}{\currentWidth/2}{\textsf{(b)}}{\currentWidth/2}
\pbTwoCol
{\input{\GCFigsPath/Patterns/JigTubeExplain20.tex}}
{\currentWidth/2}
{\input{\GCFigsPath/Patterns/JigTubeExplain30.tex}}
{\currentWidth/2}
\pbTwoCol{\textsf{(c)}}{\currentWidth/2}{\textsf{(d)}}{\currentWidth/2}
\end{bodyNote}
Download JigTube.gct
Sheet
Simplify controls for a surface\index{surface} by relating them to a quadrilateral\index{quadrilateral}.
Standard surface controls can provide too much
freedom. This sample reduces the control available to model
a surface by ensuring tangency\index{tangent} conditions at the corners. It
still provides a wide range of visually logical variation.
The Jig is hierarchical--it comprises Jigs built on
Jigs, as shown below. The first
Jig (a) is a quadrilateral, which may be planar or not. The
second Jig (b) has two parts. The
first comprises struts at each vertex perpendicular to the
local plane of the quadrilateral (the plane given by
the vertex and its predecessor and successor vertices). The
second adds coordinate systems at the end of each strut,
such that the
$x$-axis of the system aligns with the
successor vertex and the $y$-axis with the
predecessor vertex, but in the opposite direction (the
quadrilateral has right-hand
rule orientation, so the $y$-axis follows the vector between
the predecessor vertex and the vertex itself). The third
Jig (c) comprises curves with end tangents defined by
the $x$- and $y$-directions of the
coordinate systems. The result (d) is the surface
itself with the curves as its defining boundary.
The controls for this Jig comprise the quadrilateral itself
and the four strut lengths. Each enters the system at a
different level of the Jig.
\begin{bodyNote}
\pbTwoCol
{\input{\GCFigsPath/Patterns/JigSheetExplain00.tex}}
{\currentWidth/2}
{\input{\GCFigsPath/Patterns/JigSheetExplain10.tex}}
{\currentWidth/2}
\pbTwoCol{\textsf{(a)}}{\currentWidth/2}{\textsf{(b)}}{\currentWidth/2}
\pbTwoCol
{\input{\GCFigsPath/Patterns/JigSheetExplain20.tex}}
{\currentWidth/2}
{\input{\GCFigsPath/Patterns/JigSheetExplain30.tex}}
{\currentWidth/2}
\pbTwoCol{\textsf{(c)}}{\currentWidth/2}{\textsf{(d)}}{\currentWidth/2}
\end{bodyNote}
Download JigSheet.gct
Scallop
Use the shape of a scallop as a point of
departure in a search for form. The actual
surface\index{surface} will be analogous to, but not a copy of, a scallop.
In plan, the geometry of a scallop is approximately that of
a circular arc. The base of the scallop is a chord of the
arc. Any point on the edge of the circle\index{circle} will subtend a
constant angle with the base.
The idea is to "open" up the base of the scallop---to turn
it from a line into a vertical rectangle. The
Jig is a sequence of triangles on
horizontal planes arrayed vertically from the base line. The
apex of each triangle is the projection of a point on the
circle onto the plane of the triangle\index{triangle}. There are three
constants here: angle subtended on the circle, spacing of
base points on the circle and vertical spacing of the jig
elements. Controllers could be
put on each of these to open a design space for the surface.
The generating triangles are actually modeled as order
$2$ \bsplineB-Spline curves. This and the order of the
surface itself give two additional controls. The resulting
forms are far from the original scallop point of
departure.
\begin{bodyNote}
\pbOneCol[c]
{\input{\GCFigsPath/Patterns/JigScallopExplain00.tex}}
\end{bodyNote}
Download JigScallop.gct