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

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

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

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

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

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