## Modeling Extrusions and Revolutions

### Extrusions and Revolutions

For solids with custom cross-sections, the Extruded Solid
and Revolved Solid blocks enable you to
create truer solid representations than simpler shapes such as
Brick Solid, Cylindrical
Solid, and Spherical
Solid often allow. Use them when modeling solids that
have arbitrary yet constant cross-sections along or about an axis. The
Extruded Solid block can either be a
`General`

extrusion or a
`Regular`

extrusion.

#### What is the Extruded Solid Block?

A general extrusion is a linear sweep of a custom cross-section along an axis that is normal to the cross-section plane. The sweep spans the length specified in the Extruded Solid block dialog box. The cross-section can have an arbitrary outline and one or more hollow sections—though the rules for specifying cross-sections differ slightly when holes are present.

General extrusion examples include straight beams, plates, spars, struts, and rods. The figure shows an angle beam, a general extrusion whose cross-section consists of two thin rectangles arranged in an L shape. The Extruded Solid block sweeps the L shape linearly out of the cross-section plane to obtain the final beam geometry.

**General Extruded Solid Block as a
Linear Sweep**

**A Note on Extruded Solid
Shapes. **The Extruded Solid
block provides a second extrusion shape, named
`Regular`

extrusion. This shape is a
simpler version of `General`

extrusion and
is suited only for solids whose cross-sections are regular
polygons—those with sides of the same length. The cross-section
outline is fixed by the number of sides of the polygon and it cannot
contain holes.

#### What is the Revolution Solid block?

Use the Revolved Solid block to make an angular sweep of a
cross-section about an axis that lies on the same plane as the
cross-section. The sweep can span a full revolution or a lesser angle
between `0`

and `360`

degrees. As with
extruded shapes, the cross-section can have an arbitrary outline with or
without holes.

Revolved examples include cones, domes, pistons, gear shafts, and pipe bends. The figure shows a cylindrical peg, a Revolved Solid whose cross-section, like the angle beam, consists of two thin rectangles arranged in an L shape. The Revolved Solid block sweeps the L shape about an axis lying on the cross-section plane to obtain the final peg geometry.

**Revolved Solid as an Angular
Sweep**

### The Cross-Section Profiles

You specify the cross-sections numerically, as MATLAB matrices populated with the coordinate pairs of select cross-section points. Each matrix row provides a coordinate pair for one point. There is no upper bound on the number of rows of a coordinate matrix, but a minimum of three is required to completely define a closed shape.

% Coordinate Matrix Example: % Square Cross-Section with Center at [0, 0] and Side Length 2 [ -1 -1; % Lower left corner 1 -1; % Lower right corner 1 1; % Upper right corner -1 1; % Upper left corner ]

The coordinate pairs are treated as (*x*, *y*) values
in the case of extruded shapes and as (*x*,
*z*) values—specified in that order—in the case of
revolved shapes. The coordinates are resolved in the reference frame of the
Extruded Solid or Revolved
Solid block, with the (0, 0) pair coinciding with the
origin of that frame. It is common practice to parameterized the coordinates
in terms of MATLAB variables associated with key solid dimensions—for
example, radius or length.

#### From Coordinates to Cross-Sections

The coordinate pairs connect sequentially in the order implicit in the coordinate matrix. The connections are by means of straight line segments. The result is a closed polyline that separates the region to be filled with material (the solid part) from the region to be left hollow (any holes that might be present and the empty surroundings).

The boundary between the two regions is such that, as you proceed along the polyline from one point to the next, the solid region lies to your left and the hollow region to your right. The first and last coordinate pairs are often the same, but if they are not, a connection line is inserted between them to ensure that the cross-section is in fact closed. The animated figure shows the drawing of a binary link cross-section without holes.

Note that the cross-section is invalid if at any point the polyline crosses itself. However, it is okay for two line segments to be arbitrarily close or even coincident with each other. In fact, you can exploit this property to specify a cross-section that has one or more holes.

#### A Special Constraint for Revolutions

