Tutorial Legend

Terms used

Federgraph: The Graph in the center is called Federgraph.

Sample and Hub: The Samples are organized in Hubs (rows).

MouseMove: A MouseMove is done with one finger, similar to dragging the mouse on the desktop.

Button and Click: Buttons are square or circular areas you can click on or touch on.

TouchBar: A TouchBar is a rectangular area which responds to a MouseMove instead of a Click.

Frame: The Frame is a layout made of corner buttons and a TouchBar in the free middle area between the buttons.

Button Container: Buttons can be placed on the Frame, on a ButtonBar or on the TouchMenu.

TouchMenu: The TouchMenu is a matrix of additional buttons inside the Frame.

ButtonBar: A ButtonBar is a horizontal container holding circular buttons in a row.

OptionBar: The ButtonBar towards the top is referred to as OptionBar.

TransitBar: The ButtonBar towards the lower right is called TransitBar.

ToolButton: The ToolButton is the always visible circular button located top left inside the Frame.

ParamText: Below the ToolButton you find ParamText, a group of three labels of text.

ModelText: ModelText is the top right table, showing current values of important model parameters.

StatusText: StatusText on the right side shows the status of the main knobs/cycle buttons.

StatusLines: The status lines on the lower left show additional status values in encoded form.

LabelText: LabelText is the group of two big labels in the middle of the screen.

Wrap: Wrap means that the cycle will wrap around from the last to the first element or the other way round.

Discrete value knob: A knob is a (rotary) knob/switch with discrete positions for several values, it does not wrap.

Cycle button: A cycle button is a (rotary) knob/switch with discrete positions, it wraps around.

Parameter: A parameter is an analog knob, not wrapping of course.

Switch: A Switch is a binary button (on/off).

Push button: A push button has a specific value assigned; it enables a direct jump to a value in a cycle.

Texture wrapping: The texture could wrap in z-direction, but it does not in version 1.0.

Texture clamping: In version 1.0 the texture is clamped; the last color value is uniformly extended/applied towards infinity. The decision to use texture clamping is related to implementation detail, it may change in the future.

ModelParams: ModelParams are the parameters of the physical model, e.g. coordinates, length, force coefficient.

ViewParams: ViewParams are parameters like rotation angle, zoom, and color values.

ForceMode: ForceMode encodes a variation in the spring’s character: 0=Tension/Pressure, 1=Tension, 2=Pressure

SliceMode: Using the SliceMode parameters it is possible to output a graph that shows the profile along a path.

Function of the ToolButton

[ToolButton] = Common toggle of visibility for OptionBar, TransitBar, TouchMenu and ModelText.

Update: Since version 1.1 the ToolButton toggles AllText including the Frame on/off.

OptionBar, TransitBar and TouchMenu are present on tablet, not on the phone. Since version 1.2 the application starts with Frame off; you have to touch the gray circular ToolButton first to make the Frame visible!

Legend for buttons on OptionBar on the top

[fra] = Frame on/off (no longer present since version 1.2)
[men] = TouchMenu on/off
[tbl] = ModelText on/off
[txt] = ParamText, StatusText, StatusLines and LabelText on/off (simultaneously)
[lbl] = LabelText on/off (independently)
[Copy] = copies text into the clipboard
[Paste] = processes text from the clipboard
[Share] = enables sharing, as implemented on the platform (e.g. on iPad)

Update: Copy, Paste and Share are no longer present on OptionBar in version 1.2. These buttons are now mapped to one of multiple pages on the Frame.

Legend for buttons on TransitBar on the lower right

//[Connect] = try to establish connection to server
//[Disconnect] = disconnect from server
[M1] = Memory 1
[M2] = Memory 2
[R1] = Memory Recall 1
[R1] = Memory Recall 2
[TR] = Transition - start animation from State 1 to 2

Update: Animations are deprecated now on the touch screen device and will probably disappear. That should be the domain of future desktop applications. Connect and Disconnect buttons are moved to a page on the frame. Connect would enable a remote control feature tested in the lab; you do not have the server, so cannot use it. Connect is always a manual operation. The connection would be attempted to a local location by default, which you can configure. (I hope that someday remote control will be requested by users as an advanced custom feature!)

Legend for buttons on TouchMenu

In version 1.2 the TouchMenu has 2 instead of 5 columns of buttons. The TouchMenu is present only on tablet and desktop versions. Buttons on the TouchMenu are accessible, no matter which button page on the Frame you are on. When you miss them in the Frame, remember that they are on the TouchMenu, which you may have to make visible first with the [men] button on OptionBar.

