sheet:skin-wires-branch
List of: Scheme Extensions
Subjects: Skinning and Lofting
Contents: Advanced Surfacing

Action: Creates a sheet body that interpolates multiple series of two or more wires.

Filename: skin/skin_scm/skin_scm.cxx

APIs: api_skin_wires

Syntax: (sheet:skin-wires-branch trunk-list branch-list


[skin-options] [normal-type] [arc-length=#f


[no-twist=#t [align=#t


[simplify=#t [solid=#t [acis-opts]]]]]])



Arg Types: trunk-list wire-body | (wire-body...)

branch-list wire-body | (wire-body...)

skin-options skin_options

normal-type string

arc-length boolean

no-twist boolean

align-directions boolean

simplify boolean

solid boolean

acis-opts acis-options

Returns: body

Description: The given wires define the cross-sections to be interpolated by the resulting sheet body. Unlike regular skinning, however; multiple body lists can be given.


trunk-list is a list of wire bodies that are arranged in the form of a trunk.


branch-list is a list of wire bodies that are arranged in the form of a branch.


normal-type has four values, "first_normal", "last_normal", "ends_normal" and "all_normal". These values specify which profiles the normal constraint should be applied to. In the case of "first_normal" the constraint is only applied to the first profile. Other values, follow similarly.


Unlike regular skinning, the order of the wire-bodies in the lists are important. The branches attach to the last body in the trunk. In addition, the first bodies in the branch list are the ends in which they attach to the trunk.


Optional 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 parameter follows the lines of constant length.


Optional 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, thereby removing the twist of the surface.


Optional align 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 originally specified by the user.


Optional 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.


Optional solid option may be used when a solid body is needed. When this option is used, the end wires are capped with planar faces (#t, by default).


The acis-opts, which contain versioning and journaling parameters, must be the last argument, if stated.

Limitations: A minimum of one wire branch is required.

Example: ; sheet:skin-wires-branch

; Create four wire bodies to illustrate command.

(define wire1 (wire-body (list (edge:circular


(position 0 0 70) 30 0 360))))

;; wire1

(define wire2 (wire-body (list (edge:circular


(position 0 0 0) 30 0 360))))

;; wire2

(define wire3 (wire-body (list (edge:circular


(position -50 0 -100) 30 180 (+ 180 360)))))

;; wire3

(define wire4 (wire-body (list (edge:circular


(position 50 0 -100) 30 0 360))))

;; wire4

; Create the branched body.

(define zoom (zoom-all))

;; zoom

(define refresh (refresh-all))

;; refresh

; OUTPUT Original


(define body (sheet:skin-wires-branch


(list wire1 wire2) (list wire3) (list wire4)))

;; body

; OUTPUT Result

(define blend (solid:blend-edges


(list-ref (entity:edges body) 6) 5))

;; blend

(define thicken (shell:sheet-thicken body -2))

;; thicken



Figure 2-8. sheet:skin-wires-branch
PDF/SKIN/02SCA.PDF
HTM/DATA/SKIN/SKIN/02SCA/0008.HTM