2.4 KiB
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 thevtkProp.GetProxyProp(): Returns thevtkProp3D.GetParts()/GetProps(): ReturnsvtkPropCollectionfor 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 theuLib::Objectthat thisProp3Drepresents visually.
Visual Appearance
- Color & Opacity:
SetColor(r, g, b)andSetOpacity(alpha). - Selection:
SetSelectable(bool)andSetSelected(bool)to manage interactivity and highlighting. - BBox/Scale:
ShowBoundingBox(bool)andShowScaleMeasures(bool).
Rendering Modes
The rendering style can be controlled via the Representation enum:
PointsWireframeSurfaceSurfaceWithEdgesVolumeOutlineSlice
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.