pub struct PlaneWidget {
pub center: Vec3,
pub normal: Vec3,
pub colour: [f32; 4],
pub handle_colour: [f32; 4],
pub display_half_size: f32,
pub normal_display_length: f32,
/* private fields */
}Expand description
An interactive plane widget defined by a center point and unit normal.
Two handles: the center (moves the plane freely in 3D) and a normal tip (orbits the normal direction around the center by dragging).
§Usage
let mut plane = PlaneWidget::new(glam::Vec3::ZERO, glam::Vec3::Z);
// Each frame:
plane.update(&ctx);
fd.scene.polylines.push(plane.plane_item(PLANE_ID));
fd.scene.glyphs.push(plane.handle_glyphs(HANDLE_ID, &ctx));
// Suppress orbit while dragging:
if plane.is_active() { orbit.resolve(); } else { orbit.apply_to_camera(&mut camera); }Fields§
§center: Vec3World-space center of the plane.
normal: Vec3Unit normal vector of the plane (always normalized on output).
colour: [f32; 4]RGBA colour for the wireframe square outline and normal line.
handle_colour: [f32; 4]RGBA colour for the drag handles. Non-zero alpha overrides LUT colouring.
display_half_size: f32Half-size of the visual square in world space.
normal_display_length: f32Distance from center to the normal-tip handle sphere.
Implementations§
Source§impl PlaneWidget
impl PlaneWidget
Sourcepub fn new(center: Vec3, normal: Vec3) -> Self
pub fn new(center: Vec3, normal: Vec3) -> Self
Create a new plane widget.
normal is normalized internally; if zero, defaults to Vec3::Z.
Sourcepub fn update(&mut self, ctx: &WidgetContext) -> WidgetResult
pub fn update(&mut self, ctx: &WidgetContext) -> WidgetResult
Process input for this frame. Returns Updated if state changed.
Sourcepub fn plane_item(&self, id: u64) -> PolylineItem
pub fn plane_item(&self, id: u64) -> PolylineItem
Build a PolylineItem for the wireframe square outline and normal indicator.
The square is oriented by normal and centered at center.
A line segment from the center to the normal-tip handle is included.
Sourcepub fn handle_glyphs(&self, id_base: u64, ctx: &WidgetContext) -> GlyphItem
pub fn handle_glyphs(&self, id_base: u64, ctx: &WidgetContext) -> GlyphItem
Build a GlyphItem with two sphere handles: center and normal tip.
id_base is the pick ID for the center handle; id_base + 1 for the normal-tip handle.
Auto Trait Implementations§
impl Freeze for PlaneWidget
impl RefUnwindSafe for PlaneWidget
impl Send for PlaneWidget
impl Sync for PlaneWidget
impl Unpin for PlaneWidget
impl UnsafeUnpin for PlaneWidget
impl UnwindSafe for PlaneWidget
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.