FCS Advanced Geometry
Beyond basic vertices / curves / areas this document covers high-order curves, rounded polygon outlines, local coordinate systems, and volume boundaries.
1. Filleted Polygon Curves (filletedpoly)
A filletedpoly curve is a polyline where each vertex can have an individual fillet radius. This is the correct way to draw rounded steel sections, rounded walls, or any shape with variable corner rounding.
Syntax
curve {c1} filletedpoly items (vertexArray) radiusmultiplier 1
| Argument | Type | Description |
|---|---|---|
items |
array of {Vertex, Radius} |
Ordered list of corner points and their fillet radii |
radiusmultiplier |
number | Global multiplier applied to every per-vertex radius |
Building the items array
Each item is an object with a Vertex (Fcs.Geometry.Vertex3D) and Radius (scalar).
# helper lambda: x,y,z,r → one filletedpoly item
singlePolyItemFn := x,y,z,r => {
Vertex := Fcs.Geometry.Vertex3D(x,y,z),
Radius := r
}
# raw data: rows are [x, y, z, radius]
raw := [
[0, 0, 0, 0.1],
[1, 0, 0, 0.2],
[1, 1, 0, 0.1],
[0, 1, 0, 0.0]
]
itemsArray := raw.Select(it => singlePolyItemFn(it[0], it[1], it[2], it[3]))
curve {c1} filletedpoly items (itemsArray) radiusmultiplier 1
area {a1} boundary curve {c1}
Scaling radii globally
Set radiusmultiplier to a value other than 1 to scale all radii uniformly. Useful when the same profile is placed at different scales:
curve {cSmall} filletedpoly items (itemsArray) radiusmultiplier 0.5
curve {cLarge} filletedpoly items (itemsArray) radiusmultiplier 2.0
Source files
TestData/new-TractionThickFilletedPoly/FilletedArea.fcsTestData/bug-FilletedLength/
2. High-Order Curves (curve order N)
B-spline / NURBS curves can be specified by setting the polynomial order:
curve {cSpline} order 3 points (ptArray)
order |
Curve type |
|---|---|
| 1 | Polyline (default) |
| 2 | Quadratic B-spline |
| 3 | Cubic B-spline |
The points array holds plain Vertex values (no radius needed). Use this for smooth beam paths, swept surfaces, and curved traction lines.
pts := [
Fcs.Geometry.Vertex3D(0, 0, 0),
Fcs.Geometry.Vertex3D(2, 1, 0),
Fcs.Geometry.Vertex3D(4, 0, 0)
]
curve {cArc} order 2 points (pts)
Source files
TestData/new-BridgeBeam/TestData/new-Wheel/
3. Local Coordinate Systems for Points and Curves
pointlcs — point defined in a local coordinate frame
# defines a vertex relative to a local coordinate system `lcs1`
vertex {vLoc} pointlcs lcs1 xyz 1.0 0.5 0.0
curvelcs — curve geometry expressed in a local frame
curve {cLoc} curvelcs lcs1 polyline (ptArray)
Both constructs let you place geometry defined in a convenient local frame (e.g., along a member axis) without manually transforming coordinates.
Source files
TestData/new-RotationalLamp/TestData/new-Solids/
4. Volume Boundary From an Area
When a volume's cross-section is already defined as an area, you can reference it via boundary:
# area defines the cross-section polygon
area {aCs} boundary curve {cProfile}
# volume sweeps it along two endpoints (or between layers)
volume {vol1} boundary {aCs} ...
This avoids duplicating vertex definitions when the same cross-section is reused in multiple volumes.
5. Curved Tractions
Load tractions on curved surfaces follow the curve geometry. Declare the traction on a curve that uses order > 1:
traction {t1} curve {cArc} ... pressureZ -10
The engine integrates the load over the actual arc length.
Source files
TestData/new-TractionThickFilletedPoly/TestData/new-Traction/
6. Rotational Extrusion
A surface-of-revolution is created by rotating a generator curve around an axis:
# spin curve {cGen} 360° around the global Z axis
volume {vRev} revolution curve {cGen} axis z angle 360
Source files
TestData/new-RotationalLamp/
7. Quick Reference
# --- Filleted polygon ---
items := raw.Select(r => { Vertex:=Fcs.Geometry.Vertex3D(r[0],r[1],r[2]), Radius:=r[3] })
curve {cFp} filletedpoly items (items) radiusmultiplier 1
# --- High-order spline ---
curve {cSp} order 3 points (ptArray)
# --- Local-frame point / curve ---
vertex {vL} pointlcs myLcs xyz dx dy dz
curve {cL} curvelcs myLcs polyline (ptArray)
# --- Revolution ---
volume {vR} revolution curve {cGen} axis z angle 360
# --- Island area ---
area {a1} boundary +cOuter -cHole
8. Relevant Test Folders
| Folder | Feature |
|---|---|
new-TractionThickFilletedPoly/ |
filletedpoly items + radiusmultiplier |
new-Traction/ |
Curved tractions |
new-BridgeBeam/ |
High-order curve path |
new-Wheel/ |
Rotational curve |
new-RotationalLamp/ |
Revolution volume + pointlcs |
new-Solids/ |
Various solid primitives |
bug-FilletedLength/ |
Filleted polygon edge-case |