|
Action:
|
Creates a sheet body that interpolates a series of wires.
|
|
|
Filename:
|
skin/skin_scm/skin_scm.cxx
|
|
|
APIs:
|
api_skin_wires
|
|
|
Syntax:
|
(sheet:skin-wires body-list [path] [[skin-options] |
|
|
|
[arc-length=#f
|
|
|
[no-twist=#t [align=#t
|
|
|
[simplify=#t [closed=#f
|
|
|
[solid=#t [periodic=#f]]]]]]]])
|
|
|
Arg Types:
|
body-list
|
wire-body | (wire-body ...)
|
|
path
|
wire-body
|
|
skin-options
|
skin_options
|
|
arc-length
|
boolean
|
|
no-twist
|
boolean
|
|
align
|
boolean
|
|
simplify
|
boolean
|
|
closed
|
boolean
|
|
solid
|
boolean
|
|
periodic
|
boolean
|
|
|
Returns:
|
body
|
|
|
Description:
|
The given wires define the cross-sections to be interpolated by the resulting sheet body. There must be at least two wire bodies. The wire bodies are assumed to be simple, meaning only the first wire of each body is used for skinning. The wires can be open or closed. The wires are copies, i.e., the originals remain. The wires can share end points and do not have to be C1 continuous tangent.
|
|
|
The optional argument
path
surface at each of the skinning profiles. The path defines a curve that is intersected with the plane of each profile. At each of the resulting intersection points on the curve the tangent vector is calculated and applied to the surface as a constraint at that profile.
|
|
|
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 parameter 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 specifies whether or not to line up the directions of the curves listed in the
body-list. The default is
#t, which means that the direction 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 direction that the user originally specified.
|
|
|
The optional argument
simplify specifies whether or not to simplify the resulting surface geometry. The default is
#t, which means not to simplify. 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.
|
|
|
The
closed option (#f by default) may be used when a closed body in V is needed (closed in the skinning direction). In order to create this type of closure at least three profiles are required. If the periodic option is true (#f by default) the body is closed and periodic in the V direction. A closed body (in V) is constructed only when all of the wires supplied are closed (in U).
|
|
|
The
solid option may be used when a solid body is needed but a closed body is not desired. When this option is used, the end wires are capped with planar faces (#t, by default).
|
|
|
The
periodic option may be used when three or more wires are supplied as input to obtain a skin body that is periodic in v. This option may not be used with laws or surface constraints.
|
|
|
body-list is a list of wire bodies.
|
|
|
skin-options gives the different options for skinning.
|
|
|
Example:
|
; sheet:skin-wires
|
|
; Create a wire body 1 from a circular edge.
|
|
; Set v and u parameters.
|
|
(option:set "v_par" 5)
|
|
;; -1
|
|
(option:set "u_par" 5)
|
|
;; -1
|
|
(define wire-body1
|
|
|
(wire-body (edge:circular (position 0 0 40)
|
|
|
40 0 270)))
|
|
;; wire-body1
|
|
; Create a wire body 2 from a circular edge 2
|
|
(define wire-body2
|
|
|
(wire-body (edge:circular (position 0 0 0)
|
|
|
40 0 270)))
|
|
;; wire-body2
|
|
; Create a wire body 3 from a circular edge 3.
|
|
(define wire-body3
|
|
|
(wire-body (edge:circular (position 20 0 -10)
|
|
|
40 0 270)))
|
|
;; wire-body3
|
|
; OUTPUT Original
|
|
|
; Make a sheet body by skinning wires.
|
|
(define sheet1
|
|
|
(sheet:skin-wires (list wire-body1
|
|
|
wire-body2 wire-body3) "solid" #f))
|
|
;; sheet1
|
|
; OUTPUT Result
|
|
|
|
|
|
Figure 2-6. sheet:skin-wires
|
|
|
; Additional Example
|
|
; Create edge 1.
|
|
(part:clear)
|
|
;; #t
|
|
(define edge1 (edge:linear (position -20 -10 0)
|
|
|
(position 10 -10 0)))
|
|
;; edge1
|
|
; Create edge 2.
|
|
(define edge2 (edge:circular
|
|
|
(position 10 0 0) 10 270 360))
|
|
;; edge2
|
|
; Create edge 3.
|
|
(define edge3 (edge:linear
|
|
|
(position 20 0 0) (position 20 20 0)))
|
|
;; edge3
|
|
; Create edge 4.
|
|
(define edge4 (edge:linear
|
|
|
(position 20 20 0) (position -10 20 0)))
|
|
;; edge4
|
|
; Create edge 5.
|
|
(define edge5 (edge:circular
|
|
|
(position -10 10 0) 10 90 180))
|
|
;; edge5
|
|
; Create edge 6.
|
|
(define edge6 (edge:linear
|
|
|
(position -20 10 0) (position -20 -10 0)))
|
|
;; edge6
|
|
; Create a wire-body from the edges.
|
|
(define wirebody1 (wire-body (list
|
|
|
edge1 edge2 edge3
|
|
|
edge4 edge5 edge6)))
|
|
;; wirebody1
|
|
(define new-edge (edge:circular (position 0 0 10)
|
|
|
15 0 360))
|
|
;; new-edge
|
|
; OUTPUT Original
|
|
|
(define wirebody2 (wire-body (list
|
|
|
new-edge)))
|
|
;; wirebody2
|
|
(option:set "sil" #f)
|
|
;; #t
|
|
(option:set "u_par" 2)
|
|
;; 5
|
|
(option:set "v_par" 4)
|
|
;; 5
|
|
; Create a roll name state.
|
|
(roll:name-state "before")
|
|
;; "before"
|
|
; Skin a surface between these two wire bodies
|
|
; permitting twist and alignment
|
|
; without twist minimization.
|
|
(define skin1 (sheet:skin-wires
|
|
|
(list wirebody1 wirebody2) #f #f #t #f))
|
|
;; skin1
|
|
; OUTPUT Surface with twist
|
|
|
; Roll back before the skinning.
|
|
(roll "before")
|
|
;; 1
|
|
(view:refresh)
|
|
;; #[view 239847912]
|
|
; With twist minimization
|
|
(define skin1 (sheet:skin-wires
|
|
|
(list wirebody1 wirebody2) #f #t #t #f))
|
|
;; skin1
|
|
; OUTPUT Surface without twist
|
|
|
|
|
|
|
|
|
Figure 2-7. sheet:skin-wires without and with Twist Minimization
|