49 lines
2.4 KiB
Markdown
49 lines
2.4 KiB
Markdown
# Prop3D
|
|
|
|
`uLib::Vtk::Prop3D` is a bridge class that wraps VTK 3D representations (`vtkProp`, `vtkProp3D`) and integrates them into the `uLib` object model. It allows the framework to manage visual objects, synchronize them with underlying data models, and expose display-specific properties to the GUI.
|
|
|
|
## Inheritance
|
|
`uLib::Vtk::Prop3D` : `uLib::Object`
|
|
|
|
## Key Functionalities
|
|
|
|
### VTK Integration
|
|
The class provides access to the underlying VTK objects:
|
|
- `GetProp()`: Returns the `vtkProp`.
|
|
- `GetProxyProp()`: Returns the `vtkProp3D`.
|
|
- `GetParts()` / `GetProps()`: Returns `vtkPropCollection` for composite objects.
|
|
|
|
### Model-View Synchronization
|
|
`Prop3D` ensures that the visual representation stays in sync with the domain model:
|
|
- `Update()`: Synchronizes the VTK representation based on current internal state and properties. Should be called when model data changes.
|
|
- `SyncFromVtk()`: Updates internal state using data from the VTK representation (e.g., after user interaction via gizmos in the 3D view).
|
|
- `GetContent()`: Returns the `uLib::Object` that this `Prop3D` represents visually.
|
|
|
|
### Visual Appearance
|
|
- **Color & Opacity**: `SetColor(r, g, b)` and `SetOpacity(alpha)`.
|
|
- **Selection**: `SetSelectable(bool)` and `SetSelected(bool)` to manage interactivity and highlighting.
|
|
- **BBox/Scale**: `ShowBoundingBox(bool)` and `ShowScaleMeasures(bool)`.
|
|
|
|
### Rendering Modes
|
|
The rendering style can be controlled via the `Representation` enum:
|
|
- `Points`
|
|
- `Wireframe`
|
|
- `Surface`
|
|
- `SurfaceWithEdges`
|
|
- `Volume`
|
|
- `Outline`
|
|
- `Slice`
|
|
|
|
### Display Properties System
|
|
`Prop3D` implements a system to expose specific properties (often marked as `hrp` - human readable properties) to a property editor in the GUI.
|
|
|
|
- `GetDisplayProperties()`: Returns the list of properties registered for display.
|
|
- `RegisterDisplayProperty(uLib::PropertyBase*)`: Adds a property to the display list.
|
|
- `serialize_display(...)`: A virtual method that subclasses implement to define which properties should be exposed.
|
|
|
|
#### Activating Display Properties
|
|
To automatically populate the display properties list, the `ULIB_ACTIVATE_DISPLAY_PROPERTIES` macro should be called in the constructor. This triggers `serialize_display` using a `display_properties_archive`.
|
|
|
|
## Implementation Details
|
|
`Prop3D` uses the Pimpl idiom (via `Prop3DData *pd`) to hide VTK-specific implementation details and reduce header dependencies.
|