Using ObjectiveFrame
To give a short overview of what ObjectiveFrame can offer please view the following tutorial:
User guide map
This page covers the core modelling workflow: navigation, nodes, beams, loads, boundary conditions, materials, and ordinary result visualization.
More specialized workflows are documented separately:
- AI / LLM integration describes prompt-based structure generation and how generated scripts are reviewed and run.
- Eigenmode solver explains instability diagnostics, mode shapes, animation, and eigenvalue interpretation.
- ChaiScript scripting documents the script interface used by plugins and AI-generated models.
Main window and view
When you start the application the main workspace is displayed. The workspace is your workbench where you create your structures. By default the workspace is 20 x 20 units large. The size can be changed from the View/Settings... dialog.

The view can be changed using the mouse. All view functions are handled by the right mouse button in combination with a modifier key.
- Holding down the right button and moving the mouse will rotate the view.
- Holding down the right button with the [Shift]-key will pan the view.
- Holding down the right button with the [Alt]-key will zoom in and out.
On the screen is also a Hints windows displaying helpful hints for the different available tools.
The top left toolbar contains the editing toolbar providing selection, move, copy, remove and property inspection functionality.
The lower left toolbar contains functions for creating nodes, elements, loads, boundary conditions and section properties. These are described in the following sections.
Modeling
Creating nodes
Nodes are created by selecting the node tool (first icon to the left in the lower toolbar). A cursor is shown on the workspace:

At the top right of the window the current position of the cursor is shown:

By default the cursor is locked in the XZ-plane, but can be moved vertically in the Y-direction by holding down the [Shift]-modifier.

Selecting elements/nodes
There are three selection tools in the top left toolbar. They differ only in how you point at things — what happens to what you point at is the same for all three.

- Select — click on a node or element. Objects highlight as the mouse passes over them.
- Box select — hold the mouse button down and drag a rectangle.
- Paint select — hold the mouse button down and sweep the cursor over objects. Useful for an irregular group that no rectangle fits.
The current selection is highlighted in yellow.

Adding and removing
All three tools follow the same convention:
| Modifier | Effect |
|---|---|
| none | Replaces the current selection |
| [Shift] | Adds to the current selection |
| [Ctrl] | Removes from the current selection |
Clicking empty workspace without a modifier clears the selection.
Box select
The rectangle is drawn on the screen rather than in the model, so the camera decides what it catches. Rotate the view until the objects you want line up behind one another, then drag across them. This is usually the quickest way to grab everything at one level of a frame, or one face of a structure.
The direction you drag changes what is caught:
- Left to right takes only what falls entirely inside the rectangle. The rectangle is drawn in blue.
- Right to left also takes anything the rectangle touches, including elements crossing it with both ends outside. The rectangle is drawn in green.
For nodes there is no difference — a node is either in the rectangle or it is not. The distinction matters for elements.
Restricting what can be selected
The three filter buttons next to the selection tools decide what the tools are allowed to pick up: everything, nodes only, or elements only. On a dense frame this stops a rectangle from catching elements you meant to leave alone.
The filter stays in force when you switch between the three selection tools. The active filter and the number of selected objects are shown in the coordinate display at the top right of the window.
Edit / Select all ([Ctrl+A]) also honours the filter, so it selects everything, only the nodes, or only the elements depending on which filter button is active. Edit / Select all nodes and Edit / Select all elements ignore the filter and leave it untouched.
Screenshot placeholder
Add a picture of the top left toolbar showing the three selection tools and the three filter buttons, and one of the coordinate display showing the filter and selection counts.
Selecting from the current selection
Edit / Select from selection holds commands that follow the structure rather than the screen. Each one starts from whatever is already selected:
| Command | Selects |
|---|---|
| Grow [Ctrl++] | One more ring of nodes and elements outwards |
| Shrink [Ctrl+-] | Strips the outer ring, the inverse of Grow |
| Connected | Everything reachable through elements from the selection |
| Whole member | Extends the selected elements along their member |
| Same material | Every element sharing a material with the selected elements |
| Same X, Same level (Y), Same Z | Everything lying in the same plane as the selection |
Whole member walks outwards through joints where exactly two elements meet in a straight line, so it recovers a column or beam that has been subdivided — select one segment, pick Whole member, and the whole original member comes back.
Same level (Y) picks a storey: select any node at that level and the rest of the floor comes with it.
Tip
These commands honour the selection filter as well. With the filter set to nodes, Connected gives you the nodes of the connected structure without its elements.
Moving/Copying nodes
As ObjectiveFrame uses node based geometry the only objects that can be moved are nodes. Moving a node can be done in several ways. A single node can be moved by selecting it using the select tool and then clicking the inspect-tool.

