Files
uLib/docs/code/vtk/vtk_Prop3D.md

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