11 KiB
Expolinc Component Library Reference
Overview
ExpolincLib is a Python module for FreeCAD that provides parametric models of all Expolinc exhibition system components. Each component is a App::FeaturePython parametric object — changes to parameters automatically regenerate the geometry.
Module Structure
ExpolincLib/
├── __init__.py # Package init, version, imports
├── specs.py # Official Expolinc specifications and constants
├── classic_frame.py # Classic Frame system components
├── light_frame.py # Light Frame backlit system components
├── connectors.py # Corner and inline connectors
├── accessories.py # Storage rooms, doors, shelves
├── layouts.py # Booth layout assembly functions
└── bom.py # Bill of materials generation
Common Parameters
All components share these standard parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
width |
float (mm) | — | Component width |
height |
float (mm) | — | Component height |
system |
string | "classic_frame" |
System type: "classic_frame" or "light_frame" |
placement |
Placement | App.Placement() |
Position and rotation in the document |
Classic Frame
ClassicFrameWall
Creates a complete Classic Frame wall assembly: aluminum frame + SEG fabric graphic + support feet.
Parameters:
| Parameter | Type | Range | Default | Description |
|---|---|---|---|---|
width |
int (mm) | 500, 950, 1950, 2950, 3950, 4950 | 1950 | Wall width |
height |
int (mm) | 2500, 3000 | 2500 | Wall height |
is_double_sided |
bool | — | false |
Double-sided (graphic on both sides) |
finish |
string | "silver", "white", "black" |
"silver" |
Profile anodized finish |
include_feet |
bool | — | true |
Include support feet |
include_graphic |
bool | — | true |
Include SEG fabric graphic |
graphic_color |
tuple (R,G,B) | 0–255 per channel | (255,255,255) |
Placeholder graphic color |
Available sizes:
| Width (mm) | Height 2500mm | Height 3000mm |
|---|---|---|
| 500 | ✓ | ✓ |
| 950 | ✓ | ✓ |
| 1950 | ✓ | ✓ |
| 2950 | ✓ | ✓ |
| 3950 | ✓ | ✓ |
| 4950 | ✓ | ✓ |
Example:
from ExpolincLib.classic_frame import ClassicFrameWall
wall = ClassicFrameWall(
width=2950,
height=2500,
is_double_sided=True,
finish="silver"
)
doc.addObject("Part::FeaturePython", "Wall_2950x2500", wall)
ClassicFrameProfile
A single aluminum extrusion profile (one section of a frame). Used internally by ClassicFrameWall.
Parameters: length, profile_type ("horizontal", "vertical"), finish
Light Frame
LightFrameWall
Creates a backlit Light Frame wall: LED frame, diffuser panel, LED strip, power supply.
Parameters:
| Parameter | Type | Range | Default | Description |
|---|---|---|---|---|
width |
int (mm) | 500, 950, 1950, 2950, 3950, 4950 | 1950 | Wall width |
height |
int (mm) | 2500, 3000 | 2500 | Wall height |
led_temperature |
int (K) | 2700–6500 | 4000 | LED color temperature in Kelvin |
brightness |
int (lm) | 500–3000 | 1000 | LED brightness in lumens |
diffuser_type |
string | "opal", "microprism" |
"opal" |
Diffuser type |
include_driver |
bool | — | true |
Include LED driver/power supply |
Example:
from ExpolincLib.light_frame import LightFrameWall
backlit = LightFrameWall(
width=2950,
height=2500,
led_temperature=4000,
brightness=1500
)
Connectors
CornerConnector90
Creates a 90° corner connector joining two walls at right angles.
Parameters: wall_thickness, finish
InlineConnector180
Creates an inline connector joining two wall sections end-to-end.
Parameters: wall_thickness, finish
TConnector
Creates a T-connector for three-way junctions.
Parameters: wall_thickness, finish
Example:
from ExpolincLib.connectors import CornerConnector90
corner = CornerConnector90(wall_thickness=40, finish="silver")
The layouts.py module automatically places appropriate connectors when building booth layouts.
Accessories
StorageRoom
Creates an enclosed storage room attached to a wall.
| Parameter | Type | Default | Description |
|---|---|---|---|
width |
int (mm) | 1950 | Room width |
depth |
int (mm) | 1000 | Room depth |
height |
int (mm) | 2500 | Room height |
has_door |
bool | true |
Include access door |
door_type |
string | "hinged" |
"hinged" or "sliding" |
has_shelving |
bool | false |
Include interior shelves |
BoothDoor
A door panel for integration into a wall.
| Parameter | Type | Default | Description |
|---|---|---|---|
width |
int (mm) | 900 | Door width |
height |
int (mm) | 2200 | Door height |
type |
string | "hinged" |
"hinged", "sliding", "pocket" |
handle_style |
string | "pull" |
"pull", "push", "recessed" |
Shelf
A shelf unit for accessory display.
| Parameter | Type | Default | Description |
|---|---|---|---|
width |
int (mm) | 950 | Shelf width |
depth |
int (mm) | 400 | Shelf depth |
count |
int | 3 | Number of shelf levels |
Data Sources
Spec data for specs.py is sourced from Expolinc's official materials. All values have been verified against the following sources:
| Source | URL | Data |
|---|---|---|
| Expolinc website — Classic Frame | expolinc.com/exhibition-stands/classic-frame |
Widths, heights, weights per size, finish options |
| Expolinc website — Light Frame | expolinc.com/exhibition-stands/light-frame |
Widths, heights, weights, LED options |
| Expolinc Catalog 2020/2021 (PDF) | sgpweb.com/wp-content/uploads/2021/08/Expolinc-Catalog-2020.2021-1.pdf |
Full product catalog with dimensions and specs |
| Expolinc Panel Guide 2024 (PDF) | sesoma.fi/media/wysiwyg/Datasheets/Expolinc_Panel_Guide_Eng_2024.pdf |
Panel thickness, SEG graphic specs |
| Expolinc Google Drive | drive.google.com/drive/folders/1dc39tZQXvJbQbA7aKwICUiL6y6gq9miC |
CAD files, setup instructions, templates |
3D Models (Reference Only)
Expolinc provides 3D models in SketchUp format. These are not directly convertible to parametric FreeCAD objects, but are useful as dimensional reference for building the parametric library:
- SketchUp 3D Warehouse:
3dwarehouse.sketchup.com/by/expolinc— official 3D models (.skp) - Google Drive (per product): Each product folder contains a
3D files/subdirectory
Conversion note: FreeCAD cannot open
.skpfiles directly. For reference use, export from SketchUp to Collada (.dae) or OBJ, then import into FreeCAD as a static mesh. The geometry will be non-parametric — use it to verify profile shapes, connector details, and dimensions, then rebuild as FeaturePython parametric objects.
Recommended Approach
Do not build an automated SketchUp → FreeCAD pipeline. Here's why:
- 3D Warehouse has no public API — automated downloading requires scraping (ToS violation)
- Even with perfect conversion, the output is a static "dumb solid" — you cannot change
widthand have geometry regenerate - The parametric
FeaturePythonobjects that ExpolincLib needs must be hand-coded anyway
Instead, do this:
- Manually download the SketchUp 3D models from the 3D Warehouse or Google Drive once
- Open in SketchUp (free version) and export as STL
- Import into FreeCAD — Part → Create Shape from Mesh → Convert to Solid → Refine. This gives you a reference solid you can measure
- Write the FeaturePython code manually, using the reference solid for profile cross-sections, connector dimensions, and assembly details
- Cross-check dimensions against the verified weight/size tables from the official website
This produces the parametric library the project actually needs, without the complexity and legal risk of an automated conversion pipeline.
Verified Data
The weight and size data in this document have been confirmed accurate against the official Expolinc website (retrieved 2026-05-30):
| Width × Height | Website | Docs | Match |
|---|---|---|---|
| 0.5 × 2.5 m | 8.3 kg | 8.3 kg | ✓ |
| 0.95 × 2.5 m | 10.5 kg | 10.5 kg | ✓ |
| 1.95 × 2.5 m | 14.5 kg | 14.5 kg | ✓ |
| 2.95 × 2.5 m | 16.5 kg | 16.5 kg | ✓ |
| 3.95 × 2.5 m | 20.4 kg | 20.4 kg | ✓ |
| 4.95 × 2.5 m | 25.0 kg | 25.0 kg | ✓ |
Specifications (specs.py)
The specs.py module contains Expolinc dimensional data and constraints used throughout the library.
# Available sizes
CLASSIC_FRAME_SIZES = {
"widths": [500, 950, 1950, 2950, 3950, 4950], # mm
"heights": [2500, 3000], # mm
}
# Weight tables (kg per component)
CLASSIC_FRAME_WEIGHTS = {
(1950, 2500): 14.5,
(2950, 2500): 16.5,
(3950, 2500): 20.4,
(4950, 2500): 25.0,
(1950, 3000): 18.3,
(2950, 3000): 23.3,
(3950, 3000): 26.3,
(4950, 3000): 28.5,
}
# Material properties
ALUMINUM_PROFILE = {
"material": "AlMgSi0.5 (EN AW-6060)",
"finish": "Silver anodized (E6/EV1)",
"profile_thickness": 1.5, # mm
"frame_depth": 40, # mm
}
Layout Functions (layouts.py)
build_inline_booth(doc, width, depth, height, **kwargs)
Creates an inline (row) booth — one back wall with optional side walls.
Returns: dict with keys walls, connectors, accessories, bom_data
build_corner_booth(doc, wall_a, wall_b, height, **kwargs)
Creates a corner booth — two walls at 90° with access from two aisles.
build_peninsula_booth(doc, width, depth, height, **kwargs)
Creates a peninsula booth — U-shaped, open on three sides.
build_island_booth(doc, width, depth, height, **kwargs)
Creates an island booth — four walls, open on all sides.
build_custom_booth(doc, wall_specs, **kwargs)
Creates a booth from a list of wall specifications (arbitrary arrangement).
Common kwargs:
| Parameter | Type | Default | Description |
|---|---|---|---|
backlit_walls |
list[int] | [] |
Indices of walls to make backlit |
storage_rooms |
list[dict] | [] |
Storage room config per wall |
add_connectors |
bool | true |
Auto-add connectors between walls |
grid_size |
int (mm) | 990 | Layout grid alignment |
BOM Generation (bom.py)
generate_bom(doc, format="dict")
Traverses the FreeCAD document and collects all Expolinc components into a bill of materials.
Returns format:
{
"project": "My Booth",
"date": "2026-05-30",
"layout": "island",
"dimensions": {"width": 6000, "depth": 4000, "height": 2500},
"components": [
{
"id": "CF-4950-2500",
"system": "classic_frame",
"type": "wall",
"quantity": 2,
"width": 4950,
"height": 2500,
"weight_kg": 25.0,
"total_weight_kg": 50.0,
},
...
],
"totals": {
"component_count": 12,
"total_weight_kg": 120.5,
"seg_area_m2": 49.5,
"connector_count": {"90deg": 4, "180deg": 0, "T": 0},
"transport_cases": [
{"type": "Standard Case XL", "quantity": 2}
],
}
}
export_bom_to_csv(doc, filepath)
Exports BOM to CSV file.
export_bom_to_spreadsheet(doc)
Creates a FreeCAD Spreadsheet object with BOM data in the current document.