# Shapedivermodel, shapediverparameter, shapediverparametervalue, shapedivergeometry

> The ShapeDiver integration: a reference to a 3D model, to one of its parameters, to a value of such a parameter, and to a geometry within it.

Source: CBX documentation, version 3.x (released). Canonical page: https://docs.configbox.at/docs/technical/property-types/shapediver. Last updated 2026-08-25.

---
The ShapeDiver integration: a reference to a 3D model, to one of its parameters, to a value of such a
parameter, and to a geometry within it.

**Storage kind:** `column` · **Column:** `varchar(255)` inherited — see below

Four types rather than one because each renders a different picker and each is only meaningful
against the one above it. You will not reach for these outside the ShapeDiver feature; they exist to
give the visualization settings on a product typed fields rather than free text.

## The four types

| Type | Refers to | Chain position |
|---|---|---|
| `shapedivermodel` | a ShapeDiver model configured on the product | root |
| `shapediverparameter` | one parameter of that model | needs a model |
| `shapediverparametervalue` | a value of that parameter | needs a parameter |
| `shapedivergeometry` | a named geometry within the model | needs a model |

A parameter reference is only meaningful against a model, and a value only against a parameter. The
pickers narrow each other accordingly.

## Settings

They take the shared settings only — none reads a setting of its own. All four read their value from
the request as a plain string, and the picker's option list comes from the ShapeDiver model
configured on the product, not from the property definition.

`shapedivermodel` is the only one that validates. Its value is a JSON blob, and `check()` refuses it
when the decoded object has no `ticket` — the ShapeDiver ticket id is what every later call needs, so
a model reference without one is refused on save rather than discovered at render time. An empty
value, or one on a field that `appliesWhen` says does not apply, passes.

These fields are typically conditional:

```php
'appliesWhen' => array('visualization_type' => 'shapediver'),
```

## Column widths are declared, not inherited

None of these types declares a `getDefaultDataType()`, so each **inherits the base `varchar(255)`**.
That is rarely what you want: `shapediver_model_data` holds a JSON blob and carries an explicit
`'dataType' => 'text'` in its definition.

If you add one, decide the width deliberately. A reference to a ShapeDiver entity is an external
identifier whose length is not ours to choose, and the default is a guess rather than a decision.

## Notes

The engine helper behind them (`ConfigboxShapediverHelper`) ships ionCube-encoded, so the picker
behaviour cannot be read from this tree — this page is the reference for it.

@see ../com_configbox_property_definition_settings.md §7
