LEMMA Authoring Environment
With the Authoring Environment you can author an xml file which will serve as the description of the complete tutorial. It holds all the information about the script itself, the used visualizations, user interface and an event model used for controlling the follow up of the tutorial. Using this technique the author is freed of the burden to code the tutorial in a programming language. Though as what he in fact does is program control, there is some complexity in using the environment. This tutorial tries to get you started:
The environment provides an editor, that lets you write the tutorial text (black), record your voice along with the lines, schedule visualizations (blue), set jumppoints (green) and control the tutorials follow up, interaction, etc. via events (red).
In the File menu you can start (N)ew tutorials, (O)pen tutorials, (S)ave tutorials, generate VISFiles
and end (Esc) the session. Hotkeys for that ar Ctrl+the characters in parenthesis.
Here you find tools for editing the script.
- Copy selected text: Copies selected text from the Line Editing Area to the clipboard. Shortcut: Ctrl+C
- Cut Selected Text: Removes selected text from the Line Editing Area and copies it to the clipboard. Shortcut: Ctrl+X
- Paste Text: Copies text from the clipboard to the position of the cursor in the Line Editing Area. Shortcut: Ctrl+V
- Cut Element: Removes the current element (line, chapter, visu or event) including all its content from the script and copies it to the clipboard. Shortcut: Alt+X
- Paste Element: Copies an element from the clipboard to the current position in the script. Shorcut: Alt+V
- Import Lines from text file: Importing from text files. The script can be written in an oridnary text editor and saved as .txt file. The lines have to be seperated by pressing enter and should not have more than 95 characters.
- Import chapter: Lets you insert a chapter from another script into the current script. The new chapter is inserted before the current chapter.
- Import book: Same as Import chapter, but imports all chapters from the chosen script.
Please leave a comment if you can think of other useful tools.
(coming soon) provides the same content as this site and additional information.
This is the place where the tutorial evolves. You can step through the elements by the up /down arrows of your keyboard, by the UP / DOWN buttons in the Audio Editing Area or by clicking on elements. The actual element is always underlayed grey, yellow when you are recording and blue when replaying.
Chaptersshow up in fat italic black, text lines in standart font, visualization elements are blue, events are red and jump points are green. Additionally, if a voice sample exists for a line, a small speaker appears to the right of it.
Line Editing Area
Just start typing and the text will appear in this line. Pressing the return button inserts the new line under the actual element. Don't make too long sentences as these form the units for audio recording. From version 1.0, the text will turn red, shortly before you reach the maximum sentence length and stop accepting letters when the limit is reached. If you haven't specified a chapter previous to your first line, the editor will do that for you.
You can import text from a .txt file. Just move to the point where you want to insert text (clicking or arrow keys) and choose Edit -> Import Lines from text file.
"Line D(u)ration" lets you specify a another duration for the line than specified by the voice sample or by default (the default duration of a line is 5 seconds). If you specified a custom duration, it shows up in small violet characters next to the line. "Delete Duration" removes this custom duration again. "(Del)ete Line" erases the line and the sample linked to it (after saving). "(E)dit Line" brings the current line up into the Line Editing Area again, blocking all other interaction til you have modified it and pressed return again (this can also be achieved by double clicking on a line). ("Line Delay" does nothing at the moment, as I still am not sure if that is useful)
Pressing the "Start (R)ecording" button starts a recording session for the actual elements, which turns yellow then (Hotkey: Ctrl+R). Read out the line and then either
- press the button again when you are finished. The recording will stop then and a speaker icon appears next to the line, signaling that the sample was recorded. If you reedit text after recording your voice, the speaker icon turns red , showing that this line needs recording again.
- Press the "Record Sequence (Space)" button (hotkey: Ctrl+Space) to immediately continue with the next line. If you do so you record one line after the other. Nevertheless, the editor will stop after the number of lines you can edit with the dial that says "Stop every xx Sentences", to give you a break. You can also stop by pressing the "Stop (R)ecording" or Ctrl+R.
The UP / DOWN buttons are for navigation between the sentences. "Delete" and "Choose" are not available yet. Note
: If you delete a line, you delete the sample for it , too, but it will actually not be deleted before you save the file.
The "Start (P)laying button starts (and also stops) the playback of the recorded samples line after line. If there is no sample, the player just waits for either the default line durtion (5 seconds) or the custom duration you have set.
You can tell from the speaker icon next to the line if the line was edited after the voice sample was edited and so need recording again. Nevertheless, you can indicate the synchronization status of a line manually with the buttons labeled "In Synch" and "Out Of Sync". If no sample was recorded yet, the line is labeled with a black speaker icon.
- recorded and in sync
- recorded and out of sync
- not recorded
"(A)ppend Chapter" hangs a new chapter at the end of the file. You can choose a title for it and if it should be access restricted. If you choose to restrict a chapter, it can only be accessed by the user if you give him a permission
for it."(I)nsert Chapter" inserts a new Chapter before the actual one. By "(Del)ete Chapter" you delete it and all of its content! "Edit (C)hapter" lets you edit title and accessability of an existing chapter.
"New Event" Inserts a new event under the current element. "(Del)ete Event" erases the event and all of its content. "Set Jump Point" marks the current element as a jump point that can be refered later by an event, allowing non linear navigation through the script. Every element can be a jump point, though chapters can not be specified as such, as they are anyway. "Edit Event" brings up a dialog where you can specify what this event shall actually do:
The line that says title lets you edit the events description again. The first column is always a checkbox. If you want to use a property, you check this box on. If you have it unchecked, the values will not be safed. So uncheck the box to erase set properties.
You can add up to six vectors to the visualization (though you shouldn't or it gets confusing).
- Attribute Owner: the owner of the property you want to visualize.
- Attribute: the property you want to visualize.
- Factor: If a vector is very short (eg. angular momentum) you might want to stretch it.
You can move the tail of a vector to the tip of any other vector (doesn't need to be visualized). If you leave those fields blank, the vector will be attached to the user's coordinate system's origin.
- Target Owner: The owner of the vector, to which's tip you want to move the vector
- Target Attribute: the property you use as a location vector.
- Remove: whether or not you want to remove the vector.
In the example the magenta vector that visualizes the axis of rotation of the object "axis_body" is projected on the tip of its CENTER_OF_MASS. The red vector visualizes the torque of the particle 020_Cylinder_01, the violet one shoes the environmental forces (gravity) that act on "axis_body", stretched to 20 times its length and the kamin vector is only removed.
See Rigid Body Properties
to find out what these are exactly.
Flags are almost always false. They can be set to true for amoment and will then switch back immedately after everyone has seen it. So they serve as impulse signals. They can be delayed.
In the example, the flag "reset" will set to true 20 seconds after the event was issued and then switch back. That will cause the application to reset the scene.
There now is also the possibility to fire a flag at a specific time of the day (not shown in the screenshot, has to be updated) -- MarcBreisinger
- 19 Nov 2006. This is coming handy if you want to try sth. like Hypnopaedia. You can also specify a stop time in the start up configuration.
Switches unlike flags have a state, on
, that sustains. They are good for frequent checking e.g. if the gravity is still turned on (what objects in visualizations frequently do, to know if they should fall down). They can be set to true or false. Like flags they can be delayed.
In the example, "loaded" and "switch2" are set to true.
User Interface Control
Here you can turn on and off interactable user controls
Note that ia_ve_00 is marked false but that will not be regarded since it's checkbox is not turned on.
In the Highlights panel, you have the possibility to highlight all scene objects, interactables and vectors. You can specify a duration for that (if you leave that to zero, it will stay highlighted till you turn it off in another event), specify if it should flash and remove previously set highlights.
In the example ia_bu_00 will flash for 5 seconds and th highlight on ia_sl_00 will be removed
Waiting for Flags/Switches
Here you can tell the application to wait for one or more flags to become true
. Furthermore you can specify what the application should do if that happens, more specific where in the script it should jump to. You can jump to chapters or jumppoints. Default is just going on.
In the example, after the "ready" flag fires for some reason (e.g. because the user has touched a button that is attached to the "ready" flag, the application will jump to "Chapter1". Note:
A FlagEvent that releases one WaitFlagEvent AND has a jump point will immedatetely release ALL WaitFlags so that the jump can take place!
Images and graphics of the format .png, .gif and .jpg that are placed in the folder ./display2d/ will show up in this panel. They can either be scheduled to show up on the Whiteboard in the right upper corner or (in a later version) be placed in the right lower corner as secondary content).
It makes no sense to schedule more than one image per event, as there is only one place to show it at the moment. You can remove an image by selecting "true" in the "Remove" column (in fact it makes no different if you pick the right one, an activated remove removes whatever is on the Whiteboard currently.
All the objects in the scene can be made completely transparent, half transparent, or opaque.
In the example the objects 100_table and axis_body are set to transparent, 020_Cylinder44 is set halftransparent and 000_rod02 is set (back) to opaque. For transparency to have effect, the model must not
have an assigned material from the 3D modeler (until I find out how that works, so stay tuned for updates).
Chapter Access Control
You can restrict the access to a chapter. If you restricted it (use Append Chapter, Insert Chapter or Edit Chapter for that) a user can only access the chapter if you have given him a key that will be stored with the users history. Once granted, the user has aklways access to the chapter, assuming it is in a included book (configurable in the configurations at the startup), till you withdraw the permission again.
In the example the permission for the chapter "Crossproduct" is granted and the permission for the chapter "Precession" is withdrawn.
A chapter has to be restricted from the side of the script therefore granting or withdrawing permissions has an effect. If a chapter is restricted you see a little icon of a lock next to it in the authoring system:
From the upper drop down menu you can choose a visualization from all valid .vis files that are stored in th /tutorials/visualizations/ folder (see Generating .vis files
). Pressing the "Start" button inserts them under the current position. "(Del)ete" erases the current visualization and all of its settings from the script. ("Stop" does nothing at the moment, as I still am not sure if that is useful. "Make Icon" currently unavailable.) "Edit" or double clicking a visualization element in the scripting area brings up a dialog that lets you edit the visualization. In the field that says "Title" you can modify the title of the visualization. After modifying any field in a visualization or event dialog always press return or click into another field before pressing ok, or your modification will NOT be saved!
In the resources tab you can specify where the resources of this visualization are.
- geometry the location of the corresponding .osg file, that is holding the geometry from the modeler (see also Generating .vis files).
- thumbbig the location of the picture used for the area showing the current visualization and for thumbnails
- thumbsmall the location of the picture used for the drop down menu.
In the presets tab you specify where the geometry is placed, how it is rotated and scaled.
- translation specifies how far (in meters) the visualization is moved in x, y and z direction.
- rotation specifies how the visualization is rotated, where it is rotated around the axis specified by the vector x,y,z and the arc in degrees.
- scale specifies how the visualization is scaled in x,y and z direction.
At the moment you can set initial Mass
and Angular Velocity
of any Rigid Body in the scene. So far it's only tested for the upmost Rigid Body.
In the example the Angular Velocity of axis_body is set to 0.2 (what is already pretty fast).
Mass will be distributed over the children of the body in the same fashion you specified the distribution of mass when modeling. Example: 080_MasterRigidBody has two children 005_Slave1 and 015_Slave2, so the overall mass from modeling is 100. Setting a mass of 2000 on MasterRigidBody will have the effect that MasterRigidBody has now the mass 1600kg, Slave1 has 100kg and Slave2 300kg.
In this menu you can specify what the interactables do and if they are enabled or constraint.
An object toModify can be specified for specific ineteractables and the possible modifiable objects are listed in the drop down menu. Though it's up to the user if the combination interactable -> toModify makes sense.
What is what?
- button -> flags
- switch -> switches
- slider -> till now only everyXthFrame, but in general modifiables with a range of values
- draggers -> not affected by the toModify parameter. They are assigned when modeling by attaching them to particles.
- vectorinputs -> not affected by the toModify parameter. They are assigned when modeling by attaching them to particles. Triggering the applyUserForces - Flag will "flush" the vector into the particle as force. Additionally they work like buttons, so you can e.g. set their toModify property on that flag and touching the interactable triggers the force.
The objects are those with the number in front (you modeled those in a 3D modeler), flags and switches are listed when you open an event dialog in own tabs, ranges... well.. so far as I said only every xth frame.
- "reset": resets the current visualization and user coordinate system (Standart)
- "resetCoordinateSystem": resets only the coordinate system
- "resetGeometry": resets only the geometry
- "applyUserForces": applies all forces the user has specified by vector inputs at once
- "ready": designated flag for signaling the user is ready to proceed, use it combination with Waiting for Flags/Switches
- "shutDown": signaling this flag ends the application
- "vectorsReset": set all vectors to zero at once
- "forward": stops the tutorial (if not stopped already) and goes to the next line (Standart)
- "backward": stops the tutorial (if not stopped already) and goes to the previous line (Standart)
- "nextStation" moves one step forward in the user's history if possible, comparable with forward in a webbrowser (Standart)
- "previousStation": moves one step backward in the user's history if possible, comparable with forward in a webbrowser (Standart)
- "bookmark": creates a shortcut in the navigation bar, that brings the user to the current position in the curriculum (Standart)
- "flag1" - "flag5": undetermined flags for general use
- "simulationStopped": the simulation stops, triggering it to false will start the simu again
- "interactionBlocked": all interactables are blocked
- "gravityOn": turns on or off gravity
- "loaded": signales that a visualization is fully loaded (Sys)
- "calibration": sets the application in calibration mode
- "lineOver": signales that a line has been read completely (Sys)
- "switch1" - "switch5": undetermined switches for general use
- "lectureStopped": when switched on, the lecture doesnt coninue till it is switched off again. (Standart)
- "coordSysTransparent": makes the user coordinate system transparent
- "moveSceneWithCoordSys": if you move the the user coordinate system, it moves the whole scene
- "rotateSceneWithCoordSys": if you rotate the the user coordinate system, it rotates the whole scene (Standart)
- "crossProductOn": on the Whiteboard there is now the (very rudimentary) possibility to display a formula with live updating numbers. At the moment this is only possible for the crossproduct. It works like this: You assign the yellow, cyan and magenta vectors to attributes A, B and C respectively that actually form a crossproduct. Then you turn on that switch and it will be displayed as A x B = C (without checking if that actually makes sense) on the WhiteBoard over the vector names.
- "vectorNamesOn": turns on the vectors names on the Whiteboard
- "everyXthFrame": value from 1 - 30 meaning 1 meaning full speed, 30 meaning the simulation is 30 times as slow as full speed
Properties marked (Standart)
have an interactable automaticly in the application and don't need to be modeled manually. Properties marked with (Sys)
are not intended to be used by the author, but rather internally. It is though possible.
So far constraints only make sense for the dragger. You can constrain its movement to a certain axis or plane in the pull down menu (e.g. set constraint to "xz" and it can only move in a horizontal fashion).
Also only for the dragger is drag deep, what means, if you choose true (default), it drags the whole rigid body it is attached to, false will let him drag only the particle it is attached to e.g. the axis.
Generating .vis files
Before you can insert a visualization into a script, you have to turn it into a .vis file, that holds the information about the visualization in a format, the application can understand.
Choosing Generate VIS from the file menu lets you generate a .vis file. For that you need to model your visualization in 3Ds max 6 or 7, export it to an .osg with the 3D OSGExporter (see Modeling
), and choose the file with the FileChooser that is coming up now. If your file is modeled correctly you will be able to choose a name and location for the .vis file. Place it in ./tutorials/vizualisations/, as that's the place where the Authoring Envronment will search for it and so you will be able to choose it from the drop down menu. If the 3d modeler file is not formatted correctly, the Generator produces an error log and tells you where it is
- Branch You can jump to another part of the script, by specifiing a jumppoint and a WaitFlagEvent that refers to this jumppoint. Then you only need to specify a FlagEvent, that fires that flag or you make it user triggered by hanging those flags to buttons or anything. Note: When you jump nonlinear Visualizations and settings caused by events will be loaded properly THOUGH delayed events will not be considered! (maybe in a later version). Also not considered are Wait for Flag Events as at the possibility to release the flag could not be present anymore and also timed highlightevents as they would flash all at once.
- Wait for a while You can produce a break by specifying a WaitFlagEvent e.g. on "Flag3" and in the same event schedule a delayed FLagEvent e.g. for 4 seconds. A FlagEvent that releases one WaitFlagEvent AND has a jump point specified will immedatetely release ALL WaitFlags so that the jump can take place! To be more precise: that in case of non specified jumppoints multiple waitflags are treated like joint with AND, a WaitFlag WITH a Jumppoint ("next" is also a specified Jumppoint) joins with OR and is dominant because of that.
- Let you make your point When a line of text is scheduled, the program will wait as long as the line needs to be read out before it continues. If no sample is recorded for that line, the program waits for a default time, which is setable in the config file. However: If you schedule a WaitFlagEvent after a line, the program will NOT wait for that "line time", because
- the program will wait anyway for the scheduled flag
- the releasing event might occur before the line was copmpletely read. In that case it is more intuitive to move on immediately.
Of course you can respecify the line duration, but make sure you do that after specifying the WaitFlagEvent.
- Answers/Branches seperately In order to work around the linear navigation problem this should be kept in mind during authoring and so elements that are out of the linear fashion of a lecture like answers should be structured into a seperate appendix at the end of the script. In a later version this appendix will be non-accessable in a linear fashion.
Troubleshooting & Pending Bugs
- If you have specified some switch and you wonder why the effect doesnt show up, consider that after loading a new visualization the following switches are automatically set back to false: GravityOn, simulationStopped, interactionBlocked, lectureStopped, coordinateSystemTransparent, crossProductOn
- If you encounter the problem that the tutorial seems to skip a line, consider that the Authoring Environment automatically sets the duration of a line to 0 if a Wait for Flag Event follows directly afterwards. If you specify that and directly afterwards insert a line between this line and the event, that duration is still 0. You see that in the Authoring Environment as a little <0.0s> behind the line. Delete this duration with the appropriate button and the line has its sample determined duration back.
- The dialogs provide some basic checking and pull down menues whenever possible. Though unfortunately it is still possible to produce scripts that make the system crash or do not do what say should. So regard the following:
- After modifying any field in a visualization or event dialog using the keyboard always press return or click into another field before pressing ok, or your modification will NOT be saved!
- When a number is required and you do not specify one, the cell will turn red, but you still can close the window, so that the information will be transfered what causes a crash. So always make sure you leave the window with a number where a number should be. Leaving an empty field causes a crash, too. (Error handlers will follow, I promise)
- Right after generating a .vis file the pictures in the pull down menu are not in correct order any more.
- "Parameters" in the visualizations dialog and all events in the event dialog have the option "use" as the first column. If you wonder why you specified something and it's not taken over into the script, it might be because you have forgotten to select that use-checkbox for the particular setting. A later version will automatically check the box, when you change a setting.
- If in the bookmarks two Icons occupy the same space, then check if two chapter bear the same name. This is not allowed even though they might be from different books
- Sliders have to be modeled upright or they won't work!
If you find any bugs or have an idea what is missing, please share it here:
- 29 Dec 2005