MeshLib C++ Docs
Loading...
Searching...
No Matches
MRChangeMeshDataAction.h
Go to the documentation of this file.
1#pragma once
2
4#include "MRObjectMesh.h"
5
6namespace MR
7{
8
11
14{
15public:
16 using Obj = ObjectMesh;
17
19 MRMESH_API ChangeMeshDataAction( std::string name, const std::shared_ptr<ObjectMesh>& obj, bool cloneMesh );
20
22 ChangeMeshDataAction( std::string name, const std::shared_ptr<ObjectMesh>& obj, ObjectMeshData&& newData ) :
23 objMesh_{ obj },
24 name_{ std::move( name ) }
25 {
26 if ( objMesh_ )
27 {
28 data_ = std::move( newData );
29 objMesh_->updateData( data_ );
30 }
31 }
32
33 virtual std::string name() const override
34 {
35 return name_;
36 }
37
38 virtual void action( HistoryAction::Type ) override
39 {
40 if ( !objMesh_ )
41 return;
42
43 objMesh_->updateData( data_ );
44 }
45
46 static void setObjectDirty( const std::shared_ptr<ObjectMesh>& obj )
47 {
48 if ( obj )
49 obj->setDirtyFlags( DIRTY_ALL );
50 }
51
52 [[nodiscard]] virtual size_t heapBytes() const override
53 {
54 return name_.capacity() + data_.heapBytes();
55 }
56
57 const std::shared_ptr<ObjectMesh>& obj() const { return objMesh_; }
58
59 const ObjectMeshData& data() const { return data_; }
60
61private:
62 std::shared_ptr<ObjectMesh> objMesh_;
63 ObjectMeshData data_;
64
65 std::string name_;
66};
67
70{
71public:
73 MRMESH_API PartialChangeMeshDataAction( std::string name, const std::shared_ptr<ObjectMesh>& obj, ObjectMeshData&& newData );
74
75 virtual std::string name() const override
76 {
77 if ( combinedAction_ )
78 return combinedAction_->name();
79 assert( false );
80 return "##empty_PartialChangeMeshDataAction";
81 }
82
83 virtual void action( HistoryAction::Type type) override
84 {
85 if ( combinedAction_ )
86 combinedAction_->action( type );
87 }
88
89 [[nodiscard]] virtual size_t heapBytes() const override
90 {
91 if ( combinedAction_ )
92 return combinedAction_->heapBytes() + sizeof( CombinedHistoryAction );
93 else
94 return 0;
95 }
96
97private:
98 std::unique_ptr<CombinedHistoryAction> combinedAction_;
99};
100
102
103}
#define MRMESH_API
Definition MRMeshFwd.h:82
#define MRMESH_CLASS
Definition MRMeshFwd.h:89
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeMeshDataAction.h:38
virtual std::string name() const override
Definition MRChangeMeshDataAction.h:33
const std::shared_ptr< ObjectMesh > & obj() const
Definition MRChangeMeshDataAction.h:57
ObjectMesh Obj
Definition MRChangeMeshDataAction.h:16
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeMeshDataAction.h:52
ChangeMeshDataAction(std::string name, const std::shared_ptr< ObjectMesh > &obj, bool cloneMesh)
use this constructor to remember object's data before making any changes in it
const ObjectMeshData & data() const
Definition MRChangeMeshDataAction.h:59
static void setObjectDirty(const std::shared_ptr< ObjectMesh > &obj)
Definition MRChangeMeshDataAction.h:46
ChangeMeshDataAction(std::string name, const std::shared_ptr< ObjectMesh > &obj, ObjectMeshData &&newData)
use this constructor to remember object's data and immediately set new data
Definition MRChangeMeshDataAction.h:22
Definition MRCombinedHistoryAction.h:16
Definition MRObjectMesh.h:14
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeMeshDataAction.h:89
PartialChangeMeshDataAction(std::string name, const std::shared_ptr< ObjectMesh > &obj, ObjectMeshData &&newData)
use this constructor to remember object's data and immediately set new data
virtual void action(HistoryAction::Type type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeMeshDataAction.h:83
virtual std::string name() const override
Definition MRChangeMeshDataAction.h:75
Type
Definition MRHistoryAction.h:27
HistoryAction()=default
explicitly define ctors to avoid warning C5267: definition of implicit copy constructor is deprecated...
@ DIRTY_ALL
Definition MRVisualObject.h:93
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
mesh and its per-element attributes for ObjectMeshHolder
Definition MRObjectMeshData.h:17