pub struct DiskWidget {
pub center: Vec3,
pub normal: Vec3,
pub radius: f32,
pub color: [f32; 4],
pub handle_color: [f32; 4],
pub normal_display_length: f32,
/* private fields */
}Expand description
An interactive disk widget: a bounded circular plane with center, normal, and radius.
Three handles: center (moves freely), normal tip (orbits the normal), and a radius handle on the disk rim (scales the radius).
§Usage
let mut disk = DiskWidget::new(glam::Vec3::ZERO, glam::Vec3::Z, 2.0);
// Each frame:
disk.update(&ctx);
fd.scene.polylines.push(disk.wireframe_item(DISK_ID));
fd.scene.glyphs.push(disk.handle_glyphs(HANDLE_ID, &ctx));Fields§
§center: Vec3World-space center of the disk.
normal: Vec3Unit normal vector of the disk plane.
radius: f32Radius in world units.
color: [f32; 4]RGBA color for the wireframe circle and normal line.
handle_color: [f32; 4]RGBA color for the drag handles. Non-zero alpha overrides LUT coloring.
normal_display_length: f32Distance from center to the normal-tip handle sphere.
Implementations§
Source§impl DiskWidget
impl DiskWidget
Sourcepub fn new(center: Vec3, normal: Vec3, radius: f32) -> Self
pub fn new(center: Vec3, normal: Vec3, radius: f32) -> Self
Create a new disk 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 wireframe_item(&self, id: u64) -> PolylineItem
pub fn wireframe_item(&self, id: u64) -> PolylineItem
Build a PolylineItem for the wireframe circle and normal indicator.
The circle uses 32 segments. A line from center to the normal tip is also 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 three sphere handles: center, normal tip, and radius edge.
id_base = center, id_base + 1 = normal tip, id_base + 2 = radius handle.
Auto Trait Implementations§
impl Freeze for DiskWidget
impl RefUnwindSafe for DiskWidget
impl Send for DiskWidget
impl Sync for DiskWidget
impl Unpin for DiskWidget
impl UnsafeUnpin for DiskWidget
impl UnwindSafe for DiskWidget
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.