Files
Sketchup-Booth-Designer/docs/COMPONENT_LIBRARY.md
T
2026-09-29 09:44:16 +00:00

11 KiB
Raw Blame History

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 .skp files 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.

Do not build an automated SketchUp → FreeCAD pipeline. Here's why:

  1. 3D Warehouse has no public API — automated downloading requires scraping (ToS violation)
  2. Even with perfect conversion, the output is a static "dumb solid" — you cannot change width and have geometry regenerate
  3. The parametric FeaturePython objects that ExpolincLib needs must be hand-coded anyway

Instead, do this:

  1. Manually download the SketchUp 3D models from the 3D Warehouse or Google Drive once
  2. Open in SketchUp (free version) and export as STL
  3. Import into FreeCAD — Part → Create Shape from Mesh → Convert to Solid → Refine. This gives you a reference solid you can measure
  4. Write the FeaturePython code manually, using the reference solid for profile cross-sections, connector dimensions, and assembly details
  5. 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.