v0.13.0
·
328 commits
to master
since this release
Features
- Five new interactive probe widgets in
interaction::widgets:PlaneWidget: an infinite plane defined by a center point and normal. Drag the center to translate the plane freely; drag the normal-tip handle to reorient it. Use the output center and normal directly as clip-plane inputs or withObliquePlaneSliceItem.DiskWidget: a bounded circular plane with center, normal, and radius handles. The rim handle scales the radius while the normal-tip handle reorients the disk. Renders as a wireframe circle with a normal indicator.CylinderWidget: a cylinder defined by two endpoint handles and a radius handle at the midpoint. Drag the endpoints to reposition or tilt the axis; drag the rim handle to resize the radius. Renders as two wireframe end caps with four longitudinal lines.PolylineWidget: an ordered sequence of N draggable waypoints connected by straight segments. Add or remove points programmatically viaadd_pointandremove_point. Withctx.double_clickedset, double-clicking a segment inserts a new point at the projected position and double-clicking a handle removes it (minimum two points enforced).BoxWidgetnow supports rotation: arotationquaternion field orients the box as an OBB. Three arc handles (one per world axis) appear around the box; drag an arc to spin the box around that axis.obb()returns the full oriented geometry;contains_pointtests membership in local box space.wireframe_itemandhandle_glyphsreflect the current orientation automatically.
WidgetContextgains adouble_clickedfield for passing framework double-click events to widgets that support structural editing (currentlyPolylineWidget). Set it fromegui::Response::double_clicked()or the equivalent in other frameworks; leave itfalseif not needed.- Ribbon representation: visualize flow paths as flat swept strips. Push a
RibbonItemintoSceneFrame::ribbon_itemswith concatenated positions and per-strip lengths. Width can be uniform or driven per-point viawidth_attribute. An optionaltwist_attributeorients the ribbon face normal at each point, useful for showing material frame rotation along fibers or vortex filaments. Scalar coloring via a colormap is supported the same way as polylines and tubes. - GPU vertex warp: set
warp_attributeandwarp_scaleon anySceneRenderItemto displace vertex positions in the vertex shader by a named per-vertex vector attribute. The displacement is applied in local space before the model transform, so the scale is in mesh units. Use this for interactive deformation previews or for animating a scalar-driven surface morphing without re-uploading geometry each frame. SplineWidget: an interactive N-point Catmull-Rom spline in world space. Drag any control point to reshape the curve. Callpolyline_itemto get the sampled curve as aPolylineItemfor rendering, andhandle_glyphsfor the draggable sphere handles. Callsampled_positionsdirectly to read the evaluated spline output at configurable resolution.- Keyframe camera animation: build a
CameraTrackfrom any number of timedCameraTargetkeyframes and callinterpolate_cameraeach frame to get a smoothly interpolated position, distance, and orientation. Position and distance use Catmull-Rom interpolation; orientation uses spherical interpolation between adjacent keyframes. Add keyframes in any order; the track sorts them automatically. TurntableController: continuously orbits the camera around its current center point at a configurable angular velocity and elevation. Callfrom_camerato initialize from the current view, then callupdatewith the frame delta each frame. Distance and center are unchanged; only the orientation advances.- Depth of field: blurs geometry outside a configurable focal band. Set
PostProcessSettings::dof_enabledand tunedof_focal_distance,dof_focal_range, anddof_max_blur_radiusto control which depth band stays sharp and how much out-of-focus geometry blurs. Requires the HDR render path. - SSAO for point clouds: when SSAO is enabled, point cloud billboard fragments use a depth-cavity test instead of hemisphere sampling. Pixels between clusters are darkened relative to their depth difference from neighbors, giving separation cues without the noise artifacts that hemisphere SSAO produces on flat billboards.
- Tensor glyph rendering: visualize second-order symmetric tensors as instanced ellipsoids. Push a
TensorGlyphItemintoSceneFrame::tensor_glyphseach frame with per-point eigenvalues and eigenvectors; each glyph is scaled anisotropically along its principal axes and colored by a scalar attribute or by a diverging colormap viaColormapId. - Gaussian splat point clouds: set
PointCloudItem::gaussianto render points as soft radial splats with alpha falling off from the center. Per-point radius can now be driven by a scalar field viaradius_scalarsandradius_range, mapping data values to a pixel-radius interval independent of the scalar colormap. TubeItem: swept tube geometry with configurable cross-section resolution (sides), optional per-point radius, and per-vertex scalar coloring via a colormap. Use this instead ofStreamtubeItemwhen you need scalar-colored tubes or finer/coarser geometry.ImageSliceItem: renders a single axis-aligned cross-section of an uploaded volume as a flat textured quad. Faster than full ray-marching for inspecting individual slices. Setaxis,offset(normalized position along the axis),bbox_min/bbox_max, and an optional colormap LUT. The quad dimensions follow the bounding box, so non-cubic volumes produce the correct rectangular slice.GlyphItemnow accepts adefault_coloranduse_default_colorflag to render glyphs in a fixed RGBA color instead of the scalar LUT. When enabled, the per-instance scalar acts as a brightness multiplier and lighting is skipped, producing flat unlit glyphs.LineProbeWidget,SphereWidget, andBoxWidgetnow expose ahandle_colorfield. Set it to any RGBA color to override the default viridis-mapped coloring on the drag handles.
Fixes
- Clicking a probe widget handle near its edge could fail to start the drag even when the handle was visually highlighted. The hover state from the previous frame is now preserved on the click frame so edge clicks register reliably.
- Probe widget hit-test radii now match the rendered glyph sizes. Previously the hover detection zone was larger than the visible sphere, producing a highlighted ring at the edge that appeared clickable but was outside the actual handle geometry.