the rest of the assembly. Starting from the root of the interaction graph, we perform a breadth first traversal. At each
traversal step, we compute a set of nodes S that includes
the frontier of newly visited nodes, as well as any previously visited nodes that are in contact with this frontier.
We then generate a frame that highlights S by rendering
all other parts in a desaturated manner. To emphasize the
motion of highlighted parts, each frame includes any non-contact arrow whose parent part is highlighted, as well as
any contact-based arrow whose two associated parts are
both highlighted. If a highlighted part only has contact
arrows and none of them are included based on this rule,
we add the part’s longest contact arrow to the frame to
ensure that every highlighted part has at least one arrow.
In addition, arrows associated with previously visited parts
are rendered in a desaturated manner. For animated visualizations, we allow the user to interactively step through
the causal chain while the animation plays; at each step, we
highlight parts and arrows as described above.
5. 3. Highlighting keyframes of motion
As explained in Section 2, some assemblies contain parts
that move in complex ways (e.g., the direction of motion
changes periodically). Thus, static illustrations often include
keyframes that help clarify such motions. We automatically
figure 9. exploded view results. our system automatically
generates exploded views that separate the assembly at coaxial part
interactions to reduce occlusions. these two illustrations show two
different configurations for the planetary gearbox: one with fixed
outer rings (a), and one with free outer rings (b). the driver part is in
blue, while fixed parts are in dark gray.
(a)
Planetary gearbox w/ fixed outer rings
(b)
Planetary gearbox
w/ free outer rings
compute keyframes of motion by examining each translational part in the model: if the part changes direction, we add
keyframes at the critical times when the part is at its extremal positions. However, since the instantaneous direction of
motion for a part is undefined exactly at these critical times,
we canonically freeze time d after the critical time instances
to determine which direction the part is moving in (see Figure
8). Additionally, for each part, we also add middle frames
between extrema-based keyframes to help the viewer easily
establish correspondence between moving parts. However, if
such frames already exist as the extrema-based keyframes of
other parts, we do not add the additional frames (see Figure 8).
We also generate a single frame sequence that highlights both the causal chain and important keyframes of
motion. As we traverse the interaction graph to construct
the causal chain frame sequence, we check whether any
newly highlighted part exhibits complex motion. If so, we
insert keyframes to convey the motion of the part and then
continue traversing the graph (see Figure 10c).
5. 4. exploded views
In some cases, occlusions between parts in the assembly
make it difficult to see motion arrows and internal parts.
To reduce occlusions, our system generates exploded views
that separate portions of the assembly (see Figure 9). Typical
exploded views separate all touching parts from one another
to ensure that each part is visually isolated. However, using
this approach in how-things-work illustrations can make it
difficult for viewers to see which parts interact and how they
move in relation to one another.
To address this problem, we only separate parts that are
connected via a coaxial interaction; since such parts rotate
rigidly around the same axis, we believe it is easier for viewers to understand their relative motion even when they are
separated from one another. To implement this approach,
our system first analyzes the interaction graph and then
cuts coaxial edges. The connected components of the resulting graph correspond to sub-assemblies that can be separated from one another. We use the technique of Li et al. 16
to compute explosion directions and distances for these
sub-assemblies.
6. ResuLts
We used our system to generate both static and animated
how-things-work visualizations for ten different input
models, each of which contains from 7 to 27 parts, collected from various sources. Figures 2, 7–10 show static
illustrations of all ten models. Other than specifying the
driver part and its direction of motion, no additional user
assistance was required to compute the interaction graph
for seven of the models. For the drum, hammer, and chain
driver models, we manually specified lever, cam, rod and
belt parts, respectively. We also specified the crank and
piston parts in the piston model. In all of our results, we
colored the driver blue, fixed support structures dark gray,
and all other parts light gray. We render translation arrows
in green, and side and cap arrows in red. In all the examples, analysis takes 1–2 s, while visualization runs at interactive rates.