ConcreteExtents
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