SchemeExt:Law

From DocR24

Jump to: navigation, search

Contents

Action

Creates a law Scheme data type composed of one or more law functions.

Filename

scm/scmext/kern/law_scm.cpp

APIs

api_str_to_law

Syntax

(law {"law-functions" | type} [law-data]*)

Argument Types

Argument Scheme Data Type
"law-functions" string
type law | real | position | par-pos | gvector
law-data law | real | position | par-pos | gvector | transform | edge | wire

Returns

law

Description

The law Scheme extension creates a law Scheme data type composed of one or more law functions.

Arguments

  • "law-functions" is a string specifying law function enclosed in quotation marks. The law functions are very similar to common mathematical notation and to the adaptation of mathematical notation for use in computers. The valid syntax for the character strings are given in the law function templates. The strings used to define laws are not case-sensitive, but when returned from a law function, the lower-case letters are converted to upper-case letters. Only laws that are used to define the geometry, such as wire-body:offset and sweep:law, are stored in a save file.
  • type defines the data type of law-functions.
  • law-data (optional) must agree with the items specified within law-functions in type, number, and order. For example, if the law-functions calls for law1, edge2, and wire3, the input must be a list with at least three items: the first item must be a law, the second item must be an edge, and the third item must be a wire. The index number of the item within the law function specifies its ordering in the input list. position, par-pos, or gvector may be used as law-data, which correspond to the law# and are converted into the "vec" law function.

Example

; law
; Create a new law.
(define law1 (law "x+x^2-cos(x)"))
;; law1
; Evaluate the given law at 1.5 radians
(law:eval law1 1.5)
;; 3.6792627983323
 
; Another example using law data
; This creates a law that returns the position of an edge with 
;its position mapped to the closed interval [0,1].
; Create an edge.
(define edge1 (edge:linear (position 0 0 0) (position 40 40 0)))
;; edge1
(define edge-law (law "map(cur(edge1)),edge1)" edge1))
;; edge-law
Personal tools