Scheme Extensions Sl thru Sli

 

 

Technical Article


Scheme is a public domain programming language, based on the LISP language, that uses an interpreter to run commands. ACIS provides extensions (written in C++) to the native Scheme language that can be used by an application to interact with ACIS through its Scheme Interpreter. The C++ source files for ACIS Scheme extensions are provided with the product. Spatials Scheme based demonstration application, Scheme ACIS Interface Driver Extension (Scheme AIDE), also uses these Scheme extensions and the Scheme Interpreter.

slinterface:add-vertex

Action
Adds a vertex in the middle of the selected coedge.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_add_vertex_sli

Syntax
(slinterface:remove-vertex interface coedge [acis-opts])

Arg Types
interface SLInterface
coedge coedge
acis-opts acis-options

Returns
boolean

Description
Adds a vertex on the middle of the selected coedge of an intermediate skinning or lofting wire. The new vertex is added in the corresponding coedge of every section to be lofted.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations. 

coedge is the selected coedge of an intermediate skinning or lofting wire.

acis-opts contains versioning and journaling information.
; slinterface:add-vertex
; Build all the necessary geometry for the sweeper
(part:clear)
(define Frame1 (wcs (position 0 0 0)
    (gvector 1 0 0) (gvector 0 1 0)))
;; Frame1
(entity:set-color Frame1 1)
;; ()
(define Frame2 (wcs (position 0 0 0)
    (gvector 1 0 0) (gvector 0 0 1)))
;; Frame2
(wcs:set-active Frame2)
;; ()
(entity:set-color Frame2 1)
;; ()
(define wire_5
    (wire-body (list (edge:circular
    (position 50 50 60)  20 0 360))))
;; wire_5
(define wire_6
    (wire-body (list (edge:circular
    (position 50 50 90)  20 0 360))))
;; wire_6
(wcs:set-active Frame1)
;; ()
(define wire_1 (wire-body (list
    (edge:linear (position -20 30 0)
    (position 120 30 0))
    (edge:linear (position 120 30 0)
    (position 120 20 0))
    (edge:linear (position 120 20 0)
    (position -20 20 0))
    (edge:linear (position -20 20 0)
    (position -20 30 0)))))
;; wire_1
(define dom1 (law "domain(vec(0, 0, 1), 0, 140)"))
;; dom1
(define dom2 (law "domain(vec(0, 0, 1), 0, 10)"))
;; dom2
(define dom3 (law "domain(vec(0, 0, 1), 0, 140)"))
;; dom3
(define dom4 (law "domain(vec(0, 0, 1), 0, 10)"))
;; dom4
(define laws1 (list dom1 dom2 dom3 dom4))
;; laws1
(define wire_2 (wire-body (list
    (edge:linear (position 10 30 30)
    (position 90 30 30))
    (edge:linear (position 90 30 30)
    (position 90 20 30))
    (edge:linear (position 90 20 30)
    (position 10 20 30))
    (edge:linear (position 10 20 30)
    (position 10 30 30)))))
;; wire_2
(define dom1 (law "domain(vec(0, 0, 1), 0, 80)"))
;; dom1
(define dom2 (law "domain(vec(0, 0, 1), 0, 10)"))
;; dom2
(define dom3 (law "domain(vec(0, 0, 1), 0, 80)"))
;; dom3
(define dom4 (law "domain(vec(0, 0, 1), 0, 10)"))
;; dom4
(define laws2 (list dom1 dom2 dom3 dom4))
;; laws2
(define wire_3 (wire-body (list
    (edge:linear (position 20 20 50)
    (position 80 20 50))
    (edge:linear (position 80 20 50)
    (position 80 13 43))
    (edge:linear (position 80 13 43)
    (position 20 13 43))
    (edge:linear (position 20 13 43)
    (position 20 20 50)))))
;; wire_3
(define dom1
    (law "domain(vec (0, -0.7, 0.7), 0, 40)"))
;; dom1
(define dom2
    (law "domain(vec (0, -0.7, 0.7), 0, 10)"))
;; dom2
(define dom3
    (law "domain(vec (0, -0.7, 0.7), 0, 40)"))
;; dom3
(define dom4
    (law "domain(vec (0, -0.7, 0.7), 0, 10)"))
