ConcreteExtents
ConcreteExtents defines the concrete cross-section geometry. It's a polymorphic base class with specific section types as derived classes.
Supported Section Types
| Type | Description |
|---|---|
TBeam |
T-shaped beam |
IBeam |
I-shaped beam |
LBeam |
L-shaped ledger beam |
Rectangular |
Solid rectangular section |
InvertedTBeam |
Inverted T-beam |
BulbTBeam |
Bulb-T beam |
HollowCore |
Hollow core plank |
MetroDeck |
Metro deck section |
TSlab |
T-slab section |
Riser |
Stair riser section |
Polygonal |
Custom polygonal shape (NOT supported by API) |
Note: Polygonal sections are not currently supported by the API.
Working with Section Types
Type Checking
Use pattern matching to handle different section types:
var design = await client.PullBeamDesignerAsync();
switch (design.ConcreteExtents)
{
case TBeam tBeam:
Console.WriteLine($"T-Beam: {tBeam.Length}\" long, {tBeam.Height}\" tall");
break;
case IBeam iBeam:
Console.WriteLine($"I-Beam: {iBeam.Length}\" long");
break;
case LBeam lBeam:
Console.WriteLine($"L-Beam (Ledger): {lBeam.Length}\" long");
break;
case Rectangular rect:
Console.WriteLine($"Rectangular: {rect.Length}\" x {rect.Width}\" x {rect.Height}\"");
break;
case HollowCore hollowCore:
Console.WriteLine($"Hollow Core: {hollowCore.Length}\" long");
break;
case null:
Console.WriteLine("No section defined");
break;
default:
Console.WriteLine($"Other section type: {design.ConcreteExtents.GetType().Name}");
break;
}
Modifying Properties
Cast to the specific type before modifying:
var design = await client.PullBeamDesignerAsync();
if (design.ConcreteExtents is TBeam tBeam)
{
tBeam.Length = 240; // inches
tBeam.Width = 48; // inches
tBeam.Height = 24; // inches
}
await client.PushBeamDesignerAsync("", design);
Changing Section Type
Replace the entire ConcreteExtents object:
var design = await client.PullBeamDesignerAsync();
// Change from whatever it was to an I-Beam
design.ConcreteExtents = new IBeam
{
Length = 360,
Height = 36,
// Set other required properties...
};
await client.PushBeamDesignerAsync("", design);
Common Properties
All section types inherit from ConcreteExtents and share these common properties:
| Property | Type | Description |
|---|---|---|
HolesAndSolids |
HolesSolidsDefinition | Voids and solid regions |
Topping |
ToppingDefinition | Topping configuration |
TBeam Properties
| Property | Type | Unit | Description |
|---|---|---|---|
Length |
double | inches | Member length |
Width |
double | inches | Total flange width |
TopWidth |
double | inches | Top flange width |
BottomWidth |
double | inches | Bottom flange width |
Height |
double | inches | Total section height |
Thickness |
double | inches | Flange thickness |
JointGap |
double | inches | Gap between members |
StemSpacing |
double | inches | Spacing between stems |
FirstStemLocation |
double | inches | First stem location |
Quantity |
int | - | Number of stems (min: 1) |
CenterLegs |
bool | - | Center leg positioning |
StemEdge |
Corner | - | Stem edge chamfer type |
FlangeTopEdge |
Corner | - | Top flange chamfer |
FlangeBottomEdge |
Corner | - | Bottom flange chamfer |
TBeam Example
var design = await client.PullBeamDesignerAsync();
if (design.ConcreteExtents is TBeam tBeam)
{
// Dimensional properties
tBeam.Length = 240;
tBeam.Width = 48;
tBeam.Height = 24;
tBeam.Thickness = 4;
// Stem configuration
tBeam.Quantity = 2;
tBeam.StemSpacing = 24;
tBeam.CenterLegs = true;
}
await client.PushBeamDesignerAsync("", design);
IBeam Properties
| Property | Type | Unit | Description |
|---|---|---|---|
Length |
double | inches | Member length |
Height |
double | inches | Total section height |
TopFlangeWidth |
double | inches | Top flange width |
BottomFlangeWidth |
double | inches | Bottom flange width |
TopFlangeThickness |
double | inches | Top flange thickness |
BottomFlangeThickness |
double | inches | Bottom flange thickness |
WebWidth |
double | inches | Web width |
Rectangular Properties
| Property | Type | Unit | Description |
|---|---|---|---|
Length |
double | inches | Member length |
Width |
double | inches | Section width |
Height |
double | inches | Section height |
Rectangular Example
var design = await client.PullBeamDesignerAsync();
design.ConcreteExtents = new Rectangular
{
Length = 180,
Width = 12,
Height = 18
};
await client.PushBeamDesignerAsync("", design);
HollowCore Properties
| Property | Type | Unit | Description |
|---|---|---|---|
Length |
double | inches | Member length |
Width |
double | inches | Section width |
Height |
double | inches | Section height |
CoreDiameter |
double | inches | Core void diameter |
CoreCount |
int | - | Number of cores |
Topping Configuration
Most section types support a topping:
if (design.ConcreteExtents is TBeam tBeam)
{
tBeam.Topping.Type = ToppingType.Profile;
tBeam.Topping.Thickness = 2.0; // inches
}
ToppingType Values
| Value | Description |
|---|---|
None |
No topping |
Profile |
Follows section profile |
Uniform |
Uniform thickness |
Complete Example
using System;
using System.Threading.Tasks;
using ErikssonBeam.API.BeamClient;
using ErikssonBeam.API.BeamDesigner;
class SectionExample
{
static async Task DescribeSection(ErikssonBeamClient client)
{
var design = await client.PullBeamDesignerAsync();
Console.WriteLine("=== Section Analysis ===\n");
switch (design.ConcreteExtents)
{
case TBeam t:
Console.WriteLine("Section Type: T-Beam");
Console.WriteLine($" Length: {t.Length}\"");
Console.WriteLine($" Width: {t.Width}\"");
Console.WriteLine($" Height: {t.Height}\"");
Console.WriteLine($" Flange Thickness: {t.Thickness}\"");
Console.WriteLine($" Stems: {t.Quantity}");
Console.WriteLine($" Stem Spacing: {t.StemSpacing}\"");
if (t.Topping?.Type != ToppingType.None)
{
Console.WriteLine($" Topping: {t.Topping.Type}, {t.Topping.Thickness}\" thick");
}
break;
case IBeam i:
Console.WriteLine("Section Type: I-Beam");
Console.WriteLine($" Length: {i.Length}\"");
Console.WriteLine($" Height: {i.Height}\"");
Console.WriteLine($" Top Flange: {i.TopFlangeWidth}\" x {i.TopFlangeThickness}\"");
Console.WriteLine($" Bottom Flange: {i.BottomFlangeWidth}\" x {i.BottomFlangeThickness}\"");
Console.WriteLine($" Web Width: {i.WebWidth}\"");
break;
case Rectangular r:
Console.WriteLine("Section Type: Rectangular");
Console.WriteLine($" Length: {r.Length}\"");
Console.WriteLine($" Width: {r.Width}\"");
Console.WriteLine($" Height: {r.Height}\"");
break;
case HollowCore h:
Console.WriteLine("Section Type: Hollow Core");
Console.WriteLine($" Length: {h.Length}\"");
Console.WriteLine($" Width: {h.Width}\"");
Console.WriteLine($" Height: {h.Height}\"");
Console.WriteLine($" Cores: {h.CoreCount} x {h.CoreDiameter}\" diameter");
break;
case null:
Console.WriteLine("No section defined");
break;
default:
Console.WriteLine($"Section Type: {design.ConcreteExtents.GetType().Name}");
break;
}
}
}
See Also
- Data Model Overview - BeamDesign structure
- DesignCriteria - Project settings
- Pushing Data - Sending changes