How ForceCanvas works
ForceCanvas runs two solvers on the same canvas. The sketch solver handles kinematics. You define your design’s shape with dimensions and constraints, just like a CAD sketch, and the solver works out how that shape is allowed to move. The structural (finite element) solver handles forces. Add supports, joints, loads and moments, and it calculates the reactions and the axial force, shear and moment in every member.
Both run live and stay independent of each other. As you drag a mechanism, the sketch solver moves the geometry and the structural solver re-solves each new position, so you can watch forces change through the full range of motion. Each solver also tells you when it’s ready: the sketch shows whether it’s fully defined or free to move, and the structure shows whether it’s stable enough to solve.
Scope and limitations
ForceCanvas does 2D frame and truss analysis. Current Limitations:
- No distributed loads: point loads and moments only
- No shear or moment diagrams
- No deflection
- No springs or support settlement
- No thermal loads
- No torsion
- No second-order (P-Δ) effects
- No buckling analysis
- 2D only, linear-elastic, small-displacement, centerline geometry
The sketch solver (kinematics)
It works like a CAD sketcher. Draw lines, points and circles roughly, then add dimensions (length, distance, angle, radius) and constraints (parallel, tangent, coincident and more). The solver moves the geometry until every rule is satisfied.
Is your sketch fully defined?
ForceCanvas tracks the sketch’s remaining degrees of freedom (DOF) and colors the geometry after every solve:
- Under-constrained: free to move. Ideal for a mechanism you want to drag.
- Fully constrained: locked in place by your dimensions.
- Over-constrained: a rule is redundant or conflicting. New constraints are checked first, and clashes are flagged.
Colors are in the Canvas Legend.
The structural solver (forces)
Add supports (pinned, roller, fixed), set joints as pinned or rigid, and apply point loads and moments. Every non-construction line becomes a beam member.
The solver uses the direct stiffness method, the standard in frame analysis software. With this method, the structure is analyzed as a system of interconnected elements, and the displacements and reactions are calculated along with the member end forces (axial, shear, moment).
This handles statically indeterminate structures (fixed-fixed beams, closed frames, continuous beams), where equilibrium alone isn’t enough and load splits by stiffness.
Is your structure ready to solve?
- A footer badge shows DETERMINATE, INDETERMINATE or UNSTABLE, based on a DOF count plus a stiffness matrix check that catches traps like parallel rollers.
- A green overlay marks each member that is stable and being solved.
This is separate from sketch DOF: a fully defined sketch can still be unstable. See Status Indicators.
Forces through motion
The solvers are independent: the sketch solver owns the geometry, and the structural solver analyzes whatever pose it’s given. Drag a mechanism and forces re-solve about 15 times per second, giving a quasi-static sweep of reactions and member forces across the motion.
Quasi-static is not dynamic
Each pose is solved as if it were static, without mass or inertia.
Under the hood
The beam element
Euler-Bernoulli vs. Timoshenko
There are two classic ways to model a beam. Euler-Bernoulli (EB) assumes members only bend. Timoshenko also accounts for shear deformation, which makes short, stocky members more flexible than EB predicts.
ForceCanvas defaults to Timoshenko. EB is available per canvas in Canvas Settings for comparing against textbook or EB-only tools, and an “EB THEORY” footer badge shows while it’s active.
When the choice changes your results
Determinate structures (simple beams, cantilevers, most trusses): forces come from equilibrium alone, so the toggle changes nothing visible. That’s correct, not a bug.
Indeterminate structures (propped cantilevers, fixed-fixed beams, closed frames): load splits by stiffness, so the theory changes reactions and member forces.
How much depends on slenderness, the span-to-depth ratio (L/d). Stocky members can see reactions shift by 20% or more, while slender members (L/d around 10 and up) differ by only a few percent.
Element formulation
Each member is a 2-node Timoshenko beam element: cross-sections stay plane but not perpendicular to the axis, so members shear as well as bend. The balance is set by Φ, the ratio of bending to shear stiffness:
Φ = 12·E·I / (κ·G·A·L²)
- E
- modulus of elasticity
- I
- moment of inertia
- κ
- shear correction factor
- G
- shear modulus
- A
- cross-sectional area
- L
- element length
Axial terms stay at EA/L. The bending block is scaled by 1/(1+Φ), with (4+Φ) on the rotational diagonal and (2−Φ) off it (Przemieniecki, 1968). The exact closed form doesn’t shear lock and needs no mesh refinement: one element per member is exact at its nodes.
EB uses this same element. Selecting it sets κ = ∞, which makes Φ exactly 0 and reduces the matrix to the EB one, so the two theories can never drift apart.
The shear correction factor κ
Shear isn’t spread evenly over a section (an I-beam’s web carries most of it). κ is the fraction of area that effectively carries it:
A_s = κ·A shear stiffness = κ·G·A
- A
- gross cross-sectional area
- A_s
- effective shear area
κ < 1 for real sections and depends on shape, not material. Catalog values come from CSI Fig. 29 (round tube, rectangle, wide flange) and Roark §8.10 (square and rectangular hollow), computed from each section’s dimensions. You can override κ in the Materials panel, but precision matters less than you might think: a κ that’s 10% off moves reactions by ≤1.2%.
Sources
- Computers and Structures, Inc., CSI Analysis Reference Manual for SAP2000, ETABS, SAFE and CSiBridge, version 19, Fig. 29.
- W. C. Young and R. G. Budynas, Roark’s Formulas for Stress and Strain, 7th ed., McGraw-Hill, 2002, §8.10.
Watch the convention
Many sources list the form factor A/A_s, the reciprocal of κ (a rectangle is 1.2 there, 0.833 here). Invert it before entering. Also, κ = 0 is not “no correction”: it makes every member a mechanism, so non-positive values are rejected.