On the phone there is not enough screen space for the TouchMenu, so the actions are all mapped to buttons on the frame.

You have to swap pages more often, that’s how it is.

Layout in version 1.2

[x], [y], [z], [l], [k] = cycle through model parameters, specific for spring 1, 2, 3 or 4
[32], [64], [128], [256], [512] = value of MeshSize

Layout in version 1.0

[f0], [f1], [f2] = select the value of ForceMode, this is applied to all spring characteristics
[m1], [m2], [m3] = ForceMode, applied only to spring 1, 2 or 3
[mv], [gv] = visibility of marker and grid
[rX] = animated rotation around X
[rY] = animated rotation around Y
[x], [y], [z], [l], [k] = cycle through model parameters, specific for spring 1, 2, 3 or 4
[o] = cycle through offset view parameters (ox, oy, oz)
[32], [64], [128], [256], [512] = value of MeshSize

Legend for buttons on Frame

Since version 1.2 buttons are laid out on multiple pages on the frame. The layout may change to improve usability. Note that each page is designed to supports a task. The same button can appear on several pages. Corner buttons are now used mainly for navigation between pages. Some button positions are mapped to the same action, while others are mapped to a different action on each page.

Look at the text to know what each button does. The short button label will in many cases correspond to the keyboard mapping of the action, and often coincide with the first character of the English word. Actions come in groups, so despite the fact that there are over 200 of them, they are quite easy to remember.

Not all actions are currently mapped to a button.

new buttons in version 1.2

Some of the new buttons (actions) are related to navigation between pages of buttons and between the now bigger number of built in color/texture options. Both pages and colors have now an inner and outer cycle. Usually you stay within the inner cycle, but you can escape to the outer cycle to access additional button pages or color options.

On the phone there are less buttons per page but more pages overall than on the tablet. The number of built in color options is the same on phone, tablet and desktop.

[P-] = go backwards in the cycle of button pages
[P+] = go forward in the page cycle
[P1] = go to page 1
[P2] = go to page 2
[PE] = escape to the outer cycle of additional button pages
[br] = generate a new texture bitmap using random colors
[be] = escape to the outer color cycle
[bl] = lock the current colors

When you lock the current texture bitmap it will be used for all samples. In other words it stays the same when you navigate to a different sample. (The texture bitmap index recorded with the sample is ignored). To unlock the bitmap use buttons [b-] or [b+].

Bitmap locking also happens when you load an external custom bitmap.

Every time you change the bitmap index a new bitmap is generated. Button [br] will take you to the last bitmap index in the inner loop, which happens to be the bitmap index where random colors are used. Tip: The index to the left of the [br] random index has nice colors - my new favorite. Lock this one!

There is more to say about coloring the graph. I will blog about it.

top left corner (version 1.0)

[b] = toggle BigMap, the factor for texture width (1 or 10).
[b+], [b-] = cycle texture (Bitmap)
[c+], [c-] = cycle color scheme
[t1] = texture parameter 1 (position) (moderately quick)
[t2] = texture parameter 2 (width) (operation is moderately quick)

top right corner (version 1.0)

[64] = push button MeshSize 64
[128] = push button MeshSize 128
[f+], [f-] = cycle Figure
[T] = parameter for coordinated change of attachment coordinates (x, y)
[L] = parameter for synchronized change of the length of all springs
[K] = parameter for synchronized change of 'spring constant'
[Z] = parameter for synchronized change of z-coordinate of all attachment points

bottom left corner (version 1.0)

[p] = PlusCap toggle (clamp positive z-value)
[g+], [g-] = knob Graph (Range)
[e+], [e-] = cycle button Plot (plotted function, contains P4, P6, P8)
[P4] = plot amount / length of vector
[P6] = plot direction / directional cosine
[P8] = plot energy

bottom right corner (version 1.0)

[R] = parameter Range
[B] = parameter Limit (Begrenzung), in effect when PlusCap or MinusCap true.
[txt] = toggle visibility of Text
[H+], [H-] = cycle button Hub
[S+], [S-] = cycle button Sample

Legend for TouchBar

Middle = Rotation around X and Y (over graph, text and free area)
Top = Rotation around Z
Bottom = Zoom
Left = Finer change of parameter value, increment +/- 1
Right = Coarser change of parameter value, increment +/- 10

Since version 1.2 each TouchBar has text on it:

Top: current param
Bottom: value of current param
Left: index of button page
Right: index of scene, which corresponds to the number of springs evaluated

Legend for ModelText top right

The four columns show the current values of spring 1, 2, 3 and 4.
Row x = x-coordinate of attachment point
Row y = y-coordinate of attachment point
Row z = z-coordinate of attachment point
Row l = length of spring when force is zero
Row k = constant k of spring characteristic
Row m = ForceMode of the spring
Row j = exception: this row shows the four parameters of SliceMode, another viewing feature

Legend for LabelText in the center

TitleText = static text 'Federgraph'
MsgText = bon mot (user input) or title of current sample

Update: TitleText is no longer present in Version 1.2.

Legend for ParamText top left

LabelText = bigger text on the left shows current parameter.
ValueText = smaller number to the right (above TempoText) shows value of current parameter.
TempoText = smaller number to the right (below ValueText) shows requested value of current parameter.

Update: In version 1.2 LabelText is also shown inside the top TouchBar and ValueText is shown inside the bottom TouchBar.

Legend for text group StatusText on the right

HU = Hub (row in matrix of samples)
SA = Sample (column in matrix of samples)
SC = Scene (variation of the model, there are built in models for 1, 2, 3, 4, and n springs)
PL = Plot (function to be plotted, all based on the same physical model)
MS = MeshSize (square root of number of vertices)
GR = Graph (range for X and Y)
FI = Figure (amplification factor for function value in z-direction)
BM = Bitmap (index of texture used)
PF = PlotFigure (variation for Plot, if any)
DI = Dimension (count of springs)

Update: Version 1.2 adds more built in color options. Watch the bitmap index (BM) so you know where you are in the inner or outer cycle.

Figure (FI) needs explanation: This name is historic. Now I would say it is the amplification. But actually it is a factor by which the result is divided. You change FI with buttons [f-] and [f+]. I have changed the program so that [f+] makes the graph bigger, this is more intuitive, but the actual value will still get smaller.

Parameter G (Gain) will also affects the amplification/dampening of the graph. Same thing: you make G bigger, the graph will be smaller in z direction. You can change the value of G between -1000 and 1000 using the TouchBars (left and right). All parameter values can be interactively changed between -1000 and 1000. Negative values of G are mapped to 0, nothing happens while changes are in the negative range. The mapping is not linear. Using G you can smoothly make the graph smaller. Starting from the default value of zero for G, you can only make the graph smaller, but with finer control.

The recommended way to scale the graph in z-direction is to use [f-] and [f+], then G to make it smaller as needed.

When you zoom the graph, you only move the camera, without changing the actual size of the graph. The range of camera movement is limited. Scale the graph properly before using camera zoom.

Another way to change the scale of the graph is to manipulate parameter K.

Changing the horizontal range of the plot is less tricky. Use buttons [g-] and [g+] then parameter R. Watch label GR. When you press [g+] and nothing happens you are already at the end, value GR = 5.

The samples come with decent adjustments for range and scale and a preselected plot and current parameter. When you change PL for Plot or SC for Scene, then you probably need to adjust Range and Scale. The dynamic range of the graph, the small detail in the middle versus the overall picture, is huge. This is why it is not possible to come up with perfect one size fits all preselected or auto computed optimal values for range and scale. If it was, then the graph would probably not be as interesting.

Explaining how to work with the application is best done in focused blog entries and/or videos. I hope that the community will make good videos. This should be fun. Though I am not a film maker, I will eventually make videos, beat me!

Working with the application is actually quite easy, try it out!

Legend for StatusLines to the lower left (with example)

FormatLine: **1024x768** = current format (ClientRectangle)
MilliesLine: **26~257** = ca. 26 milliseconds needed for 257th computation (duration is 
always 0 on iPad, because it is not measured there)
OptionLine: **LPfo** = LinearMesh=True, PolarMesh=True, FilterMesh=False, OpenMesh=False
StatusLine, example 1: **vS0-b5pm** = Sign (Vorzeichen)=False, SolutionMode=True, ForceMode=0, EqualMode=False, BigMap=False, Dimension=5, PlusCap=False, MinusCap=False
StatusLine, example 2: **Vs1=B3PM** = Sign (Vorzeichen)=True, SolutionMode=False, ForceMode=1, EqualMode=True, BigMap=True, Dimension=3, PlusCap=True, MinusCap=True
EquationLine: **abs(u)** = label for current plot