TI-Nspire Lua Scripting API Reference Guide
TI-Nspire Lua Scripting API Reference Guide
i
Contents
ii
3.23 setText 11
3.24 setTextChangeListener 12
3.25 setTextColor 12
3.26 setVisible 12
3.27 setWordWrapWidth 12
Chapter 4 Class Library 13
4.1 class 13
Chapter 5 Clipboard Library 14
5.1 addText 14
5.2 getText 14
Chapter 6 Cursor Library 15
6.1 set 15
6.2 hide 17
6.3 show 17
Chapter 7 Document Library 18
7.1 markChanged 18
Chapter 8 Event Handling 19
8.1 activate 20
8.2 arrowDown 20
8.3 arrowKey 20
8.4 arrowLeft 21
8.5 arrowRight 21
8.6 arrowUp 21
8.7 charIn 21
8.8 backspaceKey 21
8.9 backTabKey 21
8.10 clearKey 22
8.11 construction 22
8.12 contextMenu 22
8.13 copy 22
8.14 create 22
8.15 createMathBox 22
8.16 cut 23
8.17 deactivate 23
8.18 deleteKey 23
8.19 destroy 23
8.20 enterKey 23
8.21 escapeKey 23
8.22 getFocus 23
8.23 getSymbolList 24
8.24 grabDown 24
8.25 grabUp 24
8.26 help 24
8.27 keyboardDown 25
iii
8.28 keyboardUp 25
8.29 loseFocus 25
8.30 mouseDown 25
8.31 mouseMove 25
8.32 mouseUp 25
8.33 paint 26
8.34 paste 26
8.35 propertiesChanged 26
8.36 resize 26
8.37 restore 26
8.38 returnKey 27
8.39 rightMouseDown 27
8.40 rightMouseUp 27
8.41 save 27
8.42 tabKey 28
8.43 timer 28
8.44 varChange 28
Chapter 9 Graphics Library 29
9.1 clipRect 29
9.2 drawArc 29
9.3 drawImage 29
9.4 drawLine 30
9.5 drawPolyLine 30
9.6 drawRect 30
9.7 drawString 30
9.8 fillArc 30
9.9 fillPolygon 30
9.10 fillRect 31
9.11 getStringHeight 31
9.12 getStringWidth 31
9.13 setColorRGB 31
9.14 setFont 31
9.15 setPen 31
Chapter 10 Image Library 32
10.1 new 32
10.2 copy 32
10.3 height 32
10.4 rotate 32
10.5 width 33
Chapter 11 Locale Library 34
11.1 name 34
Chapter 12 Math Library Extension 35
12.1 eval 35
12.2 evalStr 36
12.3 getEvalSettings 36
iv
12.4 setEvalSettings 37
Chapter 13 Module Library 39
Chapter 14 Platform Library 40
14.1 apiLevel 40
14.2 hw 40
14.3 isColorDisplay 40
14.4 isDeviceModeRendering 41
14.5 isTabletModeRendering 41
14.6 registerErrorHandler 41
14.7 window 41
14.7.1 height and width 41
14.7.2 invalidate 41
14.7.3 setBackgroundColor 42
14.7.4 setFocus 42
14.7.5 getScrollHeight 42
14.7.6 setScrollHeight 42
14.7.7 displayInvalidatedRectangles 42
14.8 withGC 43
14.9 getDeviceID 43
Chapter 15 String Library Extension 44
15.1 split 44
15.2 uchar 44
15.3 usub 44
15.4 pack 44
15.5 unpack 45
Chapter 16 Timer Library 46
16.1 getMilliSecCounter 46
16.2 start 46
16.3 stop 46
Chapter 17 Tool Palette Library 47
17.1 register 47
17.2 enable 47
17.3 enableCut 48
17.4 enableCopy 48
17.5 enablePaste 48
Chapter 18 Variable Library 49
18.1 list 49
18.2 makeNumericList 49
18.3 monitor 49
18.4 recall 49
18.5 recallAt 50
18.6 recallStr 50
18.7 store 50
v
18.8 storeAt 50
18.9 unmonitor 50
Chapter 19 Physics Library 51
19.1 Miscellaneous routines 51
19.1.1 INFINITY 51
19.1.2 momentForBox 51
19.1.3 momentForCircle 51
19.1.4 momentForPoly 52
19.1.5 momentForSegment 52
19.2 Vectors 52
19.2.1 Vect 52
19.2.2 add 53
19.2.3 clamp 53
19.2.4 cross 53
19.2.5 dist 54
19.2.6 distsq 54
19.2.7 dot 54
19.2.8 eql 54
19.2.9 length 55
19.2.10 lengthsq 55
19.2.11 lerp 55
19.2.12 lerpconst 55
19.2.13 mult 56
19.2.14 near 56
19.2.15 neg 56
19.2.16 normalize 56
19.2.17 normalizeSafe 57
19.2.18 perp 57
19.2.19 project 57
19.2.20 rotate 57
19.2.21 rperp 57
19.2.22 setx 58
19.2.23 sety 58
19.2.24 slerp 58
19.2.25 slerpconst 59
19.2.26 sub 59
19.2.27 toangle 59
19.2.28 unrotate 59
19.2.29 x 60
19.2.30 y 60
19.3 Bounding Boxes 60
19.3.1 BB 60
19.3.2 b 60
19.3.3 clampVect 61
19.3.4 containsBB 61
19.3.5 containsVect 61
19.3.6 expand 61
19.3.7 intersects 62
vi
19.3.8 l 62
19.3.9 merge 62
19.3.10 setb 62
19.3.11 r 63
19.3.12 setl 63
19.3.13 setr 63
19.3.14 sett 63
19.3.15 t 64
19.3.16 wrapVect 64
19.4 Bodies 64
19.4.1 Body 64
19.4.2 activate 64
19.4.3 angle 65
19.4.4 angVel 65
19.4.5 applyForce 65
19.4.6 applyImpulse 65
19.4.7 data 66
19.4.8 force 66
19.4.9 isRogue 66
19.4.10 isSleeping 66
19.4.11 local2World 67
19.4.12 kineticEnergy 67
19.4.13 mass 67
19.4.14 moment 67
19.4.15 pos 67
19.4.16 resetForces 68
19.4.17 rot 68
19.4.18 setAngle 68
19.4.19 setAngVel 68
19.4.20 setData 69
19.4.21 setForce 69
19.4.22 setMass 69
19.4.23 setMoment 70
19.4.24 setPos 70
19.4.25 setPositionFunc 70
19.4.26 setTorque 70
19.4.27 setVel 71
19.4.28 setVelocityFunc 71
19.4.29 setVLimit 71
19.4.30 setWLimit 72
19.4.31 sleep 72
19.4.32 sleepWithGroup 72
19.4.33 torque 73
19.4.34 updatePosition 73
19.4.35 updateVelocity 73
19.4.36 vel 74
19.4.37 vLimit 74
19.4.38 wLimit 74
vii
19.4.39 world2Local 74
19.5 Shapes 74
19.5.1 BB 75
19.5.2 body 75
19.5.3 collisionType 75
19.5.4 data 75
19.5.5 friction 75
19.5.6 group 76
19.5.7 layers 76
19.5.8 rawBB 76
19.5.9 restitution 76
19.5.10 sensor 77
19.5.11 setCollisionType 77
19.5.12 setData 77
19.5.13 setFriction 77
19.5.14 setGroup 78
19.5.15 setLayers 78
19.5.16 setRestitution 78
19.5.17 setSensor 78
19.5.18 setSurfaceV 79
19.5.19 surfaceV 79
19.6 Circle Shapes 79
19.6.1 CircleShape 79
19.6.2 offset 80
19.6.3 radius 80
19.7 Polygon Shapes 80
19.7.1 PolyShape 80
19.7.2 numVerts 80
19.7.3 points 81
19.7.4 vert 81
19.8 Segment Shapes 81
19.8.1 SegmentShape 81
19.8.2 a 82
19.8.3 b 82
19.8.4 normal 82
19.8.5 radius 82
19.9 Spaces 82
19.9.1 Space 83
19.9.2 addBody 83
19.9.3 addConstraint 83
19.9.4 addCollisionHandler 83
19.9.5 addPostStepCallback 84
19.9.6 addShape 84
19.9.7 addStaticShape 85
19.9.8 damping 85
19.9.9 data 85
19.9.10 elasticIterations 85
19.9.11 gravity 85
viii
19.9.12 idleSpeedThreshold 86
19.9.13 iterations 86
19.9.14 rehashShape 86
19.9.15 rehashStatic 86
19.9.16 removeBody 86
19.9.17 removeConstraint 87
19.9.18 removeShape 87
19.9.19 removeStaticShape 87
19.9.20 resizeActiveHash 87
19.9.21 resizeStaticHash 88
19.9.22 setDamping 88
19.9.23 setData 88
19.9.24 setElasticIterations 89
19.9.25 setGravity 89
19.9.26 setIdleSpeedThreshold 89
19.9.27 setIterations 89
19.9.28 setSleepTimeThreshold 90
19.9.29 sleepTimeThreshold 90
19.9.30 step 91
19.10 Constraints 91
19.10.1 Damped Rotary Spring 91
19.10.2 Damped Spring 92
19.10.3 Gear Joint 92
19.10.4 Groove Joint 93
19.10.5 Pin Joint 93
19.10.6 Pivot Joint 94
19.10.7 Ratchet Joint 94
19.10.8 Rotary Limit Joint 94
19.10.9 Simple Motor 95
19.10.10 Slide Joints 95
19.11 Arbiters and Collision Pairs 96
19.11.1 # 96
19.11.2 a 96
19.11.3 b 96
19.11.4 bodies 96
19.11.5 depth 97
19.11.6 elasticity 97
19.11.7 friction 97
19.11.8 impulse 97
19.11.9 isFirstContact 97
19.11.10 normal 98
19.11.11 point 98
19.11.12 setElasticity 98
19.11.13 setFriction 98
19.11.14 shapes 99
19.11.15 totalImpulse 99
19.11.16 totalImpulseWithFriction 99
19.12 Shape Queries 99
ix
19.12.1 pointQuery 99
19.12.2 segmentQuery 100
19.13 Space Queries 100
19.13.1 pointQuery 100
19.13.2 pointQueryFirst 100
19.13.3 segmentQuery 101
19.13.4 segmentQueryFirst 101
19.14 SegmentQueryInfo 102
19.14.1 hitDist 102
19.14.2 hitPoint 102
Chapter 20 Bluetooth® Smart Library 103
20.1 Bluetooth® LE 103
20.1.1 addStateListener 103
20.1.2 removeStateListener 104
20.1.3 pack 104
20.1.4 unpack 104
20.1.5 Format Specifier for pack and unpack 104
20.2 Bluetooth® LE Central 105
20.2.1 startScanning 105
20.2.2 stopScanning 106
20.2.3 isScanning 107
20.3 Peripheral Class 107
20.3.1 getName 107
20.3.2 getState 107
20.3.3 connect 108
20.3.4 disconnect 109
20.3.5 discoverServices 109
20.3.6 getServices 110
20.4 Service Class 110
20.4.1 getUUID 110
20.4.2 discoverCharacteristics 110
20.4.3 getCharacteristics 111
20.5 Characteristic Class 111
20.5.1 getUUID 111
20.5.2 setValueUpdateListener 111
20.5.3 setWriteCompleteListener 112
20.5.4 read 112
20.5.5 setNotify 113
20.5.6 getValue 113
20.5.7 write 113
Chapter 21 Asynchronous Serial Interface 114
21.1 require 'asi' 114
21.2 addStateListener 114
21.3 removeStateListener 115
21.4 isScanning 115
21.5 startScanning 115
21.6 stopScanning 116
x
21.7 Port Class 116
21.7.1 getName 116
21.7.2 getIdentifier 116
21.7.3 getState 116
21.7.4 setBaudRate 117
21.7.5 connect 117
21.7.6 disconnect 118
21.7.7 setWriteListener 118
21.7.8 write 119
21.7.9 setReadListener 119
21.7.10 setReadTimeout 120
21.7.11 read 120
21.7.12 getValue 120
Appendix A Script Compatibility 121
A.1 Backward and Forward Compatibility 121
A.1.1 Document Compatibility 121
A.1.2 Scripting Compatibility 121
A.2 Creating Scripts for a Future Software Release 122
A.3 Platform Compatibility 122
Appendix B Deprecated API Functions and API Behavior 123
B.1 Image Library 123
B.2 Platform Library 123
B.2.1 gc 123
B.3 Platform Library 124
B.3.1 drawString Vertical Alignment 124
B.4 Requested API Level 124
Index 125
xi
List of Tables
Table 2.1: Gesture to event handler mapping 3
Table A.1: Mapping between API level and TI-Nspire™ software version 122
i
Listings
Listing 3.1: Default Values of a new 2D Rich Text Editor 6
Listing 12.7: Calling [Link]() using a table with combined names and numbers 37
Listing 14.1: Example of Using withGC() to get the Pixel Length and Height of a String 43
Listing 18.1: Example for Accessing a Matrix via the Variable Library 49
ii
Listing A.1: Authoring for a Future Software Release for the Example of Touch 122
iii
List of Figures
Figure 8.1: Open Document Sequence Chart 20
iv
Chapter 1
Standard Libraries
The TI-Nspire™ software integrates most Lua standard libraries that come with the Lua distribution. This chapter provides an
overview about the supported Lua library functions as well as restrictions to these functions.
See the (Lua 5.1 Reference Manual) for definitions and details of the standard functions.
1
2
1Please be cautious with the use of load and loadstring. Lua source code loaded by the use of these functions is not supported
in the TI-Nspire™ Editor. This source code cannot be debugged and error messages resulting from functions loaded using load
and loadstring might cause confusing results.
2The output from the print function is directed into the console of the TI-Nspire™ Editor only. On any platform where the TI-
Nspire™ Editor is not included calls to the print function are ignored.
file io os debug
The following standard functions and standard table entries are not available in the TI-Nspire™
software:
Touch Library
The touch library is added to the TI-Nspire™ platform with [Link] = '2.2'. It is visible on all platforms but may ignore
calls to its functions if the platform running the script does not support touch.
The touch library offers a low-level interface, which enables script authors to develop scripts that run on all platforms equally. It
also places the effort on the script writer to design and test the script for all different platforms if platform compatibility is
desired.
2.1 Overview
The following will give an overview about system features and behavior that script authors need to be aware of to write
successful scripts for touch platforms and scripts working well across all TI-Nspire™ platforms.
There are different keyboard modes that might be supported on each touch platform — docked, undocked, and split keyboard.
In any mode, no resize event will be sent to the script. If the keyboard is docked, the TI-Nspire™ platform will allow the user to
pan the screen allowing access to content behind the keyboard - see setScrollHeight() for controlling scrolling by the script
while a docked keyboard is onscreen. The new [Link]() event handler supports the script with the overlapping height
of the on-screen keyboard.
Touch platforms usually support undocked and split on-screen keyboards to be panned; therefore, panning of the script is not
needed.
Note: The behavior of the mapping described in Table 2.1 is slightly different for mouse handler registered with
D2Editor:registerFilter(). In case of single and double tap will the first [Link]() event be received after the gesture
is fully recognized and the finger lifted up from the screen. Similar is true for the pan and long press gesture. The
[Link]() event is send when either the finger starts moving or the stays without moving for a particular time.
Another important aspect related to event handling is the return value of an event handler. The main use case in
[Link] = '2.0' for event handler return values has been lter event handler registered for a 2D Editor - see
D2Editor:registerFilter(). Every event handler may return a boolean to indicate if the event has been handled (true) or ignored
(false). If an event handler does not return explicitly a value, the value will default to true. In the context of touch and on-
screen keyboard, the return value of mouseDown while the keyboard is up plays an important role and can disturb the user
experience when used incorrectly. While the keyboard is up, the user can pan the screen to see content behind the keyboard. If
mouseDown returns true, or has no explicit return statement, the user will be prevented from panning the screen.
Returns pixels per inches along the diagonal of the screen. This function is useful to determine the touch target size of
touchable objects on the screen.
Introduced in [Link] = '2.2'
2.2.2 xppi
[Link]()
Returns pixels per inches along the x-axis of the screen. This function is useful to determine the touch target size of touchable
objects on the screen.
Introduced in [Link] = '2.2'
2.2.3 yppi
[Link]()
Returns pixels per inches along the y-axis of the screen. This function is useful to determine the touch target size of touchable
objects on the screen.
Introduced in [Link] = '2.2'
2.2.4 enabled
[Link]()
Returns true if the platform supports touch, otherwise false. If touch is supported, it is recommended to use the ppi values to
calculate touch target sizes.
Introduced in [Link] = '2.2'
2.2.6 isKeyboardVisible
[Link]()
Returns true if any keyboard is visible (docked, undocked, and split keyboards).
Introduced in [Link] = '2.2'
2.2.7 showKeyboard
[Link](boolean)
Causes the docked ABC keyboard to appear on the screen if no keyboard is currently visible. Default is true.
Introduced in [Link] = '2.2'
2D Editor Library
The Lua 2D editor bindings enable 2D rich text editors to be created and manipulated within the
TI-Nspire™ product. 2D rich text editors are created using newRichText().
Script authors should be aware that rich text editors may embed annotations in proprietary markup language. Such markup
could be embedded from the script by calling createMathBox() or createChemBox().
Users of the script application may also be able to copy and paste text with other markup information from other TI-Nspire™
applications like Notes. Some information about the markup language used inside the 2D editor is shown in Table 3.1 .
Table 3.1: 2D editor markup language
3.1 newRichText
[Link]()
Creates and returns a new 2D rich text editor. Default values are illustrated in Listing 3.4 .
Note
The program must resize the 2D editor before the text editor widget is painted the first time.
Listing 3.1: Default Values of a new 2D Rich Text Editor
editor:move(0, 0)
:setBorder(0)
:setBorderColor(0x000000)
:setColorable(false)
:setDisable2DinRT(false)
:setFontSize(<default system size>)
:setMainFont(<default system font>)
:setReadOnly(false)
:setSelectable(true)
:setTextColor(0x000000)
:setVisible(true)
3.2 createChemBox
D2Editor:createChemBox()
3.3 createMathBox
D2Editor:createMathBox()
Inserts a Math Box (Expression Box) in the current cursor position of the editor. Returns the text editor object.
Introduced in [Link] = '2.0'
3.4 getExpression
D2Editor:getExpression()
3.5 getExpressionSelection
D2Editor:getExpressionSelection()
Returns three values: the contents of the text editor as a UTF-8 encoded string, the cursor position as an integer, and the
selection start as an integer.
Usage
Cursor and selection positions are the borders between characters, not the position of the characters. The following code
snippets serve as examples.
Listing 3.2: Example 1 for getExpressionSelection()
3.6 getText
D2Editor:getText()
3.7 hasFocus
D2Editor:hasFocus()
3.8 isVisible
D2Editor:isVisible()
3.9 move
D2Editor:move(x, y)
Sets the parent-relative location of the upper-left corner of the text editor. Both x and y must be between -32767 and 32767.
3.10 registerFilter
D2Editor:registerFilter(handlerTable)
This routine registers a table of handler functions that can filter events before they are sent to the
2D editor widget, or unregisters if nil is passed.
Returns the text editor object.
The handlerTable is a table of event handler functions. Any event described in the section on
Event Handling can be filtered by a function in the handler table.
In the example code below, if the user presses Tab in the text editor ed, the tabKey filter function moves the focus to text
editor ed2. Events charIn and arrowKey simply report which key was pressed and then allow the event to pass on through to
the text editor.
Listing 3.4: Example for D2Editor:registerFilter()
-- Create an editor
ed = [Link]()
print(ch)
return false
end,
arrowKey = function(key)
3.11 resize
D2Editor:resize(width, height)
Changes the width and height of the text editor. Both width and height must be > 0 and <
32768.
Returns the text editor object.
Introduced in [Link] = '1.0'
3.12 setBorder
D2Editor:setBorder(thickness)
Sets the editor’s border thickness. The thickness value must be between 0 and 10. Returns the text editor object.
Introduced in [Link] = '2.0'
3.13 setBorderColor
D2Editor:setBorderColor(color)
Sets the editor’s border color. The color value must be between 0 and 16777215 (0x000000 and 0xFFFFFF).
Returns the text editor object.
Introduced in [Link] = '2.0'
3.14 setColorable
D2Editor:setColorable(boolean)
Makes the expression colorable or uncolorable. Returns the text editor object.
Introduced in [Link] = '2.0'
3.15 setDisable2DinRT
D2Editor:setDisable2DinRT(boolean)
Turns off 2D layout of math input to the text box. Returns the text editor object.
Introduced in [Link] = '2.0'
3.16 setExpression
D2Editor:setExpression(text[, cursor[, selection]])
Sets the text content of the text editor. The cursor position is set to 1 (beginning of text), -1 (end of text), or a value from 1 to
the text length plus 1. Text can be selected by specifying a selection index that indicates the end of the selection. If the
3.17 setFocus
D2Editor:setFocus(boolean)
Sets the user input focus on the editor if true (the default). This is usually called from the [Link] event handler.
Returns the text editor object.
Introduced in [Link] = '2.0'
3.18 setFontSize
D2Editor:setFontSize(size)
Sets the text font size in the editor. The point size is restricted on the TI-Nspire™ family of handhelds. Choose one of these
sizes: 7, 9, 10, 11, 12, 16, or 24. Any font size supported by Windows® or Mac OS® can be used in the desktop software.
Returns the text editor object.
Introduced in [Link] = '2.0'
3.19 setMainFont
D2Editor:setMainFont(family, style)
D2Editor:setMainFont(family, style [, fontSize]) -- API Level 2.3
Sets the main font family (“serif” or “sansserif”) and style (“r”, “b”, “i”, “bi”). The new font size parameter introduced in
[Link] = '2.3' is optional.
3.20 setReadOnly
D2Editor:setReadOnly(boolean)
Makes the text editor content modifiable (false) or unmodifiable (true) by the user. If a Boolean value is not specified, defaults
to true.
Returns the text editor object.
Introduced in [Link] = '1.0'
3.21 setSelectable
D2Editor:setSelectable(boolean)
Makes the text editor content selectable (true) or unselectable (false) by the user. If a Boolean value is not specified, defaults to
true.
Returns the text editor object.
Introduced in [Link] = '1.0'
3.22 setSizeChangeListener
D2Editor:setSizeChangeListener(function(editor, w, h))
Sets the callback function for when the editor contents exceed the current editor size, when the contents fit on fewer lines, or
when the contents fit on a single line of smaller width. This function can then resize the editor appropriately. The callback
function should be a void function. It will be passed into the following parameters:
Parameter Description
editor Editor in which the expression changed size.
w Optimal widget width to t the expression.
h Optimal widget height to t the expression.
3.23 setText
D2Editor:setText(text[, cursor[, selection]])
3.24 setTextChangeListener
D2Editor:setTextChangeListener(function(editor))
Sets the callback function for when the text expression changes. This function will be passed into the editor object. This allows
for processing text input as it occurs.
Returns the text editor object.
Info
To remove the listener, call D2Editor:setTextChangeListener(nil)
Introduced in [Link] = '2.0'
3.25 setTextColor
D2Editor:setTextColor(color)
Sets the editor text color. The color value must be between 0 and 16777215 (0x000000 and 0xFFFFFF).
Returns the text editor object.
Introduced in [Link] = '2.0'
3.26 setVisible
D2Editor:setVisible(boolean)
Sets the visibility of the text editor. Returns the text editor object.
Introduced in [Link] = '2.0'
3.27 setWordWrapWidth
D2Editor:setWordWrapWidth(width)
Sets the rich text editor word-wrapping width in pixels. Ignored if the editor is in 2D mode. To indicate widget width, sets to 0.
To disable wrapping, sets to < 0. The width must be -32767 to 32767.
Note
When word wrapping is disabled, that is the width is < 0, and ellipses are added to cut words, the negative value of the
width specifies the margin from the right of the widget before ellipses are used.
Returns the text editor object.
Introduced in [Link] = '2.0'
Class Library
The class library implements basic object-oriented class definitions.
4.1 class
class([parent_class])
Returns a new class. If a parent class is specified, the new class inherits the methods of the parent class.
Listing 4.1: Class Library Example
Widget = class()
function Widget:init() ... end
Button = class(Widget)
function Button:init() ... end
With these definitions, when the script calls Button(), a new Button is created. The Button:init() function is called to initialize
the button, and the newly minted Button object is returned as the function result of the call.
Class Button in this example inherits all the methods and class variables defined in class Widget.
Class Button can override any methods of its parent class.
Introduced in [Link] = '1.0'
Clipboard Library
5.1 addText
[Link](string)
This routine adds the contents of string to the Clipboard as plain text, MIME type "text/plain".
Introduced in [Link] = '1.0'
5.2 getText
[Link]()
This routine returns the contents of the Clipboard as a string of plain text. If the Clipboard does not contain any text (MIME
type "text/plain"), this routine returns nil.
Introduced in [Link] = '1.0'
Cursor Library
This cursor library controls the appearance of the mouse pointer. The visibility of the cursor can only be controlled on a
handheld.
Touch platforms do not support the concept of a mouse cursor, therefore any call to this library will be ignored on touch
platforms.
A good practice is to request the expected cursor appearance within [Link](). Calls on the cursor library are ignored while
deactivated (after [Link]() is received).
6.1 set
[Link](cursorname)
Parameter cursorname is a string that contains the name of the cursor shape to use for the mouse pointer. It can be one of the
following strings:
“hand pointer” Y Used to indicate that the underlying object can be selected or activated
with a click.
“crosshair” Y Used for fine control of a selection – often used to indicate the bounds of
a rectangular region selection.
"hand closed" N Indicates that the underlying object has been grabbed.
"drag grab" N Typically used to indicate that a pan type of operation is in progress.
“rotation” Y Indicates that the underlying object can be rotated and is also used to
indicate that the rotation operation is ongoing.
“translation” Y Indicates that the underlying object can be translated and is also used to
indicate that the translation operation is ongoing.
"dilation" Y Indicates that the underlying object can be dilated and is also used to
indicate that the dilation operation is ongoing.
“diag resize” Y Indicates that a grab at this location will initiate a diagonal resize
operation. A hand closed should be used during the resize operation.
“resize Y Indicates that a grab at this location will initiate a resize column or
column” horizontal resize operation. A hand closed should be used during the
resize operation.
“zoom box” Y Indicates that a click will initiate a zoom box operation.
"pencil" Y Indicates that a click will result in the next step in some kind of
construction or drawing operation.
"interrogate" N
"text" N Indicates that the underlying object is text and that a click will initiate an
edit of that text.
"link select" N Used as part of a linking operation to indicate that the underlying object is
available to be linked to.
"unavailable" N The current operation is unavailable for the underlying object.
"wait busy" N Used by the system to indicate that the handheld is busy doing work.
"writing" N Deprecated.
"hollow Y Used when you need a SmartClick mouse pointer. Indicates that the
pointer" object under the cursor can be selected.
"excel plus" Y Used to indicate the location suitable for initiation of a drag to fill
operation.
What is SmartClick?
• SmartClick improves the user experience by making it easier to center click on an object.
How does it work?
6.2 hide
[Link]()
6.3 show
[Link]()
Document Library
7.1 markChanged
[Link]().
This routine marks the current document as changed. The user is prompted to save the TI-Nspire™ document before closing.
Introduced in [Link] = '1.0'
Event Handling
Script applications respond to external stimuli by implementing event handlers. All the event handlers are grouped in the “on”
module.
Example
For example, the application script implements [Link](gc) to be notified when it is time to redraw its window. [Link] is
passed a graphics context that it can use to call drawing routines on its window.
Listing 8.1: Event Handler Example
function [Link](gc)
gc:drawLine(...)
:
end
8.1 activate
[Link]()
This routine is called when the script application is activated. The dimensions of the drawing window cannot be initialized at
this point, so it is not a good place to create and position graphical elements if they depend on the window size.
Introduced in [Link] = '1.0'
8.2 arrowDown
[Link]()
This routine is called when the user presses the down arrow key.
Introduced in [Link] = '1.0'
8.3 arrowKey
[Link](key)
8.4 arrowLeft
[Link]()
This routine is called when the user presses the left arrow key.
Introduced in [Link] = '1.0'
8.5 arrowRight
[Link]()
This routine is called when the user presses the right arrow key.
Introduced in [Link] = '1.0'
8.6 arrowUp
[Link]()
This routine is called when the user presses the up arrow key.
Introduced in [Link] = '1.0'
8.7 charIn
[Link](char)
This routine is called when the user types a letter, digit, or other character. The parameter char is normally a one-byte string,
but because it can contain a UTF-8 encoded character, it may be two or more bytes long. It may also contain the letters of a
function name from one of the
short-cut keys, such as “sin” from the trig menu.
Introduced in [Link] = '1.0'
8.8 backspaceKey
[Link]()
This routine is called when the user presses Backspace on the desktop keyboard or the Del key on the handheld keypad.
Introduced in [Link] = '1.0'
8.9 backTabKey
[Link]()
This routine is called when the user presses the Clear key on the handheld keypad.
Introduced in [Link] = '1.0'
8.11 construction
[Link]()
8.12 contextMenu
[Link]()
This routine is called when the user presses the context Menu key.
Introduced in [Link] = '1.0'
8.13 copy
[Link]()
This routine is called when the user selects the Copy command either from a menu or by pressing Ctrl + C.
Note
Copy is enabled/disabled by [Link](enable).
Introduced in [Link] = '1.0'
8.14 create
[Link]()
8.15 createMathBox
[Link]()
This routine is called when the the user presses Ctrl + M or inserts a Math Box (Expression Box). The implementation for this
callback should call the corresponding 2D editor to insert a math box if applicable.
Introduced in [Link] = '2.0'
This routine is called when the user selects the Cut command either from a menu or by pressing Ctrl + X.
Note
Cut is enabled/disabled by [Link](enable).
Introduced in [Link] = '1.0'
8.17 deactivate
[Link]()
This routine is called when the script is deactivated. This happens when the user moves the focus to another page or to another
application on the same page.
Introduced in [Link] = '1.0'
8.18 deleteKey
[Link]()
This routine is called when the user presses the Delete key on the desktop keyboard. This is not the Del key on the handheld
keypad.
Introduced in [Link] = '1.0'
8.19 destroy
[Link]()
This routine is called just before the script application is deleted. A script app is deleted when it is cut to the Clipboard and
when the document that contains it is closed.
Introduced in [Link] = '1.0'
8.20 enterKey
[Link]()
This routine is called when the user presses the Enter key.
Introduced in [Link] = '1.0'
8.21 escapeKey
[Link]()
This routine is called when the user presses the Esc key.
Introduced in [Link] = '1.0'
8.22 getFocus
[Link]()
8.23 getSymbolList
[Link]()
This routine is called when the script app symbol list is being serialized to the Clipboard. The script app returns a list of names of
variables in the symbol table that it needs to copy with it to the Clipboard. The TI-Nspire™ software copies the names and
values of the variables along with the script app. Then when the user pastes the script app in another problem, the system adds
the companion variables to the problem symbol table.
As a remark, [Link]() is called when a page containing a script app is copied, but not when a problem containing a
script app is copied. This is because the entire symbol table is copied when the problem is copied.
For example, the following function indicates that it needs variable f1 to be copied with the app to the Clipboard. The value of
f1 will be added to the symbol table when it is pasted into another problem even in another TNS document.
Listing 8.2: Example for getSymbolList
function [Link]()
return {"f1"}
end
8.24 grabDown
[Link](x, y)
The grabDown and grabUp events prevent the generation of a mouseUp event in all cases. They will be preceded by a
mouseDown event when generated by pressing and holding the Select key on a device.
Introduced in [Link] = '1.0'
8.25 grabUp
[Link](x, y)
This routine is called when the mouse button is released while grab is in effect.
x & y are always zero
Introduced in [Link] = '1.0'
8.26 help
[Link]()
This routine is called when the user presses the Help key. On the desktop, the Help key is Ctrl + Shift + ?. On the handheld, it is
Ctrl + ?, the control key over the Trig button.
Introduced in [Link] = '1.0'
This routine is only called on touch-enabled platforms. It indicates that any docked keyboard has been hidden by the user or
the script by calling [Link](false)
Introduced in [Link] = '2.2'
8.28 keyboardUp
[Link](keyboardOverlapHeight)
This routine is only called on touch-enabled platforms. It indicates that a docked keyboard opened on the screen and may
overlap the script content. The parameter keyboardOverlapHeight provides the height if an overlap occurs. The return value of
this routine controls if user scrolling should be enabled via the pan gesture. If returning true user scrolling is enabled otherwise
(false) scrolling needs to be implemented by the script in terms of alternating the content drawn by [Link](). The default
value is true.
Introduced in [Link] = '2.2'
8.29 loseFocus
[Link]()
This routine is called when the script loses user input focus.
Introduced in [Link] = '2.0'
8.30 mouseDown
[Link](x, y)
This routine is called when the user clicks the mouse. x and y are in window-relative pixel coordinates.
Note
This event will NOT be generated if the right mouse button is being held down.
Introduced in [Link] = '1.0'
8.31 mouseMove
[Link](x, y)
This routine is called when the user moves the mouse pointer. The mouse button does not have to be pressed to receive these
events.
Introduced in [Link] = '1.0'
8.32 mouseUp
[Link](x, y)
This routine is called when the user releases the mouse button.
Note
This event will NOT be generated in the following cases:
• The preceding mouseDown event was blocked because the right mouse button was down already.
8.33 paint
[Link](gc, x, y, width, height)
This routine is called when the script application window needs to be painted. The gc graphics context is used in the script code
to draw on the window. Additionally it provides the rectangle to be painted. Usually the provided rectangle will match the one
provided to invalidate() (subsection 14.7.2) however the system might merge multiple consecutive calls to invalidate in one
single paint rectangle. This merge optimization varies based on platform and screen resolution.
Introduced in [Link] = '1.0'
Extended in [Link] = ‘2.4’
8.34 paste
[Link]()
This routine is called when the user selects the Paste command either from a menu or by pressing
Ctrl + V.
Note
Paste is enabled/disabled by [Link](enable).
Introduced in [Link] = '1.0'
8.35 propertiesChanged
[Link](propertiesTable)
This routine is called on property changes. Currently all property changes are propagated as unsolicited events. Future API level
may require registration for certain properties.
8.36 resize
[Link](width, height)
This routine is called when the script application window changes size. This is a good place to initialize (or relayout) graphical
objects based on the window size.
Introduced in [Link] = '1.0'
8.37 restore
[Link](state)
8.38 returnKey
[Link]()
This routine is called when the user presses the Return key on the handheld keypad.
Introduced in [Link] = '1.0'
8.39 rightMouseDown
[Link](x, y)
This routine is called when the user clicks the right mouse button. x and y are in window-relative pixel coordinates.
Note
Only available on the desktop version.
Mouse events are exclusive, which means that a rightMouseDown event cannot occur while the left mouse button is being
held down and vice versa.
Introduced in [Link] = '1.0'
8.40 rightMouseUp
[Link](x, y)
This routine is called when the user releases the right mouse button.
Note
Only available on the desktop version.
This event will NOT be generated in the following cases:
• The preceding rightMouseDown event was blocked because the left mouse button was already down.
• The preceding rightMouseDown event was not handled.
Introduced in [Link] = '1.0'
8.41 save
[Link]()
This routine is called when the script app is saved to the document or copied to the Clipboard. The script should return a table
of data needed to properly restore when the [Link] event handler is called.
Introduced in [Link] = '1.0'
This routine is called when the user presses the Tab key.
Introduced in [Link] = '1.0'
8.43 timer
[Link]()
If the script application implements [Link], the system calls this routine each time the timer ticks.
Introduced in [Link] = '1.0'
8.44 varChange
[Link](varlist)
This routine is called when a monitored variable is changed by another application. The varlist is a list of variable names whose
values were changed. This handler must return a value to indicate if it accepts the new value(s) or vetoes the change.
Valid return values are:
Graphics Library
A graphics context is a module that has a handle to the script’s graphics output window and a library of graphics routines that
are used to draw on the window. A graphics context is supplied to the script [Link] event handler each time the window
needs to be redrawn.
The graphics context employs a pixel-based coordinate system with the origin in the upper left corner of the drawing window.
9.1 clipRect
gc:clipRect(op[, x, [y, [width, [height]]]])
Operation Description
reset Sets the clipping rectangle to include the entire window. The remaining parameters are
ignored and can be left out.
set Sets the clipping rectangle to the x, y coordinates with the specified width and height.
Unspecified parameters default to the system window location and size.
intersect Removed in [Link] = ‘2.0’.
null Sets the clipping rectangle to empty. All subsequent graphics commands are ignored.
Typically the “set” operation is called before drawing, such as for a text string. It is important to call the “reset” operation after
drawing the last clipped graphic so that you do not leave a lingering clipping rectangle as a side effect.
Introduced in [Link] = '1.0'
9.2 drawArc
gc:drawArc(x, y, width, height, startAngle, arcAngle)
Draws an arc in the rectangle with upper left corner (x,y) and pixel width and height. Both the width and height must be ≥ 0.
The arc is drawn beginning at startAngle degrees and continues for endAngle degrees. Zero degrees points to the right, and 90
degrees points up (standard mathematical practice but worth mentioning since the y axis is inverted).
To draw a circle, the width and height must be equal in length, and the start and end angles must be 0 and 360. If the width and
height are different lengths, this routine draws an oval.
Introduced in [Link] = '1.0'
9.3 drawImage
gc:drawImage(imageHandle, x, y)
Draws an image at (x, y). The image must have been created by a previous call to [Link](...).
Introduced in [Link] = '1.0'
9.5 drawPolyLine
gc:drawPolyLine({x1, y1, x2, y2, ..., xn, yn})
Draws a series of lines connecting the (x, y) points. The polygon is not closed automatically. The first x-y coordinate pair must be
repeated at the end of the array of points to draw a closed polygon.
Introduced in [Link] = '1.0'
9.6 drawRect
gc:drawRect(x, y, width, height)
Draws a rectangle at (x, y) with the given pixel width and height. Both width and height must be ≥ 0.
Introduced in [Link] = '1.0'
9.7 drawString
gc:drawString("text", x, y [,vertalignment])
Draws text on the window beginning at pixel location (x,y). Vertical alignment may be “baseline”, “bottom”, “middle”, or “top”.
This aligns the text in the height of the characters’ bounding rectangle.
Prior to [Link] = '2.3' “none” was used to specify unspecified alignment. The vertical alignment “none” has been
deprecated. Specifying no alignment defaults to “top” and so does “none”.
Returns the x pixel position after the text.
Introduced in [Link] = '1.0'
Extended in [Link] = ‘2.3’
9.8 fillArc
gc:fillArc(x, y, width, height, startAngle, endAngle)
Fills an arc with the preset color. Both width and height must be ≥ 0. See setColorRGB to set the fill color.
Introduced in [Link] = '1.0'
9.9 fillPolygon
gc:fillPolygon({x1, y1, x2, y2, ... xn, yn})
Fills a polygon with the preset color. The array of points bounds the polygon. To set the fill color, see setColorRGB.
Introduced in [Link] = '1.0'
Fills a rectangle with the preset color. Both the width and height must be ≥ 0. To set the fill color, see setColorRGB.
Introduced in [Link] = '1.0'
9.11 getStringHeight
gc:getStringHeight("text")
Returns the pixel height of the text. The pixel height is determined by the font setting previously set by a call to setFont.
Introduced in [Link] = '1.0'
9.12 getStringWidth
gc:getStringWidth("text")
Returns the pixel width of text. The pixel width is calculated using the font setting previously set by a call to setFont.
Introduced in [Link] = '1.0'
9.13 setColorRGB
gc:setColorRGB(red, green, blue)
gc:setColorRGB(0xRRGGBB) -- API Level > '1.0'
Sets the color for subsequent draw and fill routines. The red, green, and blue components of the color are values in the range of
0 to 255. Black is 0,0,0 and white is 255,255,255. Alternately, a single value can be passed in. The components of this single
value are blue + 255 * (green + 255
* red).
Introduced in [Link] = '1.0'
Extended in [Link] = ‘2.0’
9.14 setFont
gc:setFont(family, style, size)
Sets the font for drawing text and measuring text size. Family may be “sansserif” or “serif”. Style may be “r” for regular, “b” for
bold, “i” for italic, or “bi” for bold italic.
The point size of the font is restricted on the TI-Nspire™ CX and older handhelds. Choose one of these sizes: 7, 9, 10, 11, 12, or
24. Any font size supported by Windows® or Mac OS® can be used on the desktop software.
Returns the font family, style, and size previously in effect.
Introduced in [Link] = '1.0'
9.15 setPen
gc:setPen([thickness[, style]])
Sets the pen for drawing lines and borders. Thickness may be “thin”, “medium”, or “thick”. If the thickness is not specified, it
defaults to “thin”. The style can be “smooth”, “dotted”, or “dashed”. If the style is not specified, it defaults to “smooth”.
Introduced in [Link] = '1.0'
Image Library
An “image” object is a container for graphical images, typically small GUI objects such as buttons, arrowheads, and other such
graphical adornments.
Starting with [Link] = '2.3' this library has been reworked to image resources rather then images encoded as strings
inside the script itself. Please refer to section B.1on page 163 for details about the deprecated behavior.
10.1 new
img = [Link](string) -- API Level < 2.3
img = [Link](resource) -- API Level 2.3
This function returns a new image object from an image resource or string, based on the API level. These two different kinds of
image description cannot be mixed within one script. Image resources support alpha blending on all platforms of the TI-Nspire™
product family.
For details about authoring image resources please refer to the Script Editor section in either the teacher or student TI-Nspire™
software guidebook.
Introduced in [Link] = '1.0'
Extended in [Link] = ‘2.3’
10.2 copy
cimage = image:copy(width, height)
Returns a copy of the input image scaled to fit the specified pixel width and height. The width and height default to the size of
the input image.
Introduced in [Link] = '1.0'
10.3 height
h = image:height()
10.4 rotate
rimage = image:rotate(angle)
Locale Library
11.1 name
[Link]()
Returns the name of the current locale. The locale name is a two-letter language code. The language code may be followed by
an underscore and two-letter country code.
Introduced in [Link] = '1.0'
12.1 eval
[Link](math_expression) -- [Link] = '2.0'
[Link](math_expression [,exact]) -- [Link] = '1.0'
This function sends an expression or command to the TI-Nspire™ math server for evaluation. The input expression must be a
string that the TI-Nspire™ math server can interpret and
evaluate.
The second parameter, exact, ([Link] = '1.0' only) is meaningful only with the Computer Algebra System. If true, it
instructs the math server to calculate and return exact numerical results when it can. The default value of exact is false, in
which case the math server attempts to calculate an approximate result.
Beginning with [Link] = '2.0', the evaluation is performed using the current document settings, except that all
evaluations are performed at full precision in approximate mode. The current document settings can be overridden by
[Link].
If the math server evaluates the expression successfully, it returns the results as a fundamental Lua data type. If the math
server cannot evaluate the expression because of a syntax, simplification, or semantic error, eval returns two results: nil and an
error number meaningful to the math server. (The error numbers are documented in the TI-Nspire™ Reference Guide - Error
Codes and Messages for [Link].) If the math server calculates a symbolic result, it cannot be represented as a fundamental
Lua type, so eval returns nil and the string “incompatible data type.”
Example
To evaluate f1 for a given value in x, the parameter x must be converted to a string, and then any embedded “e” must be
replaced with Unicode character U+F000.
Listing 12.1:
Converting a Lua Number to a String to be Used in [Link]() (E Notation)
Note
Because [Link] always does calculations in approximate mode, things like Boolean logic and some conversions will
throw an error:
12.2 evalStr
[Link](math_expression)
This function sends an expression or command to the TI-Nspire™ math server for evaluation. The input expression must be a
string that the TI-Nspire™ math server can interpret and evaluate. The evaluation is performed using the current document
settings, which can be overridden by [Link]. NOTE: All evaluations are performed at full precision regardless of
the document settings or overrides.
If the math server evaluates the expression successfully, it returns the results as a string. The evalStr function returns no result
if the math server does not return a calculated result. If the math server cannot evaluate the expression because of a syntax,
simplification, or semantic error, evalStr returns two results: nil and an error number meaningful to the math server.
Scientific Notation
The evaluation of “10.2∧ 20” (document settings in auto mode) returns the following result: 1.4859473959784 20. A closer
look at the result string reveals the box character as “\239\128\128”, which is the Unicode character U+F000 – a small
capital letter “E” used inside TI-Nspire™ software for the E notation.
Listing 12.2: [Link]() Returning Result in E Notation
Negative numbers
The evaluation of “2-3” returns “-1”. The result string will be encoded as
“\226\136\146\49”. “\226\136\146” is Unicode character U+2212, which is a minus
sign.
Listing 12.3: [Link]() Returning Negative Numbers
12.3 getEvalSettings
[Link]()
{
{'Display Digits', 'Float6'},
{'Angle Mode', 'Radian'},
{'Calculation Mode', 'Auto'},
{'Real or Complex Format', 'Real'},
{'Exponential Format', 'Engineering'},
{'Vector Format', 'Normal'},
{'Base', 'Decimal'},
{'Unit System', 'SI'}, }
}
12.4 setEvalSettings
[Link](settingStructure)
This function is used to override one or more of the current document settings for all subsequent math evaluations performed
by [Link] and [Link]. It does not change the document context settings. The setting structure is a table of tables.
Each inner table consists of the name of the document setting to override and the name of the value to use instead.
Listing 12.5: Calling [Link]() using a table with names
settings = {
{'Unit System', 'Eng/US'},
{'Calculation Mode', 'Approximate'},
{'Real or Complex Format', 'Polar'},
{'Exponential Format', 'Engineering'}
}
[Link](settings)
For user convenience, setEvalSettings also accepts the ordinal number of the setting to override and the ordinal number of the
value to use instead. The ordinal numbers to use correspond to the order of the settings and their values found at File >
Settings > Document Settings.
Listing 12.6: Calling [Link]() using a table with ordinal number
settingsTable = {
{2, 3},
{4, 3},
{6, 3},
{8, 2}
}
[Link](settingsTable)
In fact, setEvalSettings accepts any combination of names and ordinal numbers. So the following example is also valid.
Listing 12.7: Calling [Link]() using a table with combined names and numbers
settings = {
{3, 'Exact'},
{'Angle Mode', 2},
{'Real or Complex Format',
'Polar'},
{8, 2}
}
[Link](settings)
Module Library
require '<library name>'
Use require to load predefined libraries in TI-Nspire™ software. Please see the following table.
The behavior of require is the same as in standard Lua, but the available libraries are restricted. User-defined libraries are not
supported.
Library Description
color Table defining colors used in TI-Nspire™ software to color objects using the color picker.
physics Loads the physics module.
ble Basic Bluetooth® LE Interface
bleCentral Bluetooth® LE Interface for the central role
Platform Library
Platform specific information is available through the platform library.
14.1 apiLevel
[Link]
Uniquely identifies the Script environment. If the script does not request a desired API level it will always default to the API
level the script was created with.
Requesting a non-supported API level will result in the highest supported but below the requested API level supported by the
TI-Nspire™ software version running the script. But requesting an API level below [Link] = '1.0' will result in the
current API level of TI-Nspire™ software version running the script. Please see section A.1 for more details.
Note
• If present, the [Link] = ‘X.X’ statement should be in the main part of the script only. It is advisable to place it on
the first line of the script.
• Dynamically loaded scripts (load() or loadstring()) will use the same “[Link]
= ‘X.X’” as the main script. Requesting to change the API level within dynamically loaded scripts causes an error.
Introduced in [Link] = '2.0'1
Extended in [Link] = ‘2.3’
14.2 hw
[Link]()
Returns a numeric value that indicates the CPU speed of the host hardware. The higher the number, the faster the hardware.
14.3 isColorDisplay
[Link]()
Returns true if the display of the host platform is color. Returns false if the display is grayscale.
Introduced in [Link] = '1.0'
1Please see section B.4 on for details about the original behavior.
Returns true if the script is running on the handheld or in the emulator of the desktop software. Returns false if the script is
running in the normal view of the desktop software.
Note
[Link] is not available during script initialization or within [Link].
Introduced in [Link] = '1.0'
14.5 isTabletModeRendering
[Link]()
Returns true if the script is running on a tablet supporting touch otherwise false.
Introduced in [Link] = '2.2'
14.6 registerErrorHandler
[Link](function(lineNumber, errorMessage,
callStack, locals) ... end)
This function sets the error handler callback function for the script. Setting an error handler callback function provides control
over what happens when an error is encountered in the script. Returning a true value prevents reporting the Error to the user.
The script will continue executing on the next event.
Note
The error handler callback function is not called for errors that occur during initialization or within [Link].
Introduced in [Link] = '2.0'
14.7 window
[Link]
Returns the window object that the script application currently owns. The window consists of the portion of the page allotted
to the script app. Several applications can be visible when the page is arranged in a split layout. Each visible application has its
own window.
The window object has several methods of particular interest.
Introduced in [Link] = '1.0'
Routines height() and width() return the pixel height and width respectively of the display window.
Introduced in [Link] = '1.0'
14.7.2 invalidate
[Link]:invalidate(x, y, width, height)
Invalidating multiple regions at a time might result in one or multiple calls to [Link] depending on the region and the
platform. Therefore the implementation of [Link] should not make any assumptions about the region to draw, but always
draw all of the screen.
Introduced in [Link] = '1.0'
14.7.3 setBackgroundColor
[Link]:setBackgroundColor([0xRRGGBB])
Sets the background color for the Script Application. If no color is provided, it defaults to none, causing the background color of
the Script Application to be the one of the system which is white.
Introduced in [Link] = '2.4'
14.7.4 setFocus
[Link]:setFocus(boolean)
This function sets the focus to the main window. Any focus of other objects is removed (currently only D2Editor).
Introduced in [Link] = '2.0'
14.7.5 getScrollHeight
[Link]:getScrollHeight()
This function returns the current scroll height if a docked keyboard is shown or 0 otherwise. Therefore the return value will
always be 0 on platforms not supporting touch.
See [Link]() for details about keyboard availability.
Introduced in [Link] = '2.2'
14.7.6 setScrollHeight
[Link]:setScrollHeight()
Sets the scroll height if a docked keyboard is shown or is ignored otherwise. The valid range for this function is 0 to <keyboard
overlap height>. See [Link]() for keyboard overlap height.
Introduced in [Link] = '2.2'
14.7.7 displayInvalidatedRectangles
[Link]:displayInvalidatedRectangles(boolean)
14.8 withGC
[Link](function, ...)
Executes function(... , gc) within a non-painting graphics context and returns all return values from function(). It is used to
support layout procedures that measure the width and height of strings outside of the paint context. It is a good practice to
separate the layout from the paint routine to enhance the performance of the script. A layout may happen during [Link]()
and when data is changing based on user interaction or timer expiration. The script should not assume that any state, like a
font size, is preserved from one call of [Link] to the next call of [Link].
This graphics context cannot be used to draw.
Listing 14.1: Example of Using withGC() to get the Pixel Length and Height of a String
14.9 getDeviceID
[Link]()
15.1 split
[Link](str [,delim])
Divides str into substrings based on a delimiter, returning a list of the substrings. The default pattern for the delimiter is white
space (“%s+”).
Introduced in [Link] = '1.0'
15.2 uchar
[Link](chnum, ...)
Unicode characters can be included in strings by encoding them in UTF-8. This routine converts one or more Unicode character
numbers into a UTF-8 string.
Introduced in [Link] = '1.0'
15.3 usub
[Link](str, startpos, endpos)
or
str:usub(startpos, endpos)
This routine returns a substring of str. It is the Unicode version of [Link]. It accounts for multi-byte characters encoded in
UTF-8.
Caution
This is an expensive routine. It allocates a temporary memory buffer during its operation.
Listing 15.1: Examples for [Link]()
15.4 pack
characteristicValue = [Link]("formatString", ...)
Packs one or multiple Lua values into a Bluetooth ® LE characteristic data value. The number or arguments after the
formatString must match the number of formats specified inside the formatString. The format specifier used to build the
formatString as specified in Table 20.1 and additional details can be found in subsection 20.1.5.
If the format is complex and repetitively used across multiple characteristic values it it is possible to split the packing of the data
into multiple calls to pack. Combining the multiple pack results into one piece of data can be achieved by string concatenation.
Listing 15.3 shows two simple
lines which result in the same data value.
Listing 15.3: Concatenation of Multiple calls to [Link]()
15.5 unpack
..., remnant = [Link]("formatString", characteristicValue)
Unpacks a Bluetooth ® LE characteristic data value into one or multiple Lua values. The number of returned values is defined by
the format specifiers inside the formatString. All supported format specifiers are listed in Table 20.1 and additional details can
be found in subsection 20.1.5 .
Similar to the pack function it is possible to split the unpacking of the data into multiple calls to unpack. This can be achieved by
passing the remnant returned of one call to unpack as characteristic value to the next call of unpack. Listing 15.5 show the
two scenarios.
Listing 15.5: Splitting Unpacking into Multiple calls to [Link]()
Timer Library
Each script application has one timer at its disposal. The timer resolution depends on the platform. It is about 0.02 second on
the handheld. Please be cautious with short timer periods on the handheld.
The script application should implement the [Link]() function to respond to timer expiration.
The timer continues to send ticks to the script application even when its window is not visible on the screen.
The timer is stopped automatically when the document containing the script application is closed or if the script application is
deleted from the document.
16.1 getMilliSecCounter
[Link]()
Returns the value of the internal millisecond counter. The counter rolls over to zero when it passes 232 milliseconds.
16.2 start
[Link](period)
Starts the timer with the given period in seconds. The period must be ≥ 0.01 (10 ms). If the timer is already running when this
routine is called, the timer is reset to the new period.
Introduced in [Link] = '1.0'
Caution
[Link]() should not be called when processing an [Link]() event unless it is the final statement before the [Link]()
event completes.
16.3 stop
[Link]()
17.1 register
[Link](menuStructure)
The script app uses this routine to register its tool palette with the TI-Nspire™ framework. The menu structure is a table
describing the name of each toolbox, the menus that appear in each tool box, and the function to call when the user invokes
the menu item.
The function [Link]() can be called once in the top level flow of the script app. Once registered, the tool palette is
managed automatically by the TI-Nspire™ framework. Up to 15 toolboxes can be created with up to 30 menu items each.
When the user chooses an item from a tool box, the associated function is called with two parameters: the name of the toolbox
and the name of the menu item.
A call to [Link]() within the paint context might be ignored and should therefore be avoided.
Beginning with apiLevel ‘2.0’ [Link]() can be called multiple times in the program flow to change dynamically at
runtime.
Calling [Link](nil) deactivates the toolpalette.
Listing 17.1 demonstrate the layout of a tool palette’s menu structure.
Introduced in [Link] = '1.0'
Extended in [Link] = ‘2.0’
Listing 17.1: Registering a Tool Palette
menu = {
{"Mode", -- Tool box "Mode"
{"Decimal", setDec}, -- Menu item "Decimal" calls setDec()
{"Hexadecimal", setHex},
"-", -- Section divider
{"Signed", setSigned},
{"Unsigned", setUnsigned},
},
{"Boolean",
{"And", binopAnd},
{"Or", binopOr},
},
} [Link](menu)
17.2 enable
[Link](toolname, itemname, enable)
This routine enables or disables a menu item in the tool palette. Parameter toolname is a string containing the name of the top
level tool box. Parameter itemname is a string containing the name of the menu item. Parameter enable is a Boolean value
that enables the menu item if true or disables the menu item if false.
17.3 enableCut
[Link](enable)
This routine enables or disables the Edit > Cut menu command. Parameter enable is a Boolean value that enables the command
if true or disables the menu item if false.
Introduced in [Link] = '1.0'
17.4 enableCopy
[Link](enable)
This routine enables or disables the Edit > Copy menu command. Parameter enable is a Boolean value that enables the
command if true or disables the menu item if false.
Introduced in [Link] = '1.0'
17.5 enablePaste
[Link](enable)
This routine enables or disables the Edit > Paste menu command. Parameter enable is a Boolean value that enables the
command if true or disables the menu item if false.
Introduced in [Link] = '1.0'
Variable Library
A symbol table is used by the TI-Nspire™ math engine to calculate and store variables. This library gives scripts access to the
variables stored in the symbol table.
Not all variables in the symbol table have compatible types in Lua, but many important variable types are supported: real and
integer numbers, strings, and lists of numbers and strings, matrices (represented in Lua as lists of lists), and boolean constants
true and false.
18.1 list
[Link]()
This function returns a list of names of variables currently defined in the symbol table.
Introduced in [Link] = '1.0'
18.2 makeNumericList
[Link](name)
Creates a list in the symbol table with the given name. The list is optimized to hold numeric values. Routines storeAt and
recallAt operate much more efficiently on lists that are created with this function.
Usage Note
This function cannot be used to create a numeric matrix. Routines [Link] and [Link] documented below will work
with matrices but only if they are created by some other means (see Listing 18.1).
Listing 18.1: Example for Accessing a Matrix via the Variable Library
18.3 monitor
[Link](name)
Turns on monitoring of the math variable with given name. When another application changes the math variable, this script
application’s [Link] handler is called. See the description of [Link] below. Any other return value from 0 is an
error value.
Introduced in [Link] = '1.0'
18.4 recall
[Link](name)
18.5 recallAt
[Link](name, col [,row])
Recalls a value from a cell of a list or matrix in the symbol table. col is a 1-based column number of the matrix or list. row is a 1-
based row number. row is only required when recalling a value from a matrix.
This function is optimized to work with numeric values and normally returns a number. If the value of the recalled cell is not
numeric, this function returns nil and an error message
string.
Introduced in [Link] = '2.0'
18.6 recallStr
[Link](name)
Returns the value of a math variable with the given name as a string. Some math types have no compatible Lua type but all
math types can be represented as a string. If the value cannot be recalled even as a string, this function returns nil and an error
message.
Introduced in [Link] = '1.0'
18.7 store
[Link](name, value)
Stores value as a math variable with the given name. If the value cannot be stored, an error message is returned; otherwise, nil
is returned.
Introduced in [Link] = '1.0'
18.8 storeAt
[Link](name, numericValue, col [, row])
Stores a numeric value into an element of a math list or matrix with the given name. col is a 1-based column number of the
matrix or list. row is a 1-based row number. row is only required when storing a value into a matrix.
The value must be numeric. Any other type raises an error.
New values can be appended to a list by storing to one column past the end of the list. This function is useful particularly as an
optimization when adding new values to a list during a simulation.
Returns nil on success or “cannot store” if the value cannot be stored at the given index.
Introduced in [Link] = '2.0'
18.9 unmonitor
[Link](name)
Physics Library
This is an interface library to Chipmunk Physics version 5.3.4. For details about this library see [Link]
[Link]/release/Chipmunk-5.x/Chipmunk-5.3.4-Docs/.
To use this library the physics module must be loaded: “require ('physics')”.
This library is introduced in [Link] = ‘2.0’.
19.1.2 momentForBox
inertia = [Link](mass, width, height)
This routine computes the moment of inertia for a solid box. This is a useful helper routine for computing the moment of inertia
as an input to the [Link](...) constructor.
Introduced in [Link] = '2.0'
19.1.3 momentForCircle
inertia = [Link](mass, innerRadius,
outerRadius, offBody)
This routine computes the moment of inertia for a circle. A solid circle has an inner radius of 0. This is a useful helper routine for
computing the moment of inertia as an input to the [Link](...) constructor.
Introduced in [Link] = '2.0'
19.1.4 momentForPoly
inertia = [Link](mass, vertices, offset)
This routine computes the moment of inertia for a polygon. This is a useful helper routine for computing the moment of inertia
as an input to the [Link](...) constructor.
Introduced in [Link] = '2.0'
19.1.5 momentForSegment
inertia = [Link](mass, endPointA,
endPointB)
This routine computes the moment of inertia for a segment. The end points can be in either
world or local coordinates. This is a useful helper routine for computing the moment of inertia as an input to the [Link]
(...) constructor.
Introduced in [Link] = '2.0'
19.2 Vectors
A vector is a 2-dimensional object with x and y components. Its type is [Link].
19.2.1 Vect
vector = [Link](x, y)
vector = [Link](angle)
vector = [Link](vect)
Creates a vector with initial x and y component values. The second form creates a unit vector pointing in direction angle. The
third form creates a copy of the input vector.
Introduced in [Link] = '2.0'
19.2.2 add
sum = [Link]:add(vec)
19.2.3 clamp
clamped = [Link]:clamp(len)
19.2.4 cross
crossprod = [Link]:cross(vec)
19.2.6 distsq
distsq = [Link]:distsq(vec)
Returns the distance squared between self and vec. For distance comparison, this routine is faster than [Link]:dist.
Introduced in [Link] = '2.0'
19.2.7 dot
dotprod = [Link]:dot(vec)
19.2.8 eql
isequ = [Link]:eql(vec)
Returns true if the x and y components of self equal those of vec. Take the usual precautions when comparing floating point
numbers for equality.
The Vect class also implements the equal comparison operator (==). Therefore vectors v1 and v2 can be compared with the
expression v1 == v2.
Introduced in [Link] = '2.0'
19.2.10 lengthsq
lensq = [Link]:lengthsq()
Returns the length squared of self. This routine is faster than Vect:length() when you only need to compare lengths.
Introduced in [Link] = '2.0'
19.2.11 lerp
v = [Link]:lerp(vec, f)
Returns the linear interpolation between self and vec as a vector. f is the fraction of distance between self and vec.
Note
May not behave as expected for f larger than 1.0 or less than 0.
Introduced in [Link] = '2.0'
19.2.12 lerpconst
v = [Link]:lerpconst(vec, d)
19.2.13 mult
v = [Link]:mult(factor)
19.2.14 near
isnear = [Link]:near(vec, distance)
19.2.15 neg
v = [Link]:neg()
19.2.16 normalize
normvec = [Link]:normalize()
19.2.17 normalizeSafe
normvec = [Link]:normalizeSafe()
19.2.18 perp
perpvec = [Link]:perp()
19.2.19 project
pvec = [Link]:project(vec)
19.2.20 rotate
rvec = [Link]:rotate(vec)
Uses complex multiplication to rotate self by vec. Scaling will occur if self is not a unit vector.
Introduced in [Link] = '2.0'
19.2.21 rperp
perpvec = [Link]:rperp()
19.2.22 setx
self = [Link]:setx(x)
19.2.23 sety
self = [Link]:sety(y)
19.2.24 slerp
v = [Link]:slerp(vec, f)
Computes a spherical linear interpolation between unit vectors self and vec. See [Link] for a
discussion of the meaning, value, and usage of spherical linear interpolation.
Listing 19.1: Spherical Linear Interpolation Example
Note
19.2.25 slerpconst
v = [Link]:slerpconst(vec, angle)
Returns the spherical linear interpolation from self towards vec, but by no more than angle in radians. See
[Link] for a discussion of the meaning, value, and usage of spherical linear interpolation.
Note
This routine computes meaningful results only when the two inputs are unit vectors.
Introduced in [Link] = '2.0'
19.2.26 sub
diff = [Link]:sub(vec)
19.2.27 toangle
angle = [Link]:toangle()
19.2.28 unrotate
uvec = [Link]:unrotate(vec)
Inverse of [Link]:rotate(vec).
Introduced in [Link] = '2.0'
19.2.29 x
x = [Link]:x()
19.2.30 y
y = [Link]:y()
19.3.1 BB
bb = [Link](l, b, r, t)
19.3.2 b
bottom = [Link]:b()
19.3.3 clampVect
cvec = [Link]:clampVect(vec)
19.3.4 containsBB
bool = [Link]:containsBB(other)
19.3.5 containsVect
bool = [Link]:containsVect(vec)
19.3.6 expand
bb = [Link]:expand(vec)
Returns the bounding box that contains both self and vec.
Introduced in [Link] = '2.0'
19.3.7 intersects
bool = [Link]:intersects(other)
19.3.8 l
left = [Link]:l()
19.3.9 merge
bb = [Link]:merge(other)
Returns the bounding box that contains both self and the other bounding box.
Introduced in [Link] = '2.0'
19.3.10 setb
self = [Link]:setb(bottom)
Sets the bottom edge of the bounding box to a new value. Returns self.
Introduced in [Link] = '2.0'
19.3.11 r
right = [Link]:r()
19.3.12 setl
self = [Link]:setl(left)
Sets the left edge of the bounding box to a new value. Returns self.
Introduced in [Link] = '2.0'
19.3.13 setr
self = [Link]:setr(right)
Sets the right edge of the bounding box to a new value. Returns self.
Introduced in [Link] = '2.0'
19.3.14 sett
self = [Link]:sett(top)
19.3.15 t
top = [Link]:t()
19.3.16 wrapVect
wvec = [Link]:wrapVect(vec)
19.4 Bodies
A body holds the physical properties (mass, position, rotation, velocity, etc.) of an object. It does not have a shape until you
attach one (or more) to it. Its type is [Link].
19.4.1 Body
body = [Link](mass, inertia)
Returns a new Body with the given mass and moment of inertia.
Use the provided helper functions to compute the moment of inertia.
Introduced in [Link] = '2.0'
19.4.2 activate
self = [Link]:activate()
19.4.3 angle
angle = [Link]:angle()
19.4.4 angVel
avel = [Link]:angVel()
Returns the angular velocity of the body in radians per unit time.
Introduced in [Link] = '2.0'
19.4.5 applyForce
self = [Link]:applyForce(forceVect, rOffset)
Apply force vector on self at a relative offset from the center of gravity.
Introduced in [Link] = '2.0'
19.4.6 applyImpulse
self = [Link]:applyImpulse(impulseVect, rOffset)
19.4.7 data
obj = [Link]:data()
19.4.8 force
fvec = [Link]:force()
19.4.9 isRogue
bool = [Link]:isRogue()
Returns true if the Body is a rogue Body, never having been added to the simulation Space.
Info
See [Link] for an explanation of rogue bodies.
Introduced in [Link] = '2.0'
19.4.10 isSleeping
bool = [Link]:isSleeping()
Converts lvec from body-relative coordinates to world coordinates. Returns the converted vector.
Introduced in [Link] = '2.0'
19.4.12 kineticEnergy
ke = [Link]:kineticEnergy()
19.4.13 mass
m = [Link]:mass()
19.4.14 moment
m = [Link]:moment()
19.4.15 pos
p = [Link]:pos()
19.4.16 resetForces
self = [Link]:resetForces()
19.4.17 rot
rvec = [Link]:rot()
Returns the vector orientation of the body. This is a unit vector cached from the last calculated angle of the Body.
Introduced in [Link] = '2.0'
19.4.18 setAngle
self = [Link]:setAngle(angle)
19.4.19 setAngVel
self = [Link]:setAngVel(vel)
Updates the angular velocity of the body. The angular velocity is in radians per unit time.
Returns the Body.
Introduced in [Link] = '2.0'
19.4.20 setData
self = [Link]:setData(value)
Sets the programmer data field of the Body. The programmer can store any Lua object in this field. This is a handy place to store
a reference to a simulation object.
Returns the Body.
Introduced in [Link] = '2.0'
19.4.21 setForce
self = [Link]:setForce(vector)
19.4.22 setMass
self = [Link]:setMass(mass)
19.4.24 setPos
self = [Link]:setPos(vector)
19.4.25 setPositionFunc
self = [Link]:setPositionFunc(func)
Sets the position function of the body. The position function must be a function that accepts a Body and a time step value and
at some point calls body:updatePosition to update the position of the body.
Returns the Body.
.Introduced in [Link] = '2.0'
19.4.26 setTorque
self = [Link]:setTorque(torque)
19.4.27 setVel
self = [Link]:setVel(vector)
19.4.28 setVelocityFunc
self = [Link]:setVelocityFunc(func)
Sets the velocity function of the body. The velocity function must be a function that accepts a Body, a gravity vector, a numeric
damping factor, and a time step value. The function should call body:updateVelocity to adjust the velocity of the body.
Returns the Body.
Listing 19.2: Example for [Link]:setVelocityFunc()
body:setVelocityFunc(sampleVelocityFunc)
19.4.29 setVLimit
self = [Link]:setVLimit(limit)
19.4.30 setWLimit
self = [Link]:setWLimit(limit)
Updates the limit of the angular velocity of the body. Angular velocity is in radians per unit time.
Returns the Body.
Introduced in [Link] = '2.0'
19.4.31 sleep
self = [Link]:sleep()
19.4.32 sleepWithGroup
self = [Link]:sleepWithGroup( [group] )
Puts the Body to sleep and adds it to a group of other sleeping bodies.
19.4.33 torque
t = [Link]:torque()
19.4.34 updatePosition
[Link]:updatePosition(dt)
19.4.35 updateVelocity
[Link]:updateVelocity(grav, damp, dt)
19.4.37 vLimit
vmax = [Link]:vLimit()
19.4.38 wLimit
wmax = [Link]:wLimit()
Returns the angular velocity limit of the body. The angular velocity is in radians per unit time.
Introduced in [Link] = '2.0'
19.4.39 world2Local
lvec = [Link]:world2Local(wvec)
Converts wvec from world coordinates to body-relative coordinates. Returns the converted vector.
Introduced in [Link] = '2.0'
19.5 Shapes
Shapes contain the surface properties of an object such as how much friction or elasticity it has. All collision shapes implement
the following accessor routines.
19.5.2 body
body = [Link]:body()
Returns the body attached to the shape. If the shape is static, then it will return nil.
Introduced in [Link] = '2.0'
19.5.3 collisionType
coll = [Link]:collisionType()
19.5.4 data
obj = [Link]:data()
19.5.5 friction
f = [Link]:friction()
19.5.6 group
g = [Link]:group()
19.5.7 layers
layers = [Link]:layers()
19.5.8 rawBB
bb = [Link]:rawBB()
Returns the bounding box of the shape. Only valid after a call to [Link]:BB() or [Link]:step().
Introduced in [Link] = '2.0'
19.5.9 restitution
r = [Link]:restitution()
19.5.10 sensor
s = [Link]:sensor()
19.5.11 setCollisionType
self = [Link]:setCollisionType(collisionType)
Assigns a collision type (an integer value of your choosing) to the shape. It is used to determine which handler to call when a
collision occurs. Returns self.
Introduced in [Link] = '2.0'
19.5.12 setData
self = [Link]:setData(obj)
Sets the programmer data field of the Shape. The programmer can store any Lua object in this field. Returns self.
Introduced in [Link] = '2.0'
19.5.13 setFriction
self = [Link]:setFriction(f)
19.5.14 setGroup
self = [Link]:setGroup(group)
Sets the group (a number defined by the programmer) of the shape. Shapes in the same group do not generate collisions.
Returns self.
Note
The group number is converted to a positive whole number when stored.
Introduced in [Link] = '2.0'
19.5.15 setLayers
self = [Link]:setLayers(layers)
Sets the layers that the shape inhabits. Shapes only collide if they are in the same layer. layers is an integer bitmap of all the
layers that the shape occupies. Returns self.
Introduced in [Link] = '2.0'
19.5.16 setRestitution
self = [Link]:setRestitution(r)
Sets the restitution (or elasticity) of the shape. A value of 0.0 gives no bounce and a value of 1.0 gives a perfect bounce. Returns
self.
Note
May not behave as expected for r larger than 1.0 or less than 0.
Introduced in [Link] = '2.0'
19.5.17 setSensor
elf = [Link]:setSensor(bool)
Determines if the shape is a sensor (true) or not (false). Sensors call collision handlers but do not generate collisions. Returns
self.
Introduced in [Link] = '2.0'
19.5.18 setSurfaceV
self = [Link]:setSurfaceV(vel)
19.5.19 surfaceV
sv = [Link]:surfaceV()
19.6.1 CircleShape
cs = [Link](body, radius, offset)
Returns a new CircleShape with the given body, radius, and offset vector from the body’s center of gravity in body-local
coordinates. Specify nil for the body to use the space’s static body.
19.6.2 offset
ovec = [Link]:offset()
Returns the offset vector of the shape from the body’s center of gravity.
Introduced in [Link] = '2.0'
19.6.3 radius
r = [Link]:radius()
19.7.1 PolyShape
ps = [Link](body, vertices, offset)
Returns a new PolyShape with the given body, table of vertices, and offset from the body’s center of gravity. Specify nil for the
body to use the space’s static body.
Introduced in [Link] = '2.0'
19.7.2 numVerts
nv = [Link]:numVerts()
19.7.3 points
points = [Link]:points()
Returns a copy of the table of vertices defining the bounds of the polygon. The vertices are translated to the polygon’s current
world coordinates.
Note
When a PolyShape has not been added to a Space, it has no world coordinates. In this case, each vertex returned by
[Link]:points() will have x and y equal to 0.
Introduced in [Link] = '2.0'
19.7.4 vert
v = [Link]:vert(n)
Returns vertex number n of the table of vertices defining the bounds of the polygon. If the shape is static, then the vertex
values are in world coordinates, otherwise the vertex coordiates are relative to the shape’s body. Returns nil if n is less than 1
or greater than the number of vertices in the polygon.
Introduced in [Link] = '2.0'
19.8.1 SegmentShape
ss = [Link](body, a, b, radius)
19.8.2 a
avec = [Link]:a()
Returns the a vector defining one of the end points of the segment.
Introduced in [Link] = '2.0'
19.8.3 b
bvec = [Link]:b()
Returns the b vector defining one of the end points of the segment.
Introduced in [Link] = '2.0'
19.8.4 normal
nvec = [Link]:normal()
19.8.5 radius
r = [Link]:radius()
19.9 Spaces
A physics Space is the basic unit of simulation.
19.9.2 addBody
self = [Link]:addBody(body)
19.9.3 addConstraint
self = [Link]:addConstraint(constraint)
19.9.4 addCollisionHandler
self = [Link]:addCollisionHandler(collisionTypeA,collisionTypeB,
callbacksTable)
Registers a table of callback functions to handle collisions between shapes of collisionTypeA and shapes of collisionTypeB.
Listing 19.3 shows the form of the callbacksTable.
Listing 19.3: The Form of the Callback Table for [Link]:addCollisionHandler()
If the begin handler or preSolve handler return false, further collision calculations are bypassed. If they return true, the collision
processing proceeds as normal.
It is not necessary to provide handlers for all callback table entries. Default handling will be provided for unspecified handlers.
Returns self.
See [Link] for an explanation of collision processing and
collision handler callbacks.
One important point to note is that these callback handlers must not add or remove Bodies, Shapes, or Constraints from the
Space
See the post-step callback functions for the right way to remove (or add) objects as the result of a collision.
Introduced in [Link] = '2.0'
19.9.5 addPostStepCallback
self = [Link]:addPostStepCallback(body|shape|constraint,
function(space, object)
...end )
Adds a callback function to be called when the current step is finished. One callback may be registered per Body, Shape, or
Constraint. Only the first callback for a given object is registered. Any attempt to register another callback for the same object is
ignored.
Returns self.
Introduced in [Link] = '2.0'
19.9.6 addShape
self = [Link]:addShape(shape)
19.9.8 damping
d = [Link]:damping()
19.9.9 data
obj = [Link]:data()
19.9.10 elasticIterations
iters = [Link]:elasticIterations()
19.9.11 gravity
grav = [Link]:gravity()
19.9.12 idleSpeedThreshold
speed = [Link]:idleSpeedThreshold()
19.9.13 iterations
iters = [Link]:iterations()
19.9.14 rehashShape
self = [Link]:rehashShape(shape)
19.9.15 rehashStatic
self = [Link]:rehashStatic()
Rehashes the shapes in the static spatial hash. You must call this if you move any static shapes or Chipmunk will not update
their collision detection data.
Returns self..
Introduced in [Link] = '2.0'
19.9.16 removeBody
self = [Link]:removeBody(body)
19.9.17 removeConstraint
self = [Link]:removeConstraint(constraint)
19.9.18 removeShape
self = [Link]:removeShape(shape)
19.9.19 removeStaticShape
[Link]:removeStaticShape(staticShape)
19.9.20 resizeActiveHash
self = [Link]:resizeActiveHash(dim, count)
The spatial hash of active Shapes can be tuned to improve collision detection. dim establishes
the size of a hash cell (default 100), and count sets the number of hash cells (default 1000). dim should approximate the side
length of a typical Shape. A good rule of thumb is to set count to about ten times the number of Shapesin the space.
.Introduced in [Link] = '2.0'
19.9.21 resizeStaticHash
self = [Link]:resizeStaticHash(dim, count)
This routine configures the spatial hash of static Shapes. Configure this similarly to resizeActiveHash but for static Shapes.
.Introduced in [Link] = '2.0'
19.9.22 setDamping
Damping drains speed from bodies in the simulation. A value of 0.9 means that each body will lose 10% of its speed per second.
Defaults to 1. This value can be overridden on a per body basis.
self = [Link]:setDamping(d)
19.9.23 setData
self = [Link]:setData(obj)
19.9.24 setElasticIterations
self = [Link]:setElasticIterations(iters)
19.9.25 setGravity
self = [Link]:setGravity(grav)
Global gravity applied to the Space. Can be overridden on a per body basis by writing custom integration functions
Introduced in [Link] = '2.0'
19.9.26 setIdleSpeedThreshold
self = [Link]:setIdleSpeedThreshold(speed)
The idleSpeedThreshold is the speed below which a body is considered to be idle. This value is used to determine when a body
can be put to sleep.
Introduced in [Link] = '2.0'
19.9.27 setIterations
self = [Link]:setIterations(iters)
This value allows the programmer to control the accuracy of the solver. Default is 10.
19.9.28 setSleepTimeThreshold
self = [Link]:setSleepTimeThreshold(sleep)
Sleep time threshold is used to calculate when a Body can be put to sleep
Introduced in [Link] = '2.0'
19.9.29 sleepTimeThreshold
sleep = [Link]:sleepTimeThreshold()
Updates the Space for the given time step dt. A xed time step is recommended and increases the eciency of the contact
persistence, requiring an order of magnitude fewer iterations and lower CPU usage.
Returns self.
Introduced in [Link] = '2.0'
19.10 Constraints
All Constraints share common accessors.
Like a damped spring, but works in an angular fashion. restAngle is the relative angle in radians that the Bodies want to have,
stiffness and damping work basically the same as on a damped spring.
Defined much like a SlideJoint. restLength is the distance the spring wants to be, stiffness is the spring constant, and damping
is how soft to make the damping of the spring.
Accessors Type
setAnchr1, anchr1 [Link]
setAnchr2, anchr2 [Link]
setRestLength, restLength number
setStiness, stiness number
setDamping, damping number
Keeps the angular velocity ratio of a pair of Bodies constant. ratio is always measured in absolute terms. phase is the initial
angular offset of the two bodies.
The groove goes from grooveA to grooveB on Body a, and the pivot is attached to anchr2 on
Body b. All coordinates are body local.
Accessors Type
setAnchr2, anchr2 [Link]
setGrooveA, grooveA [Link]
setGrooveB, grooveB [Link]
grooveN [Link]
a and b are the two bodies to connect, and anchr1 and anchr2 are the anchor points on those bodies. The distance between
the two anchor points is measured when the joint is created. If you want to set a specific distance, use the setter function to
override it.
Accessors Type
setAnchr1, anchr1 [Link]
setAnchr2, anchr2 [Link]
setDist, dist number
a and b are the two bodies to connect, and pivot is the point in world coordinates of the pivot. Because the pivot location is
given in world coordinates, you must have the bodies moved into the correct positions already. Alternatively you can specify
the joint based on a pair of anchor points, but make sure you have the bodies in the right place as the joint will fix itself as soon
as you start simulating the Space.
Accessors Type
setAnchr1, anchr1 [Link]
setAnchr2, anchr2 [Link]
Works like a socket wrench. ratchet is the distance between clicks, phase is the initial offset to use when deciding where the
ratchet angles are.
Accessors Type
setAngle, angle number
setphase, phase number
setRatchet, ratchet number
Constrains the relative rotations of two bodies. min and max are the angular limits in radians. It is implemented so that it is
possible for the range to be greater than a full revolution.
Accessors Type
setMin, min number
setMax, max number
Keeps the relative angular velocity of a pair of bodies constant. rate is the desired relative angular velocity.
Accessors Type
setRate, rate number
a and b are the two bodies to connect, anchr1 and anchr2 are the anchor points on those bodies, and min and max define the
allowed distances of the anchor points.
Accessors Type
setAnchr1, anchr1 [Link]
19.11.1 #
count = #[Link]
19.11.2 a
shape = [Link]:a()
19.11.3 b
shape = [Link]:b()
19.11.4 bodies
bodyA, bodyB = [Link]:bodies()
Returns the penetration depth of the ith contact or nil if i is out of range of the number of contact points.
Introduced in [Link] = '2.0'
19.11.6 elasticity
e = [Link]:elasticity()
19.11.7 friction
f = [Link]:friction()
19.11.8 impulse
ivec = [Link]:impulse([friction])
Returns the vector impulse that was applied during this step to resolve the collision. If friction is true (default false), then the
calculated friction is taken into account.
Introduced in [Link] = '2.0'
19.11.9 isFirstContact
bool = [Link]:isFirstContact()
Returns true if this is the first step that the Shapes touched. This information only persists until a step when the shapes are no
longer touching. Once they are no longer touching, this flag is reset.
Introduced in [Link] = '2.0'
19.11.10 normal
nvec = [Link]:normal(i)
Returns the collision normal vector for the ith contact point. Returns nil if i is out of the range of the number of contact points.
Introduced in [Link] = '2.0'
19.11.11 point
pvec = [Link]:point(i)
Returns the position of the ith contact point. Returns nil if i is out of the range of the number of contact points.
Introduced in [Link] = '2.0'
19.11.12 setElasticity
self = [Link]:setElasticity(e)
19.11.13 setFriction
self = [Link]:setFriction(friction)
19.11.14 shapes
shapeA, shapeB = [Link]:shapes()
Returns shapeA and shapeB in the order they were defined in the collision handler associated with this Arbiter.
Introduced in [Link] = '2.0'
19.11.15 totalImpulse
ivec = [Link]:totalImpulse()
Returns the vector impulse that was applied during this step to resolve the collision.
Introduced in [Link] = '2.0'
19.11.16 totalImpulseWithFriction
ivec = [Link]:totalImpulseWithFriction()
Returns the vector impulse that was applied during this step to resolve the collision. The calculated friction is taken into
account.
Introduced in [Link] = '2.0'
19.12.2 segmentQuery
info = [Link]:segmentQuery(vecta, vectb)
Checks if the line segment from vecta to vectb intersects the Shape. Returns a
SegmentQueryInfo object with the result of the query or nil if no intersection.
If a segment query starts inside of a shape then the result is somewhat undefined. Circles and polygons will not report a
collision with that shape, and segments will report an incorrect point and normal if they do detect a collision with that shape.
To get around this deficiency, use a separate point query to determine if the segment query starts inside of a shape.
See the SegmentQueryInfo methods below for helper routines to convert the results to world coordinates or absolute distance.
Introduced in [Link] = '2.0'
Queries the Space for all shapes that contain point and match layers but not in group. The
function is called with each matching Shape. Sensor Shapes are included.
Introduced in [Link] = '2.0'
19.13.2 pointQueryFirst
shape = [Link]:pointQueryFirst(point, layers, group)
Queries Space at a point and returns the first Shape that matches the given layers and not in group. Returns nil if no Shape was
found. Sensor Shapes are ignored.
Introduced in [Link] = '2.0'
19.13.3 segmentQuery
[Link]:segmentQuery(startvect, stopvect, layers, group,
Queries the Space for all Shapes that intersect the line segment from startvect to stopvect and match layers and not in group.
The function is called with each matching Shape. Sensor Shapes are included.
The callback function is called with each Shape, proportion of distance along the line segment (a fraction from 0 to 1), and the
surface normal vector of the intersection point of the Shape.
Introduced in [Link] = '2.0'
19.13.4 segmentQueryFirst
info = [Link]:segmentQueryFirst(startvect, stopvect,layers, group)
Queries Space along the line segment from startvect to stopvect and returns the first intersecting Shape that matches layers
and not in group. Returns a SegmentQueryInfo object with the first Shape that matches the query or nil if no intersection.
Introduced in [Link] = '2.0'
Key Value
shape Shape object found in a query.
t Fractional distance (0 .. 1) from the start of the line segment to the intersection of the Shape.
n Surface normal vector of the Shape at the intersection point.
This object also has the following helper routines that convert information in a SegmentQueryInfo object to world coordinates
or an absolute distance along the line segment.
19.14.1 hitDist
d = SegmentQueryInfo:hitDist(startvect, stopvect)
Returns the absolute distance where the segment first hit the Shape.
Introduced in [Link] = '2.0'
19.14.2 hitPoint
p = SegmentQueryInfo:hitPoint(startvect, stopvect)
Returns the hit point in world coordinates where the segment between startvect and stopvect
first intersects the Shape.
Introduced in [Link] = '2.0'
20.1 Bluetooth® LE
The Bluetooth ® LE Library summarizes all generic functionality related to Bluetooth ® LE technology offered inside the TI-
Nspire™ platform.
20.1.1 addStateListener
[Link](callback [, object])
Registers a Bluetooth® LE state-change listener callback. The registration of multiple listener callbacks at the same time is
supported. Registered listener callbacks can be removed by calling removeStateListener
Callback Function
callback([object,] state)
The callback function provided in addStateListener will be called for unsolicited Bluetooth® LE state changes. This includes
switching on/off Bluetooth ® technology or the OS resetting the Bluetooth® stack.
Name Description
ON Bluetooth® technology is switched on
OFF Bluetooth® technology is switched off. This implies that any ongoing scan has been
stopped and connected peripherals lose their connection.
20.1.2 removeStateListener
success = [Link](callback)
Removes a registered Bluetooth ® LE state-change listener callback which was previously registered by calling addStateListener.
20.1.3 pack
Note: Applies to pack and unpack.
• This function moved from ble to string.
• This is available at [Link] and [Link] for apilevels 2.5 and 2.6
• Moved to [Link] [Link] starting apilevel 2.7
Introduced in [Link] = '2.5'
20.1.4 unpack
Note: Applies to pack and unpack.
• This function moved from ble to string.
• This is available at [Link] and [Link] for apilevels 2.5 and 2.6
• Moved to [Link] [Link] starting apilevel 2.7
Introduced in [Link] = '2.5'
Scans for Bluetooth® LE devices advertising a service with the given service UUID (Universal Unique Identifier) or for Bluetooth®
LE devices advertising any service if no UUID is provided. Successive calls of startScanning automatically stop previous scans. A
malformed UUID will cause a Lua error as this is an authoring error and not a run-time error..
The callback function provided in startScanning will be called for every Bluetooth® LE device fulfilling the search criteria. The
peripheral parameter will be a peripheral object representing the found Bluetooth® LE device. The same peripheral object
might be reported more than once based on peripheral and platform behavior.
Name Description
AD NAME Same as the device name or a shortened name. Please see subsection 20.3.1 for
peripheral:getName().
AD Bluetooth® technology is switched off. This implies that any A string with the first 2
MANUFACTURER octets identifying the manufacturer (see Company Identifiers.). The interpretation of
DATA any other octet in the string is manufacturer specific.
AD SERVICE UUIDS A list of service UUIDs. This list might be complete or not.
AD TX POWER If provided by the device, the sending power level of the device in dBm. Subtracting
LEVEL the RSSI value from the power level can be used to compare the approximate distance
of different devices
20.2.2 stopScanning
[Link]()
Returns the name of the peripheral as a string. The peripheral name is what an Application would typically show to the user.
There is no guarantee that two different devices have different names. On the contrary two devices of the same kind and
vendor could show the same name until changed by the user. If no name is available at the point of time nil will be returned.
Changing the name for Bluetooth® LE device could be device specific.
Introduced in [Link] = '2.5'
20.3.2 getState
state = peripheral:getState()
20.3.3 connect
error = peripheral:connect([timeout, ]callback [, object])
Requests connection to the Bluetooth® LE device represented by the peripheral object. The callback will be called for all events
related to the connection state of this peripheral object. An optional timeout can be provided to automatically abort the
request after the time specified. After disconnecting or after a failure during the connection procedure, the specified callback
will not be referenced anymore.
Caution
Please make sure you disconnect peripheral objects before closing the document. A simple way to do so is by calling
peripheral:disconnect() from the [Link]() event.
The callback function provided in peripheral:connect() will be called for every event related to the connection state between
the Bluetooth ® LE central and the peripheral. Based on whether
an object was provided in the call to connectPeripheral, the callback should have three or four parameters.
Event Constants
The constants described in the following table are part of the bleCentral table, e.g.
[Link].
20.3.4 disconnect
peripheral:disconnect()
Disconnects the connection with the peripheral object. The callback provided in connectPeripheral will be called to confirm
completion of the disconnect procedure.
Introduced in [Link] = '2.5'
20.3.5 discoverServices
error = peripheral:discoverServices([UUIDs, ] callback [, object])
Initiates the services discovery procedure for the peripheral object. The callback will be called once on completion of the
procedure. The discovery may complete successfully or fail.
The callback function provided in discoverServices will be called once when the services discovery procedure completes. Based
on whether an object was provided in the call to discoverServices, the callback should have two or three parameters. The error
will be nil if the procedure completed successfully. Calling getServices will retrieve the discovered services.
Returns a table containing the list of services discovered which can be traversed with the help of the ipairs function. An empty
table is returned if no services were discovered or if getServices gets called before the service discovery procedure completes.
In case of an error, nil is returned together with an error message.
20.4.2 discoverCharacteristics
error = service:discoverCharacteristics([UUIDs, ] callback [, object])
Initiates the characteristics discovery procedure for the service object. The callback will be called once on completion of the
procedure. The discovery may complete successfully or fail.
The callback function provided in discoverCharacteristics will be called once when the characteristics discovery procedure
completes. Based on whether an object was provided in the call to discoverCharacteristics, the callback should have two or
three parameters. The error will be nil if the procedure completed successfully. Calling getCharacteristics will retrieve the
discovered characteristics..
20.4.3 getCharacteristics
table [, error] = service:getCharacteristics()
Returns a table containing the list of characteristics discovered which can be traversed with the help of the ipairs function. An
empty table is returned if no characteristics were discovered or if getCharacteristics gets called before the characteristic
discovery procedure completes. In case of an error, nil is returned together with an error message. See discoverCharacteristics
(subsection 20.4.2).
20.5.2 setValueUpdateListener
characteristic:setValueUpdateListener(callback [, object])
Sets or removes the value-update listener callback for read and notification updates. To remove the callback, use nil as callback
parameter. Once the listener callback is called the result can be retrieved via getValue(). This function can be called at any time
to update the value update listener callback for a discovered characteristic.
Callback Function
20.5.3 setWriteCompleteListener
characteristic:setWriteCompleteListener(callback [, object])
Sets or removes the write-complete listener callback for write requests. To remove the callback, use nil as the callback
parameter. This callback is only called for write requests and not write commands. The type of the write procedure depends on
the boolean value specified when calling write. This function can be called at any time to update the write complete listener
callback for a discovered characteristic.
Callback Function
The callback function will be called to confirm completion of a write request procedure.
20.5.4 read
error = characteristic:read()
Initiates reading the characteristics value. If a listener callback is provided with setValueUpdateListener for this characteristic
(see subsection 20.5.2 ) it will be called once the read operation completes and the result can be retrieved via getValue(). There
is no guarantee that for every single call to the read function a dedicated call of the callback will happen. The system may
decide to combine multiple completions of read requests into a single call of the callback.
20.5.5 setNotify
error = characteristic:setNotify(doEnable)
Enables or disables continuous notification mode for the value of the characteristic, provided the characteristic of the device
supports this feature. If true is passed, notifications get enabled, whereas false will stop notifications. The notification period,
changeability of the notification period and the method of changing the notification period is Bluetooth ® LE device specific. The
peripheral needs to be connected so that a call to setNotify can have an effect. If a listener callback is provided with
setValueUpdateListener for this characteristic (see subsection 20.5.2 ) it will be called when a new value can be retrieved via
getValue(). There is no guarantee that for every single response from the device a dedicated call of the callback will happen.
The system may decide to combine multiple as well as completions of read requests into a single call of the callback.
20.5.6 getValue
value = characteristic:getValue()
20.5.7 write
error = characteristic:write(data, [isRequest])
Sets the data string attribute as the new characteristic value. Based on the supported write procedure of the device
characteristic, the form of a request or a commend might be required or not allowed. If both procedures are supported by the
device characteristic, it is an author’s choice which procedure to use. There is currently no function to retrieve the
characteristic property and it is therefore the author’s responsibility to either find out the information about the device
characteristic or use trial-and-error. A write request – as opposed to a write command – will send back an information about
the success, please see subsection 20.5.3.
21.2 addStateListener
error = [Link](asiStateCallback [, object])
Registers an ASI state-change listener callback. The registration of multiple listener callbacks at the same time is supported.
Registered listener callbacks can be removed by calling removeStateListener.
The callback function provided in addStateListener will be called for ASI state changes.
Name Description
[Link] ASI has started and is ready.
21.3 removeStateListener
success = [Link](asiStateCallback)
Removes a registered ASI state-change listener callback which was previously registered by calling addStateListener.
21.4 isScanning
[Link]()
21.5 startScanning
error = [Link](portFoundCallback [, object])
Scans for ASI ports. A second call to startScanning while already scanning does not reset the process. If a rescan is desired, call
stopScanning first and then startScanning to reset the process.
The callback function provided in startScanning will be called for every ASI port found. The port parameter will be a port object
representing the port interface found. One call per port found. Ports maybe present at the moment of calling [Link]
() or later added while scanning. Ports are reported only once between startScanning/stopScanning cycles.
21.6 stopScanning
[Link]()
Stops scanning for ASI ports. Also resets the list of reported ports. Calling [Link]() again will report all available ports
once more.
Introduced in [Link] = '2.7'.
Returns the name of the port as a string, as given by the platform. Typical examples are the following:
21.7.2 getIdentifier
identifier = port:getIdentifier()
Returns the identifier associated to the port as a string, as given by the platform. Typical examples are the following:
21.7.3 getState
state = port:getState()
Returns the current state of the port as a constant from the asi table.
21.7.4 setBaudRate
self = port:setBaudRate(newBaudRate)
Sets the baud rate for the connection. By default connections are established at 115200 bauds. If a different value is desired,
the new baud rate must be set before establishing a connecting to the port. Returns self.
Constant Value#
asi.BAUD_RATE_9600 9600 bauds
asi.BAUD_RATE_115200 115200 bauds
asi.BAUD_RATE_DEFAULT 115200 bauds
21.7.5 connect
error = port:connect(connectionCallback[, object])
Sends an asynchronous request for connection to the port. When the request is processed, the result is reported to the
specified callback.
The callback function provided in connect will be called when the state of the connection to the port changes.
Event Constants
21.7.6 disconnect
port:disconnect()
Sends an asynchronous request for disconnection from the port. The result will be notified at the callback provided at
port:connect().
Introduced in [Link] = '2.7'.
21.7.7 setWriteListener
self = port:setWriteListener(writeCallback[, object])
Registers a callback for write-complete notifications. The callback is called after a write request. Returns self.
This callback is called when a write request has been completed. A string is passed in case an error occurred while processing
the write request.
21.7.8 write
error = port:write(writeData)
Sends an asynchronous request for a write operation. When the request is serviced, the writeCallback is called to confirm
completion, if previously specified with setWriteListener. Returns error if an error occurred.
21.7.9 setReadListener
self = port:setReadListener(readCallback[, object])
Registers a callback for read notifications. The callback is called after a read request. Returns self.
This callback is called when a read request has been completed. A string is passed in case an error occurred while processing
the read request. The actual value read can be retrieved with port:getValue().
21.7.10 setReadTimeout
self = port:setReadTimeout(newTimeout)
Sets the maximum amount of time that the platform should wait for the first byte. This affects the behavior of read(). By
default the timeout is 1000 milliseconds (1 second). Returns self.
Timeout Constant
Constant Value#
asi.READ_TIMEOUT_DEFAULT 1000
21.7.11 read
error = port:read([bytesToRead])
Sends an asynchronous request for a read operation. When the request is serviced, the readCallback is called to confirm
completion, if previously specified with setReadListener. Returns error if an error occurred.
21.7.12 getValue
value = port:getValue()
Script Compatibility
This Appendix summarizes aspects about different types of compatibility issues and concepts for Lua scripts inside the TI-
Nspire™ platform. It supports authoring documents for a mixed environment of TI-Nspire™ software releases and different
platforms. Authoring scripts for a higher API level than supported inside a current script development environment is detailed
in section A.2 .
Listing A.1: Authoring for a Future Software Release for the Example of Touch
[Link] = '2.2'
iftouch then
if not [Link] then
[Link]() return true end
[Link]() return true end
end
else
touch = {}
[Link]() returnfalseend
end
The image pixel data immediately follows the header. Pixels are arranged in rows. Each pixel is a little endian 16-bit integer with
ve bits for each color red, green, and blue. The top bit determines if the pixel is drawn. If it is zero (0), the pixel is not drawn. If
it is one (1), the pixel is drawn in the RGB color of the remaining 15 bits.
0x8000 is black, 0x801F is blue, 0x83E0 is green, 0xFC00 is red, and 0xFFFF is white.
This function has been replaced by [Link](), but if you want to author or modify scripts with [Link] = '1.0'
you still need this function.
This graphics context should not be used for drawing purposes because it is not guaranteed to be associated with a window.
Listing B.1 shows an example of using the static graphics context to get the string width and height.
local gc = [Link]()
gc:setFont('serif', 'r', 10)
local width = gc:getStringWidth(a_string)
local height = gc:getStringHeight(a_string)
Prior to [Link] = '2.3', “none” was used to specify unspecified vertical alignment. The vertical alignment “none” has
been deprecated. Specifying no alignment defaults to “top” and so does “none”.
Introduced in [Link] = '1.0'
Extended in [Link] = ‘2.3’
Index setBaudRate
setReadListener
117
119
setReadTimeout 120
setWriteListener 118
write 119
require 'asi' 114
2
startScanning 115
2D Editor Library 6 stopScanning 116
createChemBox 6
createMathBox 7 B
getExpressions 7
Bluetooth® Smart Library 103
getExpressionsSelection 7
Bluetooth® LE 103
getText 7
addStateListener 103
hasFocus 8
Format Specifier for pack and unpack 104
isVisible 8
pack 104
move 8
removeStateListener 104
newRichText 6
startScanning 105
registerFilter 8
unpack 104
rezize 9
Bluetooth® LE Central 105
setBorder 9
isScanning 107
setBorderColor 9
stopScanning 106
setColorable 9
Characteristic Class 111
setDisable2DinRT 9
getUUID 111
setExpression 9
getValue 113
setFocus 10
read 112
setFontSize 10
setNotify 113
setMainFont 10
setValueUpdatedListener 111
setReadOnly 11
setWriteCompleteListener 112
setSelectable 11
write 113
setSizeChangeListener 11
Peripheral Class 107
setText 11
connect 108
setTextChangeListener 12
disconnect 109
setTextColor 12
discoverServices 109
setVisible 12
getName 107
setWordWrapWidth 12
getServices 110
getState 107
A
Service Class 110
Appendix A discoverCharacteristics 110
Backward and Forward Compatibility 121 getCharacteristics 111
Creating Scripts for a Future Software Release 122 getUUID 110
Document Compatibility 121
Platform Compatibility 122 C
Script Compatibility 121
Class Library 13
Scripting Compatibility 121
class 13
Appendix B
Clipboard Library 14
Deprecated API Functions and API Behavior 123
addText 14
Image Library 123
getText 14
Platform Library 123-124
Cursor Library 15
drawStringVerticleAlignment 124 hide 17
set 15
gc 123 show 17
125 Index
arrowLeft 21 new 32
arrowRight 21 rotate 32
arrowUp 21 width 33
backspaceKey 21
backTabKey 21 L
charIn 21
clearKey 22 List of Figures iv
construction 22 List of Tables i
contextMenu 22 Listings List ii
copy 22 Locale Library 34
create 22 name 34
createMathBox 22
cut 23 M
deactivate 23 Math Library Extension 35
deleteKey 23 eval 35
destroy 23 evalStr 36
enterKey 23 getEvalSettings 36
escapeKey 23 setEvalSettings 37
getFocus 23 Module Library 39
getSymbolList 24
grabDown 24 P
grabUp 24
help 24 Physics Library 51
keyboardDown 25 Arbiters and Collision Pairs 96
keyboardUp 25 # 96
loseFocus 25 a 96
mouseDown 25 b 96
mouseMove 25 bodies 96
mouseUp 25 depth 97
paint 26 elasticity 97
paste 26 friction 97
propertiesChanged 26 impulse 97
resize 26 isFirstContact 97
restore 26 normal 98
returnKey 27 point 98
rightMouseDown 27 setElasticity 98
rightMouseUp 27 setFriction 98
save 27 shapes 99
tabKey 28 totalImpulse 99
timer 28 totalImpulseWithFriction 99
varChange 28 Bodies 64
activate 64
G angle 65
angVel 65
Graphics Library 29 applyForce 65
clipRect 29 applyImpulse 65
drawArc 29 Body 64
drawImage 29 data 66
drawLine 30 force 66
drawPolyLine 30 isRogue 66
drawRect 30 isSleeping 66
drawString 30 kineticEnergy 67
fillArc 30 local2World 67
fillPolygon 30 mass 67
fillRect 31 moment 67
getStringHeight 31 pos 67
getStringWidth 31 resetForces 68
setColorRGB 31 rot 68
setFont 31 setAngle 68
setPen 31 setAngVel 68
setData 69
I
setForce 69
Image Library 32 setMass 69
copy 32 setMoment 70
height 32 setPos 70
126 Index
setPositionFunc 70 SegmentQueryInfo 102
setTorque 70 hitDist 102
setVel 71 hitPoint 102
setVelocityFunc 71 Shape Queries 99
setVLimit 71 pointQuery 99
setWLimit 72 segmentQuery 100
sleep 72 Shapes 74
sleepWithGroup 72 BB 75
torque 73 Bdata 75
updatePosition 73 body 75
updateVelocity 73 collisionType 75
vel 74 friction 75
vLimit 74 group 76
wLimit 74 layers 76
world2Local 74 rawBB 76
Bounding Boxes 60 restitution 76
b 60 sensor 77
BB 60 setCollisionType 77
clampVect 61 setData 77
containsBB 61 setFriction 77
containsVect 61 setGroup 78
expand 61 setLayers 78
intersects 62 setRestitution 78
l 62 setSensor 78
merge 62 setSurfaceV 79
r 63 surfaceV 79
setb 62 Space Queries 100
setl 63 pointQuery 100
setr 63 pointQueryFirst 100
sett 63 segmentQuery 101
t 64 segmentQueryFirst 101
wrapVect 64 Spaces 82
Circle Shapes 79 addBody 83
CircleShape 79 addCollisionHandler 83
offset 80 addConstraint 83
radius 80 addPostStepCallback 84
Constraints 91 addShape 84
Damped Rotary Spring 91 addStaticShape 85
Damped Spring 92 damping 85
Gear Joint 92 data 85
Groove Joint 93 elasticIterations 85
Pin Joint 93 gravity 85
Pivot Joint 94 idleSpeedThreshold 86
Ratchet Joint 94 iterations 86
Rotary Limit Joint 94 rehashShape 86
Simple Motor 95 rehashStatic 86
Slide Joints 95 removeBody 86
Miscellaneous routines 51 removeConstraint 87
INFINITY 51 removeShape 87
momentForBox 51 removeStaticShape 87
momentForCircle 51 resizeActiveHash 87
momentForPoly 52 resizeStaticHash 88
momentForSegment 52 setDamping 88
Polygon Shapes 80 setData 88
numVerts 80 setElasticIterations 89
points 81 setGravity 89
PolyShape 80 setIdleSpeedThreshold 89
vert 81 setIterations 89
Segment Shapes 81 setSleepTimeThreshold 90
a 82 sleepTimeThreshold 90
b 82 Space 83
normal 82 step 91
radius 82 Vectors 52
SegmentShape 81 add 53
clamp 53
Index 127
cross 53 T
dist 54
distq 54 Timer Library 46
dot 54 getMilliSecCounter 46
eql 54 start 46
length 55 stop 46
lengthsq 55 Tool Palette Library 47
lerp 55 enable 47
lerpconst 55 enableCopy 48
mult 56 enableCut 48
near 56 enablePaste 48
neg 56 register 47
normalize 56 Touch Library 3
normalizeSafe 57 Library Functions 4
perp 57 enabled 4
project 57 isKeyboardAvaliable 5
rotate 57 isKeyboardVisible 5
rperp 57 ppi 4
setx 58 showKeyboard 5
sety 58 xppi 4
slerp 58 yppi 4
slerpconst 59 Overview 3
sub 59 Event Handling 3
toangle 59 On-Screen Keyboard and Screen Resize Behavior 3
unrotate 59
Vect 52 V
x 60
y 60 Variable Library 49
Platform Library 40 list 49
apiLevel 40 makeNumericList 49
getDeviceID 43 monitor 49
hw 40 recall 49
isColorDisplay 40 recallAt 50
isDeviceModeRendering 41 recallStr 50
isTableModeRendering 41 store 50
registerErrorHandling 41 storeAt 50
window 41 unmonitor 50
displayInvalidatedRectangles 42
getScrollHeight 42
height and width 41
invalidate 41
setBackgroundColor 42
setFocus 42
setScrollHeight 42
withGC 43
S
Standard Libraries 1
Basic Library Functions 1
Coroutine Sub-Library 1
Math Library 2
Module Library 1
String Library 1
Table Library 2
Unimplemented Libraries and Functions 2
String Library Extension 44
pack 44
split 44
uchar 44
unpack 45
usub 44
128 Index