18class ChangeIsoAction :
public HistoryAction
21 using Obj = ObjectVoxels;
23 ChangeIsoAction( std::string name,
const std::shared_ptr<ObjectVoxels>& obj ) :
25 name_{ std::move(
name ) }
29 storedIso_ = obj->getIsoValue();
33 virtual std::string
name()
const override
38 virtual void action( HistoryAction::Type )
override
43 float newIso = objVoxels_->getIsoValue();
44 (void)objVoxels_->setIsoValue( storedIso_, {}, false );
48 static void setObjectDirty(
const std::shared_ptr<Obj>& )
52 [[nodiscard]]
virtual size_t heapBytes()
const override
54 return name_.capacity();
58 std::shared_ptr<ObjectVoxels> objVoxels_;
59 float storedIso_{ 0.0f };
65class ChangeDualMarchingCubesAction :
public HistoryAction
68 using Obj = ObjectVoxels;
70 ChangeDualMarchingCubesAction( std::string name,
const std::shared_ptr<ObjectVoxels>& obj ) :
72 name_{ std::move(
name ) }
76 storedDual_ = obj->getDualMarchingCubes();
81 ChangeDualMarchingCubesAction( std::string name,
const std::shared_ptr<ObjectVoxels>& obj,
bool storeDual ) :
83 storedDual_( storeDual ),
84 name_{ std::move(
name ) }
88 virtual std::string
name()
const override
93 virtual void action( HistoryAction::Type )
override
98 auto newDual = objVoxels_->getDualMarchingCubes();
99 objVoxels_->setDualMarchingCubes( storedDual_,
false );
100 storedDual_ = newDual;
103 static void setObjectDirty(
const std::shared_ptr<Obj>& )
107 [[nodiscard]]
virtual size_t heapBytes()
const override
109 return name_.capacity();
113 std::shared_ptr<ObjectVoxels> objVoxels_;
114 bool storedDual_{
true };
120class ChangeActiveBoxAction :
public HistoryAction
123 using Obj = ObjectVoxels;
125 ChangeActiveBoxAction( std::string name,
const std::shared_ptr<ObjectVoxels>& obj ) :
127 name_{ std::move(
name ) }
131 activeBox_ = obj->getActiveBounds();
135 virtual std::string
name()
const override
140 virtual void action( HistoryAction::Type )
override
145 auto box = objVoxels_->getActiveBounds();
146 objVoxels_->setActiveBounds( activeBox_, {}, false );
150 static void setObjectDirty(
const std::shared_ptr<Obj>& )
154 [[nodiscard]]
virtual size_t heapBytes()
const override
156 return name_.capacity();
160 std::shared_ptr<ObjectVoxels> objVoxels_;
167class ChangeSurfaceAction :
public HistoryAction
170 using Obj = ObjectVoxels;
172 ChangeSurfaceAction( std::string name,
const std::shared_ptr<ObjectVoxels>& obj ) :
174 name_{ std::move(
name ) }
178 if (
auto m = obj->mesh() )
179 cloneSurface_ = std::make_shared<Mesh>( *m );
183 virtual std::string
name()
const override
188 virtual void action( HistoryAction::Type )
override
193 cloneSurface_ = objVoxels_->updateIsoSurface( cloneSurface_ );
196 static void setObjectDirty(
const std::shared_ptr<Obj>& obj )
199 obj->setDirtyFlags( DIRTY_ALL );
202 [[nodiscard]]
virtual size_t heapBytes()
const override
208 std::shared_ptr<ObjectVoxels> objVoxels_;
209 std::shared_ptr<Mesh> cloneSurface_;
215class ChangeGridAction :
public HistoryAction
218 using Obj = ObjectVoxels;
220 ChangeGridAction( std::string name,
const std::shared_ptr<ObjectVoxels>& obj ) :
222 changeIsoAction_(
name, obj ),
223 changeSurfaceAction_(
name, obj),
224 name_{ std::move(
name ) }
228 vdbVolume_ = obj->vdbVolume();
229 histogram_ = obj->histogram();
233 virtual std::string
name()
const override
238 virtual void action( HistoryAction::Type obj )
override
243 vdbVolume_ = objVoxels_->updateVdbVolume( std::move( vdbVolume_ ) );
244 histogram_ = objVoxels_->updateHistogram( std::move( histogram_ ) );
245 changeIsoAction_.action( obj );
246 changeSurfaceAction_.action( obj );
249 static void setObjectDirty(
const std::shared_ptr<Obj>& obj )
252 obj->setDirtyFlags( DIRTY_ALL );
255 [[nodiscard]]
virtual size_t heapBytes()
const override
257 return name_.capacity() + histogram_.heapBytes() + changeIsoAction_.heapBytes() + changeSurfaceAction_.heapBytes() +
MR::heapBytes( vdbVolume_.data );
261 std::shared_ptr<ObjectVoxels> objVoxels_;
262 VdbVolume vdbVolume_;
263 Histogram histogram_;
264 ChangeIsoAction changeIsoAction_;
265 ChangeSurfaceAction changeSurfaceAction_;
unsafe ChangeIsoAction(MR._ByValue_ChangeIsoAction _other)
unsafe void action(MR.HistoryAction.Type _1)
size_t heapBytes(const BitSet &bs)
returns the amount of memory given BitSet occupies on heap
Definition MRMesh/MRBitSet.h:298
std::string name(const T &primitive)
Definition MRFeatures.h:309
Definition MRCameraOrientationPlugin.h:8
int heapBytes(FloatGrid grid)