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.