Action:
|
Unites two bodies by lofting between two faces with optional guide curves.
|
|
Filename:
|
skin/skin_scm/skin_scm.cxx
|
|
APIs:
|
api_loft_faces
|
|
Syntax:
|
(solid:loft-faces-guides
|
|
face0 [take-off-factor0=3.0]
|
|
face1 [take-off-factor1=3.0]
|
|
guides [options] | [ao])
|
|
Arg Types:
|
face0
|
face
|
|
take-off-factor0
|
real
|
|
face1
|
face
|
|
take-off-factor1
|
real
|
|
guides
|
list of guides
|
|
skin-options
|
skin_options
|
|
acis-opts
|
acis_options
|
|
Returns:
|
body
|
|
Description:
|
When a solid is lofted, the face provided as an argument is removed from the body. (This is one of the differences between lofting between solids and sheets.) Peripheral edges from the first face are used to skin the peripheral edges of the second face. The result is one body. However, this command does not conduct a self-intersect check on that body. (Refer to Limitations below.)
|
|
|
Lofting uses the surface information from the adjacent surfaces to determine take-off vectors. (Take-off vectors are pre-established and cannot be changed.) Skinning does not use take-off vectors.
|
|
|
When
ACIS makes a
BODY from a
FACE using
api_loft_faces, it creates a single-sided face body. A single-sided face body is really a solid, not a sheet (infinitely thin) body. When a face body is single-sided, basic solid modeling concepts (and
ACIS) consider the body to be a solid which extends from the back side of the face out to infinity with ill defined boundaries extending where the edges of the original face extend backward. The way in which the single-sided face body is used determines whether subsequent operations, such as Booleans, work properly.
|
|
|
face0 and
face1 are the input arguments that are removed during lofting.
|
|
|
take-off-factor0 and
take-off-factor1 is applied to the magnitude of the take-off vectors, and can be used to control the shape of the loft surface.
|
|
|
skin-options gives the different options available for skinning.
|
|
|
guides gives the list of guides.
|
|
|
The optional argument
arc-length specifies whether arc length (#f, default) or isoparameterization (#t) is used. In the case of isoparameterization, the parameterization of the surface follows the wireframe curves in a given body. In some cases, this may cause surface looping. Arc length parameterization, on the other hand, means the surface
SPAparameter follows the lines of constant length.
|
|
|
The optional argument
no-twist specifies whether the resulting surface permits twisting (#t, default) or no twisting (#f). Twisting is introduced when the start points of the wires are not aligned. For example, assume that the body-list contains two circular edges and the desired result is a cylindrical shaped loft surface. If the start parameters of the edge curves do not line up, the skinned surface contains a twist and is not cylindrical in shape, but rather is a cooling tower shape. This option, when #t, aligns the start points, therefore removing the twist of the surface.
|
|
|
The optional argument
align-directions specifies whether or not to line up the directions of the curves listed in the body-list. The default is #t, which means the directions of open and closed curves are changed to line up with the direction of the first curve in the body-list. When this option is #f, the wires are left in the directions that the user originally specified.
|
|
|
perpendicular toggles the direction of the take-off vectors from the coedge. The take-off vectors are in the skin direction of the loft or are perpendicular to the curve of the coedge. Also, when set to default, the take-off vectors from the defining coedge might intersect. If this occurs, the skinned surface is an invalid, self-intersecting surface. For this argument to work properly while set to #t, the perpendicular take-off vectors from the defining coedge cannot intersect.
|
|
|
The optional argument
simplify specifies whether or not to simplify the resulting surface geometry. The default is #t. For example, assume that the body-list contains two circular edges and that a cylindrical surface is to be created between the two edges. When this option is #t, the resulting surface geometry gets simplified into an analytical form of a cylindrical surface. If the option is #f, the resulting surface is a skinned surface with a cylindrical shape. Likewise, if this option is #t and all of the the body-list elements are in the same plane, the result is an analytical planar-surface bounded by the boundaries of the skinned surface. If this option is #f, the result is a planar skinned surface.
|
|
|
acis-opts contains versioning and journaling information.
|
|
Limitations:
|
Does not check for self-intersecting bodies. For perpendicular to work properly while set to #t, the perpendicular take-off vectors from the defining coedge cannot intersect.
|
|
Example:
|
; solid:loft-faces-guides
|
|
; Define the faces and guides
|
|
(wcs (position 0 0 0) (gvector 1 0 0)
|
|
|
|
|
|
|
|
(gvector 0 1 0))
|
|
;;#[entity 1 1]
|
|
(define wire1 (wire-body (list (edge:circular-3pt
|
|
|
(position 0 0 0) (position 5 2.5 0)
|
|
|
|
|
|
|
|
(position 10 0 0))
|
|
|
(edge:linear (position 10 0 0)
|
|
|
|
|
|
|
(position 10 -10 0))
|
|
|
(edge:linear (position 10 -10 0)
|
|
|
|
|
|
|
(position 0 -10 0))
|
|
|
(edge:linear (position 0 -10 0)
|
|
|
|
|
|
|
(position 0 0 0)))))
|
|
;;wire1
|
|
(sheet:planar-wire wire1)
|
|
;;#[entity 6 1]
|
|
(shell:sheet-thicken wire1 5)
|
|
;;#[entity 6 1]
|
|
(define guide (edge:spline (list (position 5 2.5 0)
|
|
|
|
(position 5 10 3.5) (position 5 20 2.5))
|
|
|
|
(gvector 0 1 0) (gvector 0 1 0)))
|
|
;;guide
|
|
(define body2 (solid:block (position 0 20 2.5)
|
|
|
|
|
|
|
|
|
(position 10 30 -2.5)))
|
|
;;body2
|
|
(define front_face1 (list-ref
|
|
|
|
|
|
|
(entity:faces wire1) 2))
|
|
;;front_face1
|
|
(define front_face2 (list-ref
|
|
|
|
|
|
|
(entity:faces body2) 2))
|
|
;;front_face2
|
|
;Apply lofting with the guides
|
|
(define final_body (solid:loft-faces-guides
|
|
|
|
front_face1 front_face2 (list guide)))
|
|
;;final_body
|