Revolved Solid coordinate matrices are subject to a
special constraint: *x*-coordinates cannot be negative.
This rule follows partly from the revolution axis (*z*)
used by the Revolved Solid block. When
sweeping the cross-section, any areas to the left of this axis (those
with negative *x*-coordinates) become overlapped with
those to the right (positive *x*), resulting in an
unexpected solid geometry. To prevent this issue, an error is issued if
a Revolved Solid cross-section is found
with negative *x*-coordinates.

#### Try It: Define a Simple Cross-Section

Consider the cross-section shown in the figure. This cross-section belongs to a binary link with round ends and no holes. Parameterize the cross-section in terms of the dimensions shown and specify it in the form of a coordinate matrix.

**Binary Link Cross-Section (No Holes)**

Start by opening a new MATLAB script and save it in a convenient
location under the name `modelParams`

. Add two
variables for the dimensions shown in the figure, length
(`l`

) and width (`w`

). Set the
length to `20`

and the width to `2`

(in what will later be units of `cm`

).

```
l = 20;
w = 2;
```

Define the round ends as semicircles. First, generate two arrays with
the angular spans of the left and right ends. These arrays enable you to
parameterize the (`x`

, `y`

)
coordinates using simple trigonometric expressions. Each array has five
points, but for smoother shapes you can specify more. The transpose
symbol (`'`

) ensures that `A`

and
`B`

are column
arrays.

```
A = linspace(-pi/2, pi/2, 5)';
B = linspace(pi/2, 3*pi/2, 5)';
```

Define the coordinate matrices of the right end (`csRight`

) and left
end (`csLeft`

). The first column of each matrix
corresponds to the *x*-coordinate. The second column
corresponds to the *y*-coordinate. The
*x*-coordinates of the two ends are offset in
opposite directions by
`l`

/2.

```
csRight = [l/2 + w/2*cos(A) w/2*sin(A)];
csLeft = [-l/2 + w/2*cos(B) w/2*sin(B)];
```

Combine the coordinate matrices into a single matrix named `cs`

. This
is the matrix that you must specify in the
**Cross-Section** parameter of the
Revolved Solid block. Note that the
straight segments of the cross-section are automatically generated when
the end points of the semicircles are
connected.

`cs = [csRight; csLeft];`

You can visualize the cross-section outline using the MATLAB^{®}
`plot`

command. Enter the code shown below at the
MATLAB command prompt.

figure; hold on; axis equal; plot(cs(:,1), cs(:,2), 'Color', [0.6 0.6 0.6], 'Marker', '.',... 'MarkerSize', 9, 'MarkerEdgeColor', [1 0 0]);

The plot shows the cross-section of the binary link. The points in the coordinate matrix are shown as red dots. The resulting cross-section outline is shown as a light gray line. Notice that the end sections each comprise five points—the number specified in the angular span arrays.

### Cross-Sections with Holes

The coordinate matrix should always represent a single continuous path. This rule works well when specifying a cross-section without holes but it demands extra care when holes exist. Because the outline of a hole is not contiguous with the outline of the cross-section, you must now add a thin cut between the two. The cut enables you to traverse the cross-section and hole outlines in a single loop.

Consider a binary link with a hole at one end. The cross-section of this body comprises two closed paths—one for the cross-section outline, the other for the hole. The paths are physically separated. However, you can connect them by cutting each path at a vertex and joining the cut vertices with additional line segments. The animated figure shows the drawing of a binary link cross-section with one hole.

You can extend this approach to cross-sections with multiple holes. Note that each hole must have a cut. There is no single best way to approach the cuts. The key is to plan them so that you can traverse the cross-section—and all of its holes—in a single continuous path while keeping the polyline from intersecting itself. The animated figure shows the drawing of a binary link cross-section with two holes.

#### Try It: Define a Cross-Section with Two Holes

Modify the coordinate matrix in your `modelParams`

script to include two identical holes as shown in the figure. Save the
script often as you go.

**Binary Link Cross-Section (Two Holes)**

Start by adding a new variable for the hole diameter
(`d`

). Set the diameter to `1.2`

