30 objMesh_{ std::move( obj ) },
31 name_{ std::move( name ) }
34 if ( objMesh_ && objMesh_->mesh() )
35 meshDiff_ = MeshDiff( *objMesh_->mesh(), oldMesh );
39 PartialChangeMeshAction( std::string name, std::shared_ptr<ObjectMesh> obj, SetNew, std::shared_ptr<Mesh>&& newMesh ) :
40 objMesh_{ std::move( obj ) },
41 name_{ std::move( name ) }
43 assert( objMesh_ && newMesh );
46 auto oldMesh = objMesh_->updateMesh( std::move( newMesh ) );
47 if ( oldMesh && objMesh_->mesh() )
48 meshDiff_ = MeshDiff( *objMesh_->mesh(), *oldMesh );
52 virtual std::string name()
const override
57 virtual void action( HistoryAction::Type )
override
62 auto m = objMesh_->varMesh();
68 objMesh_->setDirtyFlags( DIRTY_ALL );
71 [[nodiscard]]
virtual size_t heapBytes()
const override
73 return name_.capacity() + meshDiff_.heapBytes();
77 std::shared_ptr<ObjectMesh> objMesh_;
84class PartialChangeMeshPointsAction :
public HistoryAction
90 objMesh_{ std::move( obj ) },
91 name_{ std::move( name ) }
97 if (
auto m = objMesh_->varMesh() )
98 pointsDiff_ = VertCoordsDiff( m->points, oldPoints );
103 objMesh_{ std::move( obj ) },
104 name_{ std::move(
name ) }
110 if (
auto m = objMesh_->varMesh() )
112 pointsDiff_ = VertCoordsDiff( newPoints, m->points );
113 m->points = std::move( newPoints );
114 objMesh_->setDirtyFlags( DIRTY_POSITION );
118 virtual std::string
name()
const override
123 virtual void action( HistoryAction::Type )
override
128 auto m = objMesh_->varMesh();
134 objMesh_->setDirtyFlags( DIRTY_POSITION );
137 [[nodiscard]]
virtual size_t heapBytes()
const override
139 return name_.capacity() + pointsDiff_.heapBytes();
143 std::shared_ptr<ObjectMesh> objMesh_;
144 VertCoordsDiff pointsDiff_;
150class PartialChangeMeshTopologyAction :
public HistoryAction
156 objMesh_{ std::move( obj ) },
157 name_{ std::move(
name ) }
163 if (
auto m = objMesh_->varMesh() )
164 topologyDiff_ = MeshTopologyDiff( m->topology, oldTopology );
169 objMesh_{ std::move( obj ) },
170 name_{ std::move(
name ) }
176 if (
auto m = objMesh_->varMesh() )
178 topologyDiff_ = MeshTopologyDiff( newTopology, m->topology );
179 m->topology = std::move( newTopology );
180 objMesh_->setDirtyFlags( DIRTY_FACE );
184 virtual std::string
name()
const override
189 virtual void action( HistoryAction::Type )
override
194 auto m = objMesh_->varMesh();
200 objMesh_->setDirtyFlags( DIRTY_FACE );
203 [[nodiscard]]
virtual size_t heapBytes()
const override
205 return name_.capacity() + topologyDiff_.heapBytes();
209 std::shared_ptr<ObjectMesh> objMesh_;
210 MeshTopologyDiff topologyDiff_;
Definition MRHistoryAction.h:12
unsafe void applyAndSwap(MR.Mesh m)
unsafe void applyAndSwap(MR.MeshTopology t)
Definition MRMesh/MRMesh.h:23
unsafe PartialChangeMeshAction(MR._ByValue_PartialChangeMeshAction _other)
unsafe void action(MR.HistoryAction.Type _1)
unsafe PartialChangeMeshPointsAction(MR._ByValue_PartialChangeMeshPointsAction _other)
unsafe void action(MR.HistoryAction.Type _1)
unsafe void action(MR.HistoryAction.Type _1)
unsafe PartialChangeMeshTopologyAction(MR._ByValue_PartialChangeMeshTopologyAction _other)
unsafe void applyAndSwap(MR.VertCoords m)
constexpr SetNew setNew
Definition MRPartialChangeMeshAction.h:21
constexpr CmpOld cmpOld
Definition MRPartialChangeMeshAction.h:17
std::string name(const T &primitive)
Definition MRFeatures.h:309
Definition MRCameraOrientationPlugin.h:8