struct PK_BODY_loft_face_clamp_s
{
int n_faces; --- number of clamping faces and clamped
--- edges (0)
const PK_FACE_t *faces; --- array of clamping faces (NULL)
const PK_EDGE_t *edges; --- array of clamped edges (NULL)
int n_magnitudes;--- number of magnitudes for scaling loft
--- derivatives at clamped vertices (0)
const double *magnitudes; --- array of magnitudes for scaling loft
--- derivatives at clamped vertices (NULL)
int n_vertices; --- number of vertices with scaling (0)
const PK_VERTEX_t *vertices; --- array of vertices with scaling (NULL)
};
typedef struct PK_BODY_loft_face_clamp_s PK_BODY_loft_face_clamp_t;
This structure contains two pairs of parallel arrays. The first pair hold
the clamping faces and the edges where face clamps are to be applied. The
second pair hold scaling factor magnitudes and the vertices where loft
derivatives are scaled relative to the default values.
Across all entries of edges, the loft derivatives are determined such
that the tangent planes of the loft there are matched with those of the
corresponding faces. A default value for the derivative magnitude of the
loft derivative is internally determined for every clamped profile or guide
vertex. Magnitude control is achievable through the use of vertex and magnitude
pair. The actual magnitude of the loft derivative at any vertex specified
in vertices is the product of the supplied relative magnitude of the
vertex specified as a corresponding entry of magnitudes and the default
magnitude value there.
Edges of the profile or guide that are not given in edges are not clamped.
The face clamp structure has the following fields :
n_faces The number of faces held in the structure. This must be
equal to or less than the number of edges on the profile or
guide.
faces An array of faces, one for each clamped edge of the
profile or guide. The faces may belong to different bodies.
The faces must be ordered to correspond with the entries
of edges.
edges An array of edges where loft derivatives are clamped by
corresponding entries of faces.
Note that for backwards compatibility purposes, edges may
be set to NULL in some cases, which has the same effect as
making it the collection of all edges of the profile
ordered around the body starting at the edge whose start
vertex is the profile's start vertex.
The start vertex will be understood to be the first
vertex on an open profile, and the specified start
vertex on a closed profile.
If some edges are to be left unclamped, or in the case of a
guide wire, edges may not be set to NULL.
n_magnitudes The number of magnitudes for scaling loft derivatives
at vertices specified in vertices.
magnitudes An optional array of doubles, one for each vertex entry
in vertices or a single scalar "constant" as scaling
factor for the loft derivative at the vertex relative
to an internally determined default value. Setting this
field to NULL has the same effect as having unity for all
individual components of the magnitudes array. This
field can be set to NULL only if vertices is also set
to NULL.
When clamping a profile, if there are guide wires specified
for the loft, the loft derivative along any guide wire is
completely determined. The entries in magnitudes field
for those vertices of the profile that have matches on
guide wires must be set to unity to ensure the use of the
default values.
Similarly, when clamping a guide wire, the entries in
magnitudes for those vertices of the guide that have
matches on profiles must be set to unity.
Magnitudes may only be specified for vertices on an edge
which has been face clamped.
n_vertices The number of vertices with clamp magnitude control.
vertices An optional array of vertices where the loft derivatives
are multiplied by corresponding entries in magnitudes.
This field should be set to NULL if magnitudes is NULL.
For backwards compatibility purposes, this field may in
some cases be set to NULL when magnitudes is not NULL,
which has the same effect as making it the collection of
all vertices of the profile ordered around the body
starting at the start vertex.
In the case of a guide wire, or if some edges are to
be left unclamped, then vertices should be explicitly
set.