(in what will later be units of `cm`

).

`d = 1.2;`

Generate a new angular span array for the left and right holes. The holes are drawn in the same order and a single array suffices. The array elements are ordered in a clockwise direction, ensuring that when generating the cross-section the solid region stays to the left. The number of array elements has doubled to reflect the wider angular span of the holes (360° vs 180°).

`C = linspace(3*pi/2, -pi/2, 10)';`

Define the outlines of the left hole (`csLeftHole`

),
the right hole (`csRightHole`

), and the connection line
between the two (`csConnLine`

). The x-coordinates are
shifted left by half the length (`l`

/2) for the left
hole and right by the same distance for the right hole.

```
csLeftHole = [-l/2 + d/2*cos(C) d/2*sin(C)];
csRightHole = [+l/2 + d/2*cos(C) d/2*sin(C)];
csConnLine = [-l/2 -w/2; +l/2 -w/2];
```

Add the new coordinate matrices to the existing `cs`

matrix. The order
of the matrices determines the order in which the complete cross-section
is drawn. The result is a variable that you can specify in the
**Cross-section** parameter of the Revolved
Solid block.

```
cs = [csRight; csLeft; csLeftHole; ...
csConnLine; csRightHole];
```

As before, you can visualize the cross-section outline using the
MATLAB
`plot`

command. Ensure that the plotting code shown
below is included in your script. Then, run the script to generate the
plot.

figure; hold on; axis equal; plot(cs(:,1), cs(:,2), 'Color', [0.6 0.6 0.6], 'Marker', '.',... 'MarkerSize', 9, 'MarkerEdgeColor', [1 0 0]);

The plot shows the cross-section of the binary link. The points in the coordinate matrix are shown as red dots. The resulting cross-section outline is shown as a light gray line. Note that the hole sections each comprise ten points—the number specified in the angular span arrays.

### From Cross-Sections to Solids

The *z*-axis of the reference frame serves as the sweep axis in both the
Extruded Solid and
Revolved Solid blocks. The specified
cross-section is swept along this axis in the case of
Extruded Solid block and about this axis
in the case of the Revolved Solid block. The
sweep is symmetrical with respect to the cross-section plane: it runs half
of the sweep length or angle in each direction of the sweep axis. This
symmetry leaves the cross-section plane—and therefore the origin of the
reference frame—halfway between the ends of the sweep.

#### Try It: Use Your Cross-Section to Model a Solid

Open a new Simulink

^{®}model and, from the Bodies library, add a Extruded Solid block. You can click the model canvas, type the block name, and make a selection from the options shown. Save the model in a convenient location as`binaryLinkSolid`

.In the Extruded Solid block dialog box, set the

**Geometry**parameters as shown in the table. Set the parameter units to`cm`

. The**Cross-Section**parameter is defined in terms of the`cs`

variable in your`modelParams`

script.Parameter Value **Cross-Section**`cs`

**Length**1 Load your

`modelParams`

script to your model workspace:In the

**Modeling**tab, click**Model Explorer**. You use this tool to load the`modelParams`

script that you previously created onto your model workspace.In the

**Model Hierarchy**pane, expand the node corresponding to your model (**binaryLinkSolid**) and select**Model Workspace**.In the

**Model Workspace**pane, set the**Data source**parameter to`MATLAB File`

and browse for your`modelParams`

script. Click the**Reinitialize from Source**button to load variables defined in the script.

In the Extruded Solid block dialog box, click the

**Update Visualization**button, . The visualization pane refreshes with the final solid geometry.Click the

**Fit to View**button to scale the binary link to the size of the visualization pane. Click the**Toggle visibility of frames**button to show the solid reference frame. The reference frame origin coincides with the [0, 0] cross-section coordinate and lies halfway between the extrusion ends.Note the jagged appearance of the round ends and holes. This effect results from the small number of points used in the round portions of the coordinate matrix—

`csLeftEnd`

,`csRightEnd`

,`csLeftHole`

, and`csRightHole`

. Increase the number of elements in the angular span arrays to obtain a smoother geometry.