feat: add HighlightCorners mode to Prop3D and document Prop3D class functionality
This commit is contained in:
48
docs/code/vtk/vtk_Prop3D.md
Normal file
48
docs/code/vtk/vtk_Prop3D.md
Normal file
@@ -0,0 +1,48 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user