Files
LaGriT/documentation/lagrit_manual/commands/extrude.txt
2025-12-17 11:00:57 +08:00

179 lines
7.2 KiB
Plaintext
Executable File

.. _extrude:
> &nbsp_place_holder;
>
> **_EXTRUDE_**
> > This command takes a topologically 1d or 2d mesh (a line, a set of line
segments, or a planar or non-planar surface) and extrudes it into three
dimensions along either the normal to the curve or surface (default), along a
user defined vector, or to a set of points that the user has specified.
> > If the extrusion was along the normal of the surface or along a user
defined vector, the command can optionally find the external surface of the
volume created and return that to the user.
>
> FORMAT:
>
>> **extrude**/mesh1/mesh2/**const|min**/offset/**volume|bubble**/[**norm**|x1
,y1,z1]
> > OR
> > **extrude**/mesh1/mesh2/**interp**/layers/**range1/range2**
> > where** range1 **and** range2 **are defined as
**[pset,get,**`pset_name`**|**`ifirst,ilast,istride`**]**
>
> mesh1 is the name of the resulting mesh.
>
> mesh2 is the name of the initial mesh. This mesh must be made up of **lines,
tris, quads, or hybrids**.
>
> **const** is a keyword that indicates that the distance from each of the
points in the initial mesh along the extruding vector will be equal to
offset.Therefore, if you wanted the extruded mesh to have the same surface or
edge characteristics as the original mesh on both the initial and newly formed
surface or edge, you would use **const**.
>
> **min** is a keyword and indicates that the minimum distance along the
extruding vector to a reference plane that is perpendicular to the extruding
vector will be equal to offset. This means that if you want an extruded mesh
with at least one flat side, you would use **min**. This also means that if
you use **min**, extrude computes the "bottom point" on the initial mesh, or
the point closest to the reference plane, and then extrudes that point by min,
all the other points will therefore be extruded by a larger distance. This
avoids the problem of having the initial mesh intersect the reference plane
that forms the "bottom" of the created mesh.
>
> **interp** is a keyword and indicates a different kind of extrusion. Instead
of giving the initial mesh a direction in which to be extruded, this keyword
specifies that the initial mesh is made up of two sets of points to be
connected. These point sets are defined by **range1** and **range2**. The
ranges can be defined using the standard LaGriT techniques of **pset**,
**get**, <pset name> or ifirst, ilast, istride.
>
> layers is the number of layers of elements that will be placed between the
original two surfaces. This is a good point distribution technique. The final
number of layers of points will be equal to layers+1. It must be an integer.
>
> offset is the length of extrusion. It can either be an integer or a real.
>
> **volume** is a keyword and indicates that the volume that was extruded is
to be returned to the user (i.e., the operation will result in either a
topologically 2d (quad) mesh if the initial mesh was topologically 1d, or a
topologically 3d (prism or hex) mesh if the initial mesh was topologically
2d). **bubble** is a keyword and indicates that the external surface of the
volume created will be returned. If bubble is used, hextotet will be called on
the final surface, as well as extract.
>
> The final argument is optional. It must either be the keyword **norm**, or a
three valued vector (in cartesian space) specifying a direction. The default,
if no argument is provided, is **norm**. If **norm** is chosen, the element
area weighted normal to the surface or curve is computed, and the initial mesh
is extruded in that direction. Otherwise, if a vector value is specified, the
vector is normalized, and its direction used to extrude the initial mesh.
>
> NOTES:
>
>> This code works on meshes containing lines, quads, triangles, or hybrid
polygons. If there are lines in the initial mesh, they become quads; tris
become prisms; and quads become hexes. If bubble is used, however, lines are
not permitted because they do not result in a mesh that extract and hextotet
agree with. The code will error out in this situation.
> > It is very possible to create an invalid mesh object with this command,
especially if the initial mesh is a multivalued surface, or if the extruding
vector is in a direction parallel to the plane the initial surface is in. You
have been warned.
> > If the **interp** keyword is used, the code expects the number of points
in **range1** and **range2** to be equal, and to correspond such that the
first point in **range1** will connect to the first point in **range2 **in the
final mesh object, etc. Other setups will result in a twisted, perhaps invalid
mesh object.
>
> EXAMPLES:
>
>> **extrude**/cmo_hex/cmo_quad/**const**/5.0/**volume**
> > This would result in hexes being created out of the initial quad sheet.
First, since **const** and **volume** are used, the quad sheet will be
extruded a constant amount from each point. Second, since the extruding vector
and **norm** are omitted, the extrusion will occur on the average normal to
the plane. Therefore, this command will result in a mesh of hexahedrons
extruded 5.0 units in an orthogonal direction. (Or, more succinctly, a mesh of
parallelopipeds of height 5.)
> > **extrude**/cmo_prism/cmo_tri/**min**/10/**volume**/1,2,-1
> > This command would result in prisms being created out of the initial tri
sheet. First, since **min** is used, the "bottom" of the extruded volume would
be a plane. Second, because the vector 1, 2, -1 is specified, the extrusion
will be in that direction (again the magnitude is not important, the vector is
normalized to a unit vector), not in the direction of the average normal.
> > **extrude**/cmo_bigbox/cmo_quad/**const**/5.0/**bubble/**
> > This would result in a surface surrounding an amalgamation of
parallelopipeds created from the initial quad sheet. First, since **const** is
used the quads will be extruded a constant amount from each point in the quad
sheet. Second, since the extruding vector and **norm** are omitted, the
extrusion will occur on the average normal to the plane. Therefore, this
command will result in a mesh of tris that form the surface of a group of
parallelopipeds extruded 5.0 units in an orthogonal direction.
> > **extrude**/cmo_arbshape/cmo_tri/**min**/7.5/**bubble**/3,-2.5,-6
> > This command would result in a mesh of tris that form a surface enclosing
a volume of prisms being created out of the initial tri sheet. First, since
**min** is used, the "bottom" of the surface would be a plane. Second, because
the vector 3, -2.5, -6 is specified, the extrusion will be in that direction
(again the magnitude is not important, the vector is normalized to a unit
vector), not in the direction of the average normal of the initial tri
surface.
> > **extrude**/cmo_prism/cmo_tris/**interp**/14/**pset, get, **bottom**/pset,
get, **top
> > This command would result in a mesh of prisms being created out of the two
sets of tri sheets in cmo_tris as well as 14-1 layers of additional tris that
would be interpolated. First, since interp is used, the pset defined by bottom
would end up connected to the pset defined by top. Second, there would be 14
layers of elements that would be placed between the psets top and bottom, so
that the resulting grid would have 15 layers of points that would be connected
to one another to form prisms.