;; dom4
(define laws3 (list dom1 dom2 dom3 dom4))
;; laws3
(define coedges1 (entity:coedges wire_1))
;; coedges1
(define coedges2 (entity:coedges wire_2))
;; coedges2
(define coedges3 (entity:coedges wire_3))
;; coedges3
(define coedges5 (entity:coedges wire_5))
;; coedges5
(define coedges6 (entity:coedges wire_6))
;; coedges6
(define section1 (section coedges1 laws1 #f 100))
;; section1
(define section2 (section coedges2 laws2 #f 50))
;; section2
(define section3 (section coedges3))
;; section3
(define section5 (section coedges5))
;; section5
(define section6 (section coedges6))
;; section6
(iso)
;; #[view 66764]
(zoom-all)
;; #[view 66764]
(render:rebuild)
;; ()
(define ao (acisoptions:set "journal"
    (acis_journal:set "file" "modifyvertex")))
;; ao
(acis_journal:start ao)
;; #t
; Start the lofting step
(define Sect (list section1 section2 section3
    section5 section6))
;; Sect
(define Interface (slinterface:lofting
    Sect #f #t #t #f #f #f #f ao))
;; Interface
(define tempWires (slinterface:wires Interface))
;; tempWires
(entity:set-color tempWires 1)
;; ()
; Align, breakup and minimize the temporary
; lofting wires
(slinterface:align-wires Interface ao)
;; #t
(slinterface:minimizetwist-wires Interface ao)
;; #t
(slinterface:breakup-wires Interface ao)
;; #t
; Spend some time looking at the edges
(define previewEdges
    (slinterface:build-edges Interface))
;; previewEdges
; Delete the edges
(entity:delete previewEdges)
;; ()
; Add some vertices around
(slinterface:add-vertex Interface
    (list-ref (entity:coedges
    (list-ref tempWires 0))1))
;; #t
(render:rebuild)
;; ()
(define previewEdges
    (slinterface:build-edges Interface ao))
;; previewEdges
(entity:delete previewEdges)
;; ()
; Remove the added vertices
(slinterface:remove-vertex Interface
    (list-ref tempWires 0) (position 120 25 0))
;; #t
(render:rebuild)
;; ()
(define previewEdges
    (slinterface:build-edges Interface ao))
;; previewEdges
(entity:delete previewEdges)
;; ()
; We like them now, so build the body
(define body (slinterface:build-body Interface))
;; body
(slinterface:delete-interface Interface)
;; #t

[Top]


slinterface:align-wires

Action
Aligns the temporary skinning or lofting profiles.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_align_wires_sli

Syntax
(slinterface:align-wires interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
boolean

Description
Aligns the direction normals of the temporary skinning or lofting profiles.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:align-wires
; Build the wire bodies to be skinned.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Build the body and delete the interface.
(define myBody (slinterface:build-body myInterface))
;; myBody
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model.
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:breakup-wires

Action
Breaks up each of the temporary lofting/skinning profiles such they have an equal amount of coedges.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_breakup_wires_sli

Syntax
(slinterface:breakup-wires interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
boolean

Description
Breaks up each of the temporary lofting/skinning profiles such they have an equal amount of coedges. The breakup is done based on the notion of matching normals of vertices and the construction of extreme points.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:breakup-wires
; Build the wire bodies to be skinned.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Build the body and delete the interface.
(define myBody (slinterface:build-body myInterface))
;; myBody
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model.
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:build-body

Action
Builds the lofting/skinning body.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_build_body_sli

Syntax
(slinterface:build-body interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
body

Description
Builds the lofting/skinning body. It should be called after the temporary lofting/skinning profiles have been aligned, twist minimized, broken up and the guide and mapping curves have been added. It returns a body, however the user may roll back and make any changes desired to the previous steps and build the body again.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:build-body
; Build the wire bodies to be skinned.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Build the body and delete the interface.
(define myBody (slinterface:build-body myInterface))
;; myBody
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model.
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:build-edges

Action
Builds a list of edges that represent an approximation of the surface extents that would exist if the profiles were to be lofted/skinned.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_build_edges_sli

Syntax
(slinterface:build-edges interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
(edge ...)

Description
Builds a list of edges that represent an approximation of the surface extents that would exist if the profiles were to be lofted or skinned. The ownership of the edges belongs to the caller and is his responsibility to delete.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:build-edges
; Build the wires.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist, and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Show the edges that represent an approximation of
; the surface extents.
(define myEdges
    (slinterface:build-edges myInterface))
;; myEdges
; Delete the edges when done viewing.
(define delete (entity:delete myEdges))
;; delete
; Delete the interface.
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model.
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:build-faces

Action
Builds a list of faces that represent an approximation of the faces that would exist if the profiles were to be lofted/skinned.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_build_faces_sli

Syntax
(slinterface:build-faces interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
(face ...)

Description
Builds a list of faces that represent an approximation of the face that would exist if the profiles were to be lofted or skinned. The ownership of the faces belongs to the caller and is his responsibility to delete.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts  contains versioning and journaling information.
; slinterface:build-faces
; Build the wire bodies to be skinned.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Show the edges that represent an approximation
; of the surface extents.
(define myFaces
    (slinterface:build-faces myInterface))
;; myFaces
; Delete the faces when done viewing.
(entity:delete myFaces)
;; ()
; Delete the interface.
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model.
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:clear-guide-curves

Action
Clears the guide curves from the interactive interface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_clear_guide_curves_sli

Syntax
(slinterface:clear-guide-curves interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
boolean

Description
Clears all the guide curves from the interactive interface.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:clear-guide-curves
; define the profiles:
(define wire1 (wire-body (list
    (edge:linear (position -60 0 0)
    (position 60 0 0))
    (edge:linear (position 60 0 0)
    (position 60 50 0))
    (edge:linear (position 60 50 0)
    (position -60 50 0))
    (edge:linear (position -60 50 0)
    (position -60 0 0)))))
;; wire1
(define wire2 (wire-body (list (edge:linear
    (position -30 0 100) (position 30 0 100))
    (edge:linear (position 30 0 100)
    (position 30 40 100))
    (edge:linear (position 30 40 100)
    (position -30 40 100))
    (edge:linear (position -30 40 100)
    (position -30 0 100)))))
;; wire2
(define wire3 (wire-body (list
    (edge:circular (position 0 -85 150) 25 0 360))))
;; wire3
(define guide1 (edge:spline (list (position 0 0 0)
    (position 0 20 50) (position 0 0 100)
    (position 0 -20 160) (position 0 -50 160)
    (position 0 -60 150))))
;; guide1
(iso)
;; #[view 655944]
(zoom-all)
;; #[view 1180214]
(render:rebuild)
;; ()
; interface:
(define interface (slinterface:skinning
    (list wire1 wire2 wire3) virtualGuides #t ))
;; interface
(slinterface:align-wires interface)
;; #t
(slinterface:minimizetwist-wires interface)
;; #t
(slinterface:breakup-wires interface)
;; #t
(slinterface:skin-guide interface guide1)
;; #t
; display the guide curves:
(define virtual_guides
    (slinterface:show-guide-curves interface))
;; virtual_guides
(entity:set-color virtual_guides 1)
;; ()
(slinterface:clear-guide-curves interface)
;; #t

[Top]


slinterface:clear-mapping-curves

Action
Removes all the mapping curves from the skinning/lofting interface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_clear_mapping_curves_sli

Syntax
(slinterface:clear-mapping-curves interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
boolean

Description
Removes all the mapping curves from the skinning/lofting interface. However, if the mapping curves are removed after the breakup API has been called the resulting vertices from the breakup remain. The user must roll back the breakup step in order to have the temporary wires in the state before the mapping curves.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:clear-mapping-curves
; Build the wire bodies.
(define w1 (wire-body:points (list
    (position 0 0 0) (position 0 2 0)
    (position 1 3 0) (position 3 3 0)
    (position 4 2 0) (position 4 0 0)
    (position 0 0 0))))
;; w1
(define w2 (wire-body:points (list
    (position 0 0 10) (position 0 3 10)
    (position 4 3 10) (position 4 0 10)
    (position 0 0 10))))
;; w2
; Get the coedges off the wire.
(define coedges1 (entity:coedges w1))
;; coedges1
(define coedges2 (entity:coedges w2))
;; coedges2
; Make sections from the coedges.
(define section1 (section coedges1 #f 1))
;; section1
(define section2 (section coedges2 #t 1))
;; section2
(define mySect (list section1 section2))
;; mySect
; Make the lofting interface.
(define myInterface
    (slinterface:lofting mySect))
;; myInterface
(define loftingWires (slinterface:wires myInterface))
;; loftingWires
; Align and minimize twist.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
; Make two mapping curves.
(define positionList
    (list (position 1 3 0) (position 0 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
(define positionList
    (list (position 3 3 0) (position 4 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
; Breakup the wires based on the new mapping curves.
(slinterface:breakup-wires myInterface)
;; #t
; Show the mapping curves.
(define myCurves
    (slinterface:show-mapping-curves myInterface))
;; myCurves
; Delete the curves.
(entity:delete myCurves)
;; ()
; Remove the mapping curves from the interface.
(slinterface:clear-mapping-curves myInterface)
;; #t
; Show the mapping curves; they should be gone.
(define myCurves
    (slinterface:show-mapping-curves myInterface))
;; myCurves
; Delete the interface.
(slinterface:delete-interface myInterface)
;; #t

[Top]


slinterface:collapse-wires

Action
Deletes a degenerate coedge in each wire of a list of wires.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_collapse_wires_sli

Syntax
(slinterface:collapse-wires interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
(edge ...)

Description
This function will remove a degenerate coedge in each wire of a list of wires. In order for the coedges to be removed, each wire in the list must  contain a degenerate coedge at the same position. That is, if the fifth  coedge of wire one is degenerate, it and the other coedges will only be removed if the fifth coedge of every other wire is degenerate as well.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:collapse-wires
; Example not available for this release.

[Top]


slinterface:debug

Action
Displays the current information for the defined slinterface entity.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
None

Syntax
(slinterface:debug interface)

Arg Types
interface SLInterface

Returns
boolean
Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.
; slinterface:debug
; Build the wire bodies.
(define w1 (wire-body:points (list
    (position 0 0 0) (position 0 2 0)
    (position 1 3 0) (position 3 3 0)
    (position 4 2 0) (position 4 0 0)
    (position 0 0 0))))
;; w1
(define w2 (wire-body:points (list
    (position 0 0 10) (position 0 3 10)
    (position 4 3 10) (position 4 0 10)
    (position 0 0 10))))
;; w2
; Get the coedges off the wire.
(define coedges1 (entity:coedges w1))
;; coedges1
(define coedges2 (entity:coedges w2))
;; coedges2
; Make sections from the coedges.
(define section1 (section coedges1 #f 1))
;; section1
(define section2 (section coedges2 #t 1))
;; section2
(define mySect (list section1 section2))
;; mySect
; Make the lofting interface.
(define myInterface
    (slinterface:lofting mySect))
;; myInterface
(define loftingWires (slinterface:wires myInterface))
;; loftingWires
; Use the debug command to display/list general
; information about the entity.
(slinterface:debug myInterface)
; Lofting interface:
;   number of wires: 2
;   wires:
;      (entity 16) (entity 17)
;   lofting options:
;   arc_length = #f
;   noTwist = #t
;   align = #t
;   simplify = #t
;   perpendicular = #t
;   solid = #t
;   closed = #f
; mapping curves:
;; #t

[Top]


slinterface:delete-interface

Action
Deletes the skinning/lofting interface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_delete_sli

Syntax
(slinterface:delete-interface interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
boolean

Description
Deletes the skinning/lofting interface. In addition to the deletion of the interface the temporary skinning/lofting profiles are deleted as well.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.
 
acis-opts contains versioning and journaling information.
; slinterface:delete-interface
; Build the wire bodies to be skinned.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Build the body and delete the interface.
(define myBody (slinterface:build-body myInterface))
;; myBody
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model.
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:face-lofting

Action
Creates a lofting interface structure when lofting from faces.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_create_li

Syntax
(slinterface:face-lofting face0
    [take-off-factor0=3.0] face1
    [take-off-factor1=3.0] [skin-options] [acis-opts])

Arg Types
face0 face
take-off-factor0 real
face1 face
take-off-factor1 real
skin-options skin_options
acis-opts acis-options

Returns
SLInterface

Description
Creates a lofting interface data structure when lofting from faces. The data structure, SLInterface, is used as input to the additional APIs each performing some stage of the lofting operation.

When a solid is lofted, the face provided as an argument is removed from the body. (Which is one of the differences between lofting between solids and sheets.) Peripheral edges from the first face are used to skin to the peripheral edges of the second face. The result is one body. However, command does not conduct a self-intersect check on that body.

Lofting uses the surface information from the adjacent surfaces to determine 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. Depending on how the single-sided face body is used determines whether subsequent operations, such as Booleans, work properly.

Arguments
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. For a complete list of skinning options, refer to the skin:options documentation.

The acis-opts, which contain versioning and journaling parameters, must be the last argument, if stated.
; slinterface:face-lofting
; Example not available for this release.

[Top]


slinterface:get-tanfac-scale

Action
Returns a list of two or four numbers that reflect tangent factor scale and curvature radius information.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_estimate_tangent_factor_scale_li

Syntax
(slinterface:get-tanfac-scale interface
    need-optimal [acis-opts])

Arg Types
interface SLInterface
need-optimal boolean
acis-opts acis-options

Returns
((integer . real) | (integer . integer . integer . real))

Description
This extension returns a list of doubles as noted below. When need-optimal is #t, this extension returns four numbers that reflect the minimum bound of tangent factor scale, the upper bound of tangent factor scale, the optimum tangent factor scale, and the minimum radius of curvature. When need-optimal is #f, this extension returns only the minimum and upper bounds of tangent factor scale.

Arguments
interface is is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

need-optimal returns the minimum and upper bounds of tangent factor scale.

The acis-opts, which contain versioning and journaling parameters, must be the last argument, if stated.
; slinterface:get-tanfac-scale
; Build the wire bodies.
(define w1 (wire-body:points (list
    (position 0 0 0) (position 0 2 0)
    (position 1 3 0) (position 3 3 0)
    (position 4 2 0) (position 4 0 0)
    (position 0 0 0))))
;; w1
(define w2 (wire-body:points (list
    (position 0 0 10) (position 0 3 10)
    (position 4 3 10) (position 4 0 10)
    (positio
(define coedges2 (entity:coedges w2))
;; coedges2
; Make sections from the coedges.
(define section1 (section coedges1 #f 1))
;; section1
(define section2 (section coedges2 #t 1))
;; section2
(define mySect (list section1 section2))
;; mySect
; Make the lofting interface.
(define myInterface
    (slinterface:lofting mySect))
;; myInterface
(define loftingWires (slinterface:wires myInterface))
;; loftingWires
; Align and minimize twist.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
; Make two mapping curves.
(define positionList (list
    (position 1 3 0) (position 0 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
(define positionList (list
    (position 3 3 0) (position 4 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
; Breakup the wires based on the new mapping curves.
(slinterface:breakup-wires myInterface)
;; #t
; Build the body.
(define myBody (slinterface:build-body myInterface))
;; myBody
; get-tanfac command with need_optimal set to false.
(slinterface:get-tanfac-scale myInterface #f)
;; (1 0)
; need_optimal argument set to true.
(slinterface:get-tanfac-scale myInterface #t)
;; (1 0 0.5 1000000)

[Top]


slinterface:get-tangent-factors

Action
Gets the current set of tangent factors on the loft profiles.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_get_tangent_factors_li

Syntax
(slinterface:get-tanfac-scale interface  [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
((integer . real) | (integer . integer . integer . real))
Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts  contains versioning and journaling information.
; slinterface:get-tangent-factors
; Define wires and coedges
(option:set match_paren #f)
;; #t
(define w0 (wire-body:points (position 0 0 10)))
;; w0
(define w1 (wire-body:points (list (position 1 1 0)
    (position -1 1 0)(position -1 -1 0)
    (position 1 -1 0)(position 1 1 0))))
;; w1
(define coedge_list1 (entity:coedges w0))
;; coedge_list1
(define coedge_list2 (entity:coedges w1))
;; coedge_list2
; Define laws
(define lawa (law vec(cos(t),sin(t),0)))
;; lawa
(define dom0 (law domain(law1,law2,law3)
    lawa (law:eval 0.0) (law:eval 2.0*Pi)))
;; dom0
(define lawb (law vec(0,0,-1)))
;; lawb
(define dom1 (law domain(law1,0,1) lawb))
;; dom1

; Define Section list
(define sec1 (section coedge_list1(list dom0) #f 20))
;; sec1
(define sec2 (section coedge_list2(list dom1 dom1 dom1 dom1) #t 1))
;; sec2
(define sectList (list sec1 sec2))
;; secList

; Define skin options
(define sopts (skin:options
                arc_length #f
                no_twist #t
                align #t
                perpendicular #f
                simplify #t
                closed #t
                ;acis_options o1
                ))
;; sopts

; Define body interface
(define interface (slinterface:lofting sectList sopts))
;; interface
(define block (slinterface:build-body interface))
;; block

; Apply law
(entity:check block)
;; checked:
;;         1 lumps
;;         1 shells
;;         0 wires
;;         5 faces
;;         5 loops
;;         16 coedges
;;         8 edges
;;         5 vertices
;; ()
(law:equal-test (car (solid:area block)) 187 1)
;; #t

; Define laws
(define lawa (law vec(sin(t),cos(t),0)))
;; lawa
(define dom0 (law domain(law1,law2,law3)
    lawa (law:eval 0.0) (law:eval 2.0*Pi)))
;; dom0
(define lawb (law vec(0,10,1)))
;; lawb
(define dom1 (law domain(law1,1,0) lawb))
;; dom1

; Define sections
(define sec1 (section coedge_list1(list dom0) #f 20))
;; sec1
(define sec2 (section coedge_list2(list dom1 dom1
    dom1 dom1) #t 1))
;; sec2

; Get the tangent factors
(slinterface:reenter-coedges interface
    (list sec1 sec2) )
;; (#[entity 119 1] #[entity 120 1])
(define tanFactors (slinterface:get-tangent-factors
    interface ))
;; tanFactors
(define block (slinterface:build-body interface))
;; block

; Apply law
(entity:check block)
;; checked:
;;         1 lumps
;;         1 shells
;;         0 wires
;;         5 faces
;;         5 loops
;;         24 coedges
;;         12 edges
;;         9 vertices
;; ()
(law:equal-test (car (solid:area block)) 194 1)
;; #t
(slinterface:delete-interface interface )
;; #t

[Top]


slinterface:get-valid-vertices

Action
Gets a list of valid starting vertices for skinning or lofting.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_valid_start_vertices_sli

Syntax
(slinterface:get-valid-vertices interface
    wire [acis-opts])

Arg Types
interface SLInterface
wire wire
acis-opts acis-options

Returns
((integer . real) | (integer . integer . integer . real))
Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

wire is an input wire.

acis-opts contains versioning and journaling information.
; slinterface:get-valid-vertices
; Example not available for this release.

[Top]


slinterface:lofting

Action
Creates a lofting interface structure.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_create_li

Syntax
(slinterface:lofting section-list [[skin-options] [acis-opts])

Arg Types
section-list section | section ...
skin-options skin_options
acis-opts acis-options

Returns
SLInterface

Description
Creates a lofting interface data structure. The data structure is used as input to the additional lofting APIs each performing some stage of the lofting operation.

Arguments
section-list gives the list of sections.

skin-options gives the different options available for skinning. For a complete list of skinning options, refer to the skin:options documentation.

The acis-opts, which contain versioning and journaling parameters, must be the last argument, if stated.
; slinterface:lofting
; Build the wire bodies.
(define w0 (wire-body:points
    (position 0 0 10)))
;; w0
(define w1 (wire-body:points (list
    (position 1 1 0) (position -1 1 0)
    (position -1 -1 0) (position 1 -1 0)
    (position 1 1 0))))
;; w1
; Get the coedges from the wires.
(define coedge-list1 (entity:coedges w0))
;; coedge-list1
(define coedge-list2 (entity:coedges w1))
;; coedge-list2
; Make some laws to apply to the wires or coedges.
(define lawa (law "vec(cos (t),sin (t),0)"))
;; lawa
(define dom0 (law "domain (law1,law2,law3)" lawa
    (law:eval "0.0") (law:eval "2.0*Pi")))
;; dom0
(define lawb (law "vec (0,0,-1)"))
;; lawb
(define dom1 (law "domain (law1,0,1)" lawb))
;; dom1
; Make the sections.
(define sec1 (section coedge-list1
    (list dom0) #f 20))
;; sec1
(define sec2 (section coedge-list2
    (list dom1 dom1 dom1 dom1) #t 1))
;; sec2
; Call the incremental interface to loft the
; sections.
(define myInterface (slinterface:lofting
    (list sec1 sec2)))
;; myInterface
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
(define myBody (slinterface:build-body myInterface))
;; myBody
(slinterface:delete-interface myInterface)
;; #t

[Top]


slinterface:lofting-options

Action
Sets the options in a lofting interface structure.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_set_options_li

Syntax
(slinterface:lofting-options interface
     [[skin-options] |
    [arc-length=#f [no-twist=#t
    [align=#t [perpendicular=#f
    [simplify=#t [closed=#f [solid=#t
    [periodic=#f [acis-opts]]]]]]]]]])

Arg Types
interface SLInterface
skin-options skin_options
arc-length boolean
no-twist boolean
align boolean
perpendicular boolean
simplify boolean
closed boolean
solid boolean
periodic boolean
acis-opts acis-options

Returns
SLInterface

Description
Sets the options in lofting interface.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

skin-options gives the different options for skinning (and lofting).

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 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 perpendicular option toggles the direction of the take-off vectors from the coedge. The take-off vectors are in the skin direction of the loft or 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.

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

The acis-opts, which contain versioning and journaling parameters, must be the last argument, if stated.
; slinterface:lofting-options
; Build the wire bodies.
(define w0 (wire-body:points
    (position 0 0 10)))
;; w0
(define w1 (wire-body:points (list
    (position 1 1 0) (position -1 1 0)
    (position -1 -1 0) (position 1 -1 0)
    (position 1 1 0))))
;; w1
; Get the coedges from the wires.
(define coedge-list1 (entity:coedges w0))
;; coedge-list1
(define coedge-list2 (entity:coedges w1))
;; coedge-list2
; Make some laws to apply to the wires or coedges.
(define lawa (law "vec(cos(t),sin(t),0)"))
;; lawa
(define dom0 (law "domain(law1,law2,law3)" lawa
    (law:eval "0.0") (law:eval "2.0*Pi")))
;; dom0
(define lawb (law "vec(0,0,-1)"))
;; lawb
(define dom1 (law "domain(law1,0,1)" lawb))
;; dom1
; Make the sections.
(define sec1 (section coedge-list1
    (list dom0) #f 20))
;; sec1
(define sec2 (section coedge-list2
    (list dom1 dom1 dom1 dom1) #t 1))
;; sec2
; Call the incremental interface to loft the
; sections.
(define myInterface (slinterface:lofting
    (list sec1 sec2)))
;; myInterface
; Set the options in the lofting interface.
(slinterface:lofting-options myInterface
    (list sec1 sec2)))
;; #t

[Top]


slinterface:lose-surface

Action
Removes the surface conditions from the lofting profiles.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_lose_surface_conditions_li

Syntax
(slinterface:lose-surface interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
boolean

Description
Removes the surface conditions from the lofting profiles. Essentially it turns the loft into a skinning operation.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:lose-surface
; Make the wires.
(define w0 (wire-body:points (position 0 0 10)))
;; w0
(define w1 (wire-body:points (list
    (position 1 1 0) (position -1 1 0)
    (position -1 -1 0) (position 1 -1 0)
    (position 1 1 0))))
;; w1
; Make the list of coedges.
(define coedge-list1 (entity:coedges w0))
;; coedge-list1
(define coedge-list2 (entity:coedges w1))
;; coedge-list2
; Define the laws.
(define lawa (law "vec(cos(t),sin(t),0)"))
;; lawa
(define dom0 (law "domain(law1,law2,law3)" lawa
    (law:eval "0.0") (law:eval "2.0*Pi")))
;; dom0
(define lawb (law "vec(0,0,-1)"))
;; lawb
(define dom1 (law "domain(law1,0,1)" lawb))
;; dom1
; Make the sections.
(define sec1 (section coedge-list1
    (list dom0) #f 20))
;; sec1
(define sec2 (section coedge-list2
    (list dom1 dom1 dom1 dom1) #t 1))
;; sec2
; Make an interactive user interface.
(define myInterface (slinterface:lofting
    (list sec1 sec2)))
;; myInterface
; Align, minimize twist, and breakup the
; temporary wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Lose all the vectors laws they we put on earlier.
(slinterface:lose-surface myInterface)
;; #t
; Make a body, notice that it is a pyramid.
; the laws got lost
(define myBody (slinterface:build-body myInterface))
;; myBody
; Delete the interactive interface.
(slinterface:delete-interface myInterface)
;; #t

[Top]


slinterface:mapping-curve

Action
Adds a mapping curve to the skinning/lofting interface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_add_mapping_curve_sli

Syntax
(slinterface:mapping-curve interface position-list
    [acis-opts])

Arg Types
interface SLInterface
position-list position | (position ...)
acis-opts acis-options

Returns
boolean

Description
Adds a mapping curve to the skinning/lofting interface. The mapping curve is comprised of a list of positions, each position being exactly a vertex on a lofting/skinning profile. After the breakup the each mapping curve is guaranteed to be aligned.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

position-list is a list of positions

acis-opts contains versioning and journaling information.
; slinterface:mapping-curve
; Build the wire bodies.
(define w1 (wire-body:points (list
    (position 0 0 0) (position 0 2 0)
    (position 1 3 0) (position 3 3 0)
    (position 4 2 0) (position 4 0 0)
    (position 0 0 0))))
;; w1
(define w2 (wire-body:points (list
    (position 0 0 10) (position 0 3 10)
    (position 4 3 10) (position 4 0 10)
    (position 0 0 10))))
;; w2
; Get the coedges off the wire.
(define coedges1 (entity:coedges w1))
;; coedges1
(define coedges2 (entity:coedges w2))
;; coedges2
; Make sections from the coedges.
(define section1 (section coedges1 #f 1))
;; section1
(define section2 (section coedges2 #t 1))
;; section2
(define mySect (list section1 section2))
;; mySect
; Make the lofting interface.
(define myInterface
    (slinterface:lofting mySect))
;; myInterface
(define loftingWires (slinterface:wires myInterface))
;; loftingWires
; Align and minimize twist.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
; Make two mapping curves.
(define positionList (list
    (position 1 3 0) (position 0 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
(define positionList (list
    (position 3 3 0) (position 4 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
; Breakup the wires based on the new mapping curves.
(slinterface:breakup-wires myInterface)
;; #t
; Build the body.
(define myBody (slinterface:build-body myInterface))
;; myBody
; Delete the interface.
(slinterface:delete-interface myInterface)
;; #t

[Top]


slinterface:min-rad

Action
Estimates the magnitude of the tangent vector field to build surfaces with a minimum radius of curvature.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_estimate_min_rad_curvature_skin

Syntax
(slinterface:min-rad interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
real

Description
Estimates the minimum radius of curvature of the skin surfaces of the body. This helps the user estimate the maximum thickness the skin surface can be shelled and the maximum blend radii that can be applied to the edges of the skin body. This works on skin and loft bodies.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:min-rad
; Create wire bodies
(define w1 (wire-body:points (list
    (position 0 0 0) (position 0 2 0)
    (position 1 3 0) (position 3 3 0)
    (position 4 2 0) (position 4 0 0)
    (position 0 0 0))))
;; w1
(define w2 (wire-body:points (list
    (position 0 0 10) (position 0 3 10)
    (position 4 3 10) (position 4 0 10)
    (position 0 0 10))))
;; w2
; Get the coedges off the wire.
(define coedges1 (entity:coedges w1))
;; coedges1
(define coedges2 (entity:coedges w2))
;; coedges2
; Make sections from the coedges.
(define section1 (section coedges1 #f 1))
;; section1
(define section2 (section coedges2 #t 1))
;; section2
(define mySect (list section1 section2))
;; mySect
; Make the lofting interface.
(define myInterface
    (slinterface:lofting mySect))
;; myInterface
(define loftingWires (slinterface:wires myInterface))
;; loftingWires
; Align and minimize twist.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
; Make two mapping curves.
(define positionList (list
    (position 1 3 0) (position 0 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
(define positionList (list
    (position 3 3 0) (position 4 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
; Breakup the wires based on the new mapping curves.
(slinterface:breakup-wires myInterface)
;; #t
; Build the body.
(define myBody (slinterface:build-body myInterface))
;; myBody
; Get the estimated magnitude of the tangent vector
;   field.
(slinterface:min-rad myInterface)
;; 1000000

[Top]


slinterface:minimizetwist-wires

Action
Aligns the start vertex of each of the temporary lofting/skinning profiles in order to minimize the twist of the resulting surface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_minimize_twist_wires_sli

Syntax
(slinterface:minimizetwist-wires interface
    [skin-options])

Arg Types
interface SLInterface
skin-options skin_options

Returns
boolean

Description
Aligns the start vertex of each of the temporary lofting/skinning profiles in order to minimize the twist of the resulting surface.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

skin-options gives the different options available for skinning. For a complete list of skinning options, refer to the skin:options documentation.
; slinterface:minimizetwist-wires
; Build the wire bodies to be skinned.
(define wire-0 (wire-body (list
    (edge:linear (position 0 0 0)
    (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire-0
(define wire-1 (wire-body (list
    (edge:linear (position 0 0 100)
    (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire-1
(define myWires (list wire-0 wire-1))
;; myWires
; Build the skinning interface.
(define myInterface
    (slinterface:skinning myWires))
;; myInterface
(define skinningWires
    (slinterface:wires myInterface))
;; skinningWires
; Align, minimize twist, and breakup the wires.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
(slinterface:breakup-wires myInterface)
;; #t
; Build the body and delete the interface.
(define myBody (slinterface:build-body myInterface))
;; myBody
(slinterface:delete-interface myInterface)
;; #t
; Zoom to see the whole model
(define zoom (zoom-all))
;; zoom

[Top]


slinterface:modify-vertex

Action
Modifies the position of a vertex on an intermediate skinning or lofting wire.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_move_vertex_sli

Syntax
(slinterface:modify-vertex interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options
Returns
vertex
Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

acis-opts contains versioning and journaling information.
; slinterface:modify-vertex
; Build all the necessary geometry for the sweeper
(define Frame1 (wcs (position 0 0 0) (gvector 1 0 0)
    (gvector 0 1 0)))
;; Frame1
(entity:set-color Frame1 1)
;; ()
(define Frame2 (wcs (position 0 0 0) (gvector 1 0 0)
    (gvector 0 0 1)))
;; Frame2
(wcs:set-active Frame2)
;; ()
(entity:set-color Frame2 1)
;; ()
(define wire_5 (wire-body (list (edge:circular
    (position 50 50 60)  20 0 360))))
;; wire_5
(define wire_6 (wire-body (list (edge:circular
    (position 50 50 90)  20 0 360))))
;; wire_6
(wcs:set-active Frame1)
;; ()
(define wire_1 (wire-body (list  (edge:linear
    (position -20 30 0) (position 120 30 0))
    (edge:linear (position 120 30 0)
    (position 120 20 0))
    (edge:linear (position 120 20 0)
    (position -20 20 0))
    (edge:linear (position -20 20 0 )
    (position -20 30 0)))))
;; wire_1
(define dom1 (law domain(vec(0, 0, 1), 0, 140)))
;; dom1
(define dom2 (law domain(vec(0, 0, 1), 0, 10)))
;; dom2
(define dom3 (law domain(vec(0, 0, 1), 0, 140)))
;; dom3
(define dom4 (law domain(vec(0, 0, 1), 0, 10)))
;; dom4
(define laws1 (list dom1 dom2 dom3 dom4))
;; laws1
(define wire_2 (wire-body (list  (edge:linear
    (position 10 30 30) (position 90 30 30))
    (edge:linear (position 90 30 30)
    (position 90 20 30))
    (edge:linear (position 90 20 30)
    (position 10 20 30))
    (edge:linear (position 10 20 30)
    (position 10 30 30)))))
;; wire_2
(define dom1 (law domain(vec(0, 0, 1), 0, 80)))
;; dom1
(define dom2 (law domain(vec(0, 0, 1), 0, 10)))
;; dom2
(define dom3 (law domain(vec(0, 0, 1), 0, 80)))
;; dom3
(define dom4 (law domain(vec(0, 0, 1), 0, 10)))
;; dom4
(define laws2 (list dom1 dom2 dom3 dom4))
;; laws2
(define wire_3 (wire-body (list  (edge:linear
    (position 20 20 50) (position 80 20 50))
    (edge:linear (position 80 20 50)
    (position 80 13 43))
    (edge:linear (position 80 13 43)
    (position 20 13 43))
    (edge:linear (position 20 13 43)
    (position 20 20 50)))))
;; wire_3
(define dom1 (law domain(vec(0, -0.7, 0.7), 0, 40)))
;; dom1
(define dom2 (law domain(vec(0, -0.7, 0.7), 0, 10)))
;; dom2
(define dom3 (law domain(vec(0, -0.7, 0.7), 0, 40)))
;; dom3
(define dom4 (law domain(vec(0, -0.7, 0.7), 0, 10)))
;; dom4
(define laws3 (list dom1 dom2 dom3 dom4))
;; laws3
(define coedges1 (entity:coedges wire_1))
;; coedges1
(define coedges2 (entity:coedges wire_2))
;; coedges2
(define coedges3 (entity:coedges wire_3))
;; coedges3
(define coedges5 (entity:coedges wire_5))
;; coedges5
(define coedges6 (entity:coedges wire_6))
;; coedges6
(define section1 (section coedges1 laws1 #f 100))
;; section1
(define section2 (section coedges2 laws2 #f 50))
;; section2
(define section3 (section coedges3))
;; section3
(define section5 (section coedges5))
;; section5
(define section6 (section coedges6))
;; section6
(top)
;; #[view 3277706]
(zoom-all)
;; #[view 3277706]
(render:rebuild)
;; ()
; Start the lofting step
(define Sect (list  section2 section3 section5 section6))
;; Sect
(define Interface (slinterface:lofting Sect #f #t #t #f #f #f #f acis-opts))
;; Interface
(define tempWires (slinterface:wires Interface))
;; tempWires
(entity:set-color tempWires 1)
;; ()

; Align, breakup and minimize the temporary lofting wires
(slinterface:align-wires Interface)
;; #t
(slinterface:minimizetwist-wires Interface )
;; #t
(slinterface:breakup-wires Interface )
;; #t

; Preview the edges
(define previewEdges (slinterface:build-edges Interface))
;; previewEdges

; Delete the edges
(entity:delete previewEdges)
;; ()

; Move some vertices around
(slinterface:modify-vertex Interface (list-ref tempWires 3)
         (position 30.2667875017707 -90 53.255813953488)
         (position 40.288231 -90  67.483751))
;; #t
(slinterface:modify-vertex Interface (list-ref tempWires 3)
         (position 69.7332124982292 -90 53.255813953488)
         (position 59.71176899999 -90  67.483751))
;; #t
(slinterface:modify-vertex Interface (list-ref tempWires 3)
         (position 69.7332124982292 -90 46.744186046511)
         (position 66.098883 -90 61.867012))
;; #t
(slinterface:modify-vertex Interface (list-ref tempWires 3)
         (position 30.2667875017708 -90 46.744186046511)
         (position 33.901117 -90 61.867012))
;; #t
(slinterface:modify-vertex Interface (list-ref tempWires 2)
         (position 30.2667875017707 -60 53.255813953488)
         (position 40.288231 -60 67.483751))
;; #f
(slinterface:modify-vertex Interface (list-ref tempWires 2)
         (position 69.7332124982292 -60 53.255813953488)
         (position 59.71176899999 -60 67.483751))
;; #t
(slinterface:modify-vertex Interface (list-ref tempWires 2)
         (position 69.7332124982292 -60 46.744186046511)
         (position 66.098883 -60 61.867012))
;; #t
(slinterface:modify-vertex Interface (list-ref tempWires 2)
         (position 30.2667875017708 -60 46.744186046511)
         (position 33.901117 -60 61.867012))
;; #f

; Spend some time looking at the edges
(define previewEdges (slinterface:build-edges Interface ))
;; previewEdges

; Delete the edges
(entity:delete previewEdges)
;; ()

; Build the body
(define body (slinterface:build-body Interface ))
;; body
(slinterface:delete-interface Interface )
;; #t

[Top]


slinterface:reenter-coedges

Action
Removes the surface conditions from the lofting profiles.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_reenter_coedges_li

Syntax
(slinterface:reenter-coedges interface sections [acis-opts])

Arg Types
interface SLInterface
sections section | section ...
acis-opts acis-options

Returns
(wire-body ...)

Description
Reenters the lofting profiles and deletes references to the original lofting sections and the original temporary lofting wires.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

sections give the list of sections.

acis-opts contains versioning and journaling information.
; slinterface:reenter-coedges
; Build the wire bodies.
(define w0 (wire-body:points
    (position 0 0 10)))
;; w0
(define w1 (wire-body:points (list
    (position 1 1 0) (position -1 1 0)
    (position -1 -1 0) (position 1 -1 0)
    (position 1 1 0))))
;; w1
; Get the coedges from the wires.
(define coedge-list1 (entity:coedges w0))
;; coedge-list1
(define coedge-list2 (entity:coedges w1))
;; coedge-list2
; Make some laws to apply to the wires or coedges.
(define lawa (law "vec(cos(t),sin(t),0)"))
;; lawa
(define dom0 (law "domain(law1,law2,law3)" lawa
    (law:eval "0.0") (law:eval "2.0*Pi")))
;; dom0
(define lawb (law "vec(0,0,-1)"))
;; lawb
(define dom1 (law "domain(law1,0,1)" lawb))
;; dom1
; Make the sections.
(define sec1 (section coedge-list1
    (list dom0) #f 20))
;; sec1
(define sec2 (section coedge-list2
    (list dom1 dom1 dom1 dom1) #t 1))
;; sec2
; Call the incremental interface to loft the
; sections.
(define myInterface (slinterface:lofting
    (list sec1 sec2)))
;; myInterface
; Set the options in the lofting interface.
(slinterface:lofting-options myInterface
    (list sec1 sec2)))
;; #t
; Remove surface conditions from lofting profiles.
(define surface (slinterface:reenter-coedges
    myInterface (list sec1 sec2)))
;; surface

[Top]


slinterface:remove-mapping-curve

Action
Removes a mapping curve from the skinning/lofting interface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_remove_mapping_curve_sli

Syntax
(slinterface:remove-mapping-curve interface index
    [acis-opts])

Arg Types
interface SLInterface
index integer
acis-opts acis-options

Returns
boolean

Description
Removes a mapping curve from the skinning/lofting interface. However, if the mapping curve is removed after the breakup API has been called the resulting vertices from the breakup remain. The user must roll back the breakup step in order to have the temporary wires in the state before the mapping curve.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

index is an input integer value.

acis-opts contains versioning and journaling information.
; slinterface:remove-mapping-curve
; Build the wire bodies.
(define w1 (wire-body:points (list
    (position 0 0 0) (position 0 2 0)
    (position 1 3 0) (position 3 3 0)
    (position 4 2 0) (position 4 0 0)
    (position 0 0 0))))
;; w1
(define w2 (wire-body:points (list
    (position 0 0 10) (position 0 3 10)
    (position 4 3 10) (position 4 0 10)
    (position 0 0 10))))
;; w2
; Get the coedges off the wire.
(define coedges1 (entity:coedges w1))
;; coedges1
(define coedges2 (entity:coedges w2))
;; coedges2
; Make sections from the coedges.
(define section1 (section coedges1 #f 1))
;; section1
(define section2 (section coedges2 #t 1))
;; section2
(define mySect (list section1 section2))
;; mySect
; Make the lofting interface.
(define myInterface
    (slinterface:lofting mySect))
;; myInterface
(define loftingWires (slinterface:wires myInterface))
;; loftingWires
; Align and minimize twist.
(slinterface:align-wires myInterface)
;; #t
(slinterface:minimizetwist-wires myInterface)
;; #t
; Make two mapping curves.
(define positionList (list
    (position 1 3 0) (position 0 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
(define positionList (list
    (position 3 3 0) (position 4 3 10)))
;; positionList
(slinterface:mapping-curve myInterface positionList)
;; #t
; Show the mapping curves.
(define myCurves
    (slinterface:show-mapping-curves myInterface))
;; myCurves
; Delete the copy of mapping curves.
(entity:delete myCurves)
;; ()
; Remove a mapping curve.
(slinterface:remove-mapping-curve myInterface 0)
;; #t
; Show the mapping curves.
(define myCurves
    (slinterface:show-mapping-curves myInterface))
;; myCurves
; Delete the mapping curve.
(entity:delete myCurves)
;; ()
; Delete the interface.
(slinterface:delete-interface myInterface)
;; #t

[Top]


slinterface:remove-vertex

Action
Removes the corresponding vertex in every temporary wire in the interface.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_remove_vertex_sli

Syntax
(slinterface:remove-vertex interface body position
    [acis-opts])

Arg Types
interface SLInterface
body wire-body
position position
acis-opts acis-options

Returns
boolean

Description
Removes the vertex located at that position and every corresponding vertex in the temporary list.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

body is the wire-body from which the vertex is being removed.

position is the place from which the vertex is removed.

acis-opts contains versioning and journaling information.
; slinterface:remove-vertex
; Build all the necessary geometry for the sweeper
(define Frame1 (wcs (position 0 0 0)
    (gvector 1 0 0) (gvector 0 1 0)))
;; Frame1
(entity:set-color Frame1 1)
;; ()
(define Frame2 (wcs (position 0 0 0)
    (gvector 1 0 0) (gvector 0 0 1)))
;; Frame2
(wcs:set-active Frame2)
;; ()
(entity:set-color Frame2 1)
;; ()
(define wire_5
    (wire-body (list (edge:circular
    (position 50 50 60)  20 0 360))))
;; wire_5
(define wire_6
    (wire-body (list (edge:circular
    (position 50 50 90)  20 0 360))))
;; wire_6
(wcs:set-active Frame1)
;; ()
(define wire_1 (wire-body (list
    (edge:linear (position -20 30 0)
    (position 120 30 0))
    (edge:linear (position 120 30 0)
    (position 120 20 0))
    (edge:linear (position 120 20 0)
    (position -20 20 0))
    (edge:linear (position -20 20 0)
    (position -20 30 0)))))
;; wire_1
(define dom1 (law domain(vec(0, 0, 1), 0, 140)))
;; dom1
(define dom2 (law domain(vec(0, 0, 1), 0, 10)))
;; dom2
(define dom3 (law domain(vec(0, 0, 1), 0, 140)))
;; dom3
(define dom4 (law domain(vec(0, 0, 1), 0, 10)))
;; dom4
(define laws1 (list dom1 dom2 dom3 dom4))
;; laws1
(define wire_2 (wire-body (list
    (edge:linear (position 10 30 30)
    (position 90 30 30))
    (edge:linear (position 90 30 30)
    (position 90 20 30))
    (edge:linear (position 90 20 30)
    (position 10 20 30))
    (edge:linear (position 10 20 30)
    (position 10 30 30)))))
;; wire_2
(define dom1 (law domain(vec(0, 0, 1), 0, 80)))
;; dom1
(define dom2 (law domain(vec(0, 0, 1), 0, 10)))
;; dom2
(define dom3 (law domain(vec(0, 0, 1), 0, 80)))
;; dom3
(define dom4 (law domain(vec(0, 0, 1), 0, 10)))
;; dom4
(define laws2 (list dom1 dom2 dom3 dom4))
;; laws2
(define wire_3 (wire-body (list
    (edge:linear (position 20 20 50)
    (position 80 20 50))
    (edge:linear (position 80 20 50)
    (position 80 13 43))
    (edge:linear (position 80 13 43)
    (position 20 13 43))
    (edge:linear (position 20 13 43)
    (position 20 20 50)))))
;; wire_3
(define dom1
    (law domain(vec (0, -0.7, 0.7), 0, 40)))
;; dom1
(define dom2
    (law domain(vec (0, -0.7, 0.7), 0, 10)))
;; dom2
(define dom3
    (law domain(vec (0, -0.7, 0.7), 0, 40)))
;; dom3
(define dom4
    (law domain(vec (0, -0.7, 0.7), 0, 10)))
;; dom4
(define laws3 (list dom1 dom2 dom3 dom4))
;; laws3
(define coedges1 (entity:coedges wire_1))
;; coedges1
(define coedges2 (entity:coedges wire_2))
;; coedges2
(define coedges3 (entity:coedges wire_3))
;; coedges3
(define coedges5 (entity:coedges wire_5))
;; coedges5
(define coedges6 (entity:coedges wire_6))
;; coedges6
(define section1 (section coedges1 laws1 #f 100))
;; section1
(define section2 (section coedges2 laws2 #f 50))
;; section2
(define section3 (section coedges3))
;; section3
(define section5 (section coedges5))
;; section5
(define section6 (section coedges6))
;; section6
(iso)
;; #[view 66764]
(zoom-all)
;; #[view 66764]
(render:rebuild)
;; ()
(define ao (acisoptions:set journal
    (acis_journal:set file modifyvertex)))
;; ao
(acis_journal:start ao)
;; #t
; Start the lofting step
(define Sect (list section1 section2 section3
    section5 section6))
;; Sect
(define Interface (slinterface:lofting
    Sect #f #t #t #f #f #f #f ao))
;; Interface
(define tempWires (slinterface:wires Interface))
;; tempWires
(entity:set-color tempWires 1)
;; ()
; Align, breakup and minimize the temporary
; lofting wires
(slinterface:align-wires Interface ao)
;; #t
(slinterface:minimizetwist-wires Interface ao)
;; #t
(slinterface:breakup-wires Interface ao)
;; #t
; Spend some time looking at the edges
(define previewEdges
    (slinterface:build-edges Interface))
;; previewEdges
; Delete the edges
(entity:delete previewEdges)
;; ()
; Add some vertices around
(slinterface:add-vertex Interface
    (list-ref (entity:coedges
    (list-ref tempWires 0))1))
;; #t
(render:rebuild)
;; ()
(define previewEdges
    (slinterface:build-edges Interface ao))
;; previewEdges
(entity:delete previewEdges)
;; ()
; Remove the added vertices
(slinterface:remove-vertex Interface
    (list-ref tempWires 0) (position 120 25 0))
;; #t
(render:rebuild)
;; ()
(define previewEdges
    (slinterface:build-edges Interface ao))
;; previewEdges
(entity:delete previewEdges)
;; ()
; We like them now, so build the body
(define body (slinterface:build-body Interface))
;; body
(slinterface:delete-interface Interface)
;; #t

[Top]


slinterface:set-start-vertex

Action
Modifies which vertex in a loop of coedges forming a wire is the starting vertex for traversing the loop.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_get_vertices, api_start_vertex_sli

Syntax
(slinterface:set-start-vertex interface wire-number
    vertex-number [acis-opts])

Arg Types
interface SLInterface
wire-number integer
vertex-number integer
acis-opts acis-options

Returns
boolean
Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

wire-number gives the number of the wire of the loop.

vertex-number gives the number of the vertex in the loop.

acis-opts contains versioning and journaling information.
; slinterface:set-start-vertex
; Define the wires
(option:set align_corners #t)
;; #t
(option:set match_corners #t)
;; #t
(define wire_0 (wire-body (list (edge:linear
    (position 0 0 0) (position 50 0 0))
    (edge:linear (position 50 0 0)
    (position 50 50 0))
    (edge:linear (position 50 50 0)
    (position 0 50 0))
    (edge:linear (position 0 50 0)
    (position 0 0 0)))))
;; wire_0
(define wire_1 (wire-body (list (edge:linear
    (position 0 0 100) (position 50 0 100))
    (edge:linear (position 50 0 100)
    (position 50 50 100))
    (edge:linear (position 50 50 100)
    (position 0 50 100))
    (edge:linear (position 0 50 100)
    (position 0 0 100)))))
;; wire_1
; List the wires
(define myWires (list wire_0 wire_1))
;; myWires

; Define guides
(define guide1 (edge:circular-3pt (position 15 0 0)
    (position 15 -30 50) (position 15 0 100)))
;; guide1
(define guide2 (edge:circular-3pt (position 25 0 0)
    (position 25 -20 50) (position 25 0 100)))
;; guide2
(define guide3 (edge:circular-3pt (position 35 0 0)
    (position 35 -30 50) (position 35 0 100)))
;; guide3

; Apply skinning on wires
(define myInterface (slinterface:skinning myWires ))
;; myInterface
(define skinningWires (slinterface:wires myInterface ))
;; skinningWires
(entity:set-color skinningWires 1)
;; ()

; Mininmize the twist
(slinterface:align-wires myInterface )
;; #t
(slinterface:minimizetwist-wires myInterface )
;; #t
(slinterface:breakup-wires myInterface )
;; #t

; Set the starting vertex
(slinterface:skin-guide myInterface guide1 )
;; #t
(slinterface:skin-guide myInterface guide2 )
;; #t
(slinterface:skin-guide myInterface guide3 )
;; #t
(slinterface:set-start-vertex myInterface 0 0 )
;; #t
(define myBody (slinterface:build-body myInterface ))
;; myBody
(slinterface:delete-interface myInterface )
;; #t

[Top]


slinterface:set-tan-facs

Action
Sets the scale factors of the takeoff vectors for the lofting operation.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_set_tangent_factors_li

Syntax
(slinterface:set-tan-facs interface tangent-factor [acis-opts])

Arg Types
interface SLInterface
tangent-factor real
acis-opts acis-options

Returns
boolean

Description
Resets the scale factors of the takeoff vectors for the lofting operation. This extension allows the user to determine these values optimally and reset the values in the skinning/lofting interface object.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.

tangent-factor gives the scale factors of the take-off vectors.

acis-opts contains versioning and journaling information.
; slinterface:set-tan-facs
; Example not available for this release.

[Top]


slinterface:show-guide-curves

Action
Returns a list of edges that represent the guide curves.

Filename
scm/scmext/skin/skin_scm.cpp

APIs
api_show_guides_si

Syntax
(slinterface:show-guide-curves interface [acis-opts])

Arg Types
interface SLInterface
acis-opts acis-options

Returns
(edge ...)

Description
Returns a list of edges that represent the guide curves. The list contains only the virtual guide curves (if that option is set). The edges and their responsibility to delete are owned by the caller.

Arguments
interface is of SLInterface datatype that is a data structure used to control skinning and lofting operations.
 
acis-opts contains versioning and journaling information.
; slinterface:show-guide-curves
; define the profiles:
(define wire1 (wire-body (list
    (edge:linear (position -60 0 0)
    (position 60 0 0))
    (edge:linear (position 60 0 0)
    (position 60 50 0))
    (edge:linear (position 60 50 0)
    (position -60 50 0))
    (edge:linear (position -60 50 0)
    (position -60 0 0)))))
;; wire1
(define wire2 (wire-body (list (edge:linear
    (position -30 0 100) (position 30 0 100))
    (edge:linear (position 30 0 100)
    (position 30 40 100))
    (edge:linear (position 30 40 100)
    (position -30 40 100))
    (edge:linear (position -30 40 100)
    (position -30 0 100)))))
;; wire2
(define wire3 (wire-body (list
    (edge:circular (position 0 -85 150) 25 0 360))))
;; wire3
(define guide1 (edge:spline (list (position 0 0 0)
    (position 0 20 50) (position 0 0 100)
    (position 0 -20 160) (position 0 -50 160)
    (position 0 -60 150))))
;; guide1
(iso)
;; #[view 655944]
(zoom-all)
;; #[view 1180214]
(render:rebuild)
;; ()
; interface:
(define interface (slinterface:skinning
    (list wire1 wire2 wire3) virtualGuides #t ))
;; interface
(slinterface:align-wires interface)
;; #t
(slinterface:minimizetwist-wires interface)
;; #t
(slinterface:breakup-wires interface)
;; #t
(slinterface:skin-guide interface guide1)
;; #t
; display the guide curves:
(define virtual_guides
    (slinterface:show-guide-curves interface))
;; virtual_guides
(entity:set-color virtual_guides 1)
;; ()
(entity:delete virtual_guides)
;; ()
; OUTPUT Original
; build the body:
(define Body (slinterface:build-body interface))
;; Body
(slinterface:delete-interface interface)
;; #t
; OUTPUT Result

; Render the image
(render)
;; ()
; OUTPUT Rendered

Figure. slinterface:show-guide-curves

[Top]