pub struct LiveDisplay { /* private fields */ }Expand description
Display cloud built the same way as the final output: every refined zone is placed in the frame of the newest
refined model with its own Sim3 (robust fit on shared 3D points; skipped with relocate off), so zones meet without seams; the
overlap of zone k
with the earlier zones (voxel ownership, no empty strip at the seam) is dropped so it is not drawn twice. Fits are cached per (zone,
reference) pair.
Ownership is sticky: the first compose in which a voxel holds points assigns it to the lowest zone that has points there,
and it keeps that owner for the session, so re-densifying or moving a shown zone does not hand its voxels to another zone
(the one exception: when the owner has no points left in the voxel, the lowest zone that has some takes it over, so no
hole opens). Thinning is key-based when the clouds carry point keys (splitmix64(key) % stride == 0).
Implementations§
Source§impl LiveDisplay
impl LiveDisplay
Sourcepub fn new(opts: LiveOptions) -> Self
pub fn new(opts: LiveOptions) -> Self
With the given settings.
Sourcepub fn set_relocate(&mut self, on: bool)
pub fn set_relocate(&mut self, on: bool)
Turns relocation (see LiveOptions::relocate) on or off.
Sourcepub fn reset_voxel(&mut self)
pub fn reset_voxel(&mut self)
Forgets the voxel size (only when the whole session restarts); the next compose estimates it again.
Sourcepub fn forget(&mut self, k: usize)
pub fn forget(&mut self, k: usize)
Forgets every fit that involves zone k (its model changed or was dropped).
Sourcepub fn compose(
&mut self,
clouds: &BTreeMap<usize, &PointCloud>,
models: &BTreeMap<usize, &Reconstruction>,
) -> PointCloud
pub fn compose( &mut self, clouds: &BTreeMap<usize, &PointCloud>, models: &BTreeMap<usize, &Reconstruction>, ) -> PointCloud
Merged display cloud of clouds (zone → refined cloud) in the frame of the newest zone’s model.
Sourcepub fn compose_zoned(
&mut self,
clouds: &BTreeMap<usize, &PointCloud>,
models: &BTreeMap<usize, &Reconstruction>,
) -> (PointCloud, Vec<usize>)
pub fn compose_zoned( &mut self, clouds: &BTreeMap<usize, &PointCloud>, models: &BTreeMap<usize, &Reconstruction>, ) -> (PointCloud, Vec<usize>)
compose plus the owner zone of every point of the result (same order). Points with equal keys
(the overlap images of two zones densify the same pixel) are kept once, in the lowest zone.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for LiveDisplay
impl RefUnwindSafe for LiveDisplay
impl Send for LiveDisplay
impl Sync for LiveDisplay
impl Unpin for LiveDisplay
impl UnsafeUnpin for LiveDisplay
impl UnwindSafe for LiveDisplay
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T, U> Imply<T> for U
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
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
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.