When a single node is selected the following dialog is shown:

Clicking in the position boxes you can directly change the coordinate of the nodes.
When multiple nodes are selected brings up the move/copy window instead.

In the Offset input boxes an offset can be given, which can be used to move or copy nodes. When nodes have been moved or copy the selection is kept and can be used to repeat the operation. The shortcuts can be used to quickly set an offset for moving in a certain direction.
In the following figure 4 nodes have been selected.

Moving these nodes using the property window is shown in the following figure:

Copying the nodes will result in the following result:

Note
The selection will move to the copied nodes, so that you can continue the copy operation multiple times.
Repeating a selection with arrays
The offset copy described above copies nodes. An array repeats the whole selection - nodes, the beams between them, their materials and cross section rotation - as many times as you ask for, and keeps the original. It is the quickest way to turn one bay into a truss, one frame into a building, or one rib into a rotationally symmetric roof.
Arrays act on the current selection, so select something first. The affected set is the selected nodes together with the end nodes of any selected beam, and every beam with both ends in that set comes along - so selecting beams behaves the way it looks.
There are three kinds:
| Kind | Repeats | Typical use |
|---|---|---|
| Linear | Along one direction | Extend a truss bay by bay |
| Grid | Across a principal plane, two directions at once | A grid of frames |
| Polar | Around an axis | Ribs of a dome, guys of a mast |
Quick presets
Modify/Array holds ready-made commands that need no dialog:
- Repeat along X/Y/Z steps by the length of the selection itself and welds the seams, so the copies join into one continuous structure.
- Polar about X/Y/Z places 4, 6, 8 or 12 instances evenly around the world origin.
The grid dialog
Modify/Array/Grid in XY plane..., /Grid in XZ plane... and /Grid in YZ plane... open a small dialog that asks only for the two repeats and the two steps, named after the axes of the plane you chose. An XZ grid therefore asks for X repeat, X step, Z repeat and Z step.
The transform panel
Modify/Transform... opens the transform panel, whose Array tab offers all three kinds with their full set of options, including the polar sweep angle and the choice of whether copies rotate. Unlike the dialog it stays open, so you can adjust the numbers and run the command again.
Repeats include the original
This is the one thing that is easy to get wrong. A count of 2 gives you the original plus one copy, and a 4 x 3 grid is 12 instances, that is 11 copies. The grid controls show the resulting instance and copy counts from the numbers currently in the fields.
The step is likewise the distance per copy, not the total span. Tick the step in selection lengths option to give steps in bounding box lengths of the selection instead of model units: a step of 1.0 then puts each copy exactly one selection length further on, which is what joins bays end to end.
Note
A flat selection has no length across its own plane. If you array a planar frame out of its plane with Steps in selection lengths ticked, that step comes out zero and the command refuses rather than piling every copy onto the original. Give the out-of-plane step in model units instead. This is why the grid controls leave the option off by default.
Welding
The weld tolerance fuses coincident nodes once the copies are in place, which is what joins the seam between two bays into a shared node instead of leaving two nodes on top of each other. Set it to 0 to leave the copies detached. A weld also moves supports and loads from a node that disappears onto the node that remains.
Loads and boundary conditions
A linear or grid array is a pure translation, so a load vector and a support mean exactly the same thing on the copy as on the original. Both are carried across by default, and the copies join the same load or boundary condition object, so nothing new appears in the load and boundary condition lists.
A polar array that rotates its copies is different. Distributed beam loads are given in the member's own directions and follow the copy wherever it ends up, so they always come along. A nodal load points somewhere in global coordinates and a partial support restrains a global direction, so neither survives being rotated: they are left off, and the console reports how many were skipped.
Note
A whole array is a single undo step, welding included. The original and every copy are left selected afterwards, so a second array in another direction turns a row into a grid.
Creating elements
Elements are created by using the element tool:

Elements are created by selecting 2 nodes. There is no need to click on the tool multiple times when creating multiple elements. The following figure shows how this is accomplished:



Subdividing a structure
To add more elements to an existing structure ObjectiveFrame can subdivide selected elements into smaller elements. This can be useful to better resolve deflections of a structure. The following example illustrates how this works.
We have the following structure:

We select everything by pressing [Ctrl+A]. Only the elements matter here, so you can also set the selection filter to elements first. We get the following:

Now we select Edit/Subdivde element from the menu or press [Ctrl+D]. Now the structure becomes:

Repeating the same procedure one more time we can get the following structure:

Creating structures from points
In many cases it can be tedious to create elements between nodes. To aid in this process ObjectiveFrame can automatically generate elements between points using the TetGen mesh generator. To illustrate this process we will create a simple bridge from points, which we will connect using this method.
First we will create a grid of nodes using the Create/Grid menu. This brings up the following window:

Set the values as in shown in the figure. Place the cursor at (0,0,0) and click once with the mouse. This should create the following nodes:

Next we will create nodes approximately in the middle of each square grid as shown below:

We will move these points up 0.6 units using the property inspector as shown before or using the move tool.

Next we select the nodes. Set the selection filter to nodes and press [Ctrl+A].

We can now ask ObjectiveFrame to create elements between these nodes automatically by selecting Edit/Mesh selected or pressing [Ctrl+M].

A nice truss-like structure has now been created. ObjectiveFrame uses TetGen to generate a tetrahedral mesh from which it extracts the edges to create our structure.
Boundary conditions
Creating boundary conditions / forces
Creating boundary conditions and loads is a two-step process. First, a general definition of the load or boundary condition is created, then nodes are assigned with a specific condition. A node assigned with a load or boundary condition will have an icon visualizing the condition assigned to it.
A boundary condition is created by displaying the boundary condition window by clicking on:

This brings up the boundary condition window:

ObjectiveFrame automatically creates default boundary conditions for common cases. New conditions can be created by clicking the Add button. To edit an existing condition press the Properties button this brings up the boundary condition editing dialog:

In this dialog, the specifics of the boundary condition can be edited. A descriptive name and color can also be given to the condition.
To apply a boundary condition to nodes/element, select the boundary condition in the list and click on the Assign-button. The assigned nodes will now have icons attached to them illustrating that they have a load or boundary condition assigned to them (See the following figures).


Loads are created using the same procedure as boundary conditions.
Quickly adding boundary conditions to a structure
It is possible to quickly add boundary conditions to a structure by using the menu function Edit/Fix ground nodes or Edit/Fix position ground nodes this will apply these boundary conditions to the nodes that are located with a y-coordinate of 0.0.
There are also menu functions for assigning default boundary conditions to a selected set of nodes using Edit/Fix selected nodes and Edit/Fix position selected nodes.

Materials and section properties
Defining material and section properties
Section and material properties are defined in the material properties window. This window is shown by pressing the right-most button in the lower toolbar.

This brings up the materials window.

All new elements will be assigned the default section property. To assign elements different section properties, create a new section property and assign it using the Assign button. Modifying a section property can be done by clicking on the Properties... button. This will bring up the section property dialog.

In the first tab name, color and property values can be assigned. In the second tab Section values for several standardized sections can be computed.
Rotation of element
The element orientation can be changed by using the property inspector when a beam(s) are selected.
Computing structure response and element forces
Computing element forces
ObjectiveFrame can compute deflections and element forces by selecting Calc/Execute in the menu or pressing [Ctrl+R]. A check will be made to see if boundary conditions and forces have been applied to the model. By default the deflections are computed and visualised.

Other visualisation modes can be selected using the Result-menu. The following figures shows normal forces and moments visualised.


Note
Only node deflections are visualised currently. This could change in upcoming versions.
Evaluating the structure using the feedback mode
ObjectiveFrame has a special mode to evaluate how a force affects a structure in real-time. This mode is activated by selecting the feedback-button in the upper left toolbar.

When selected a special feedback force can be placed on a now and moved by using the mouse. The structure will re-compute and results are updated in real-time. The following figures shows how the load is applied and updated:


Interact with a different node by clicking on it. Section forces can be visualised by using the Result-menu.

Other functions
Exporting to CALFEM for Python
Currently it is possible to export nodes and elements to CALFEM for Python by using the File/Save as CALFEM... menu. Only node coordinates and topology is exported currently. This method will be updated in upcoming versions.