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#include "MRHeapBytes.h"
6
7namespace MR
8{
9
12
15{
16public:
17 using Obj = ObjectMesh;
18
20 MRMESH_API ChangeMeshDataAction( std::string name, const std::shared_ptr<ObjectMesh>& obj, bool cloneMesh );
21
23 ChangeMeshDataAction( std::string name, const std::shared_ptr<ObjectMesh>& obj, ObjectMeshData&& newData ) :
24 objMesh_{ obj },
25 name_{ std::move( name ) }
26 {
27 if ( objMesh_ )
28 {
29 data_ = std::move( newData );
30 objMesh_->updateData( data_ );
31 }
32 }
33
34 virtual std::string name() const override
35 {
36 return name_;
37 }
38
39 virtual void action( HistoryAction::Type ) override
40 {
41 if ( !objMesh_ )
42 return;
43
44 objMesh_->updateData( data_ );
45 }
46
47 static void setObjectDirty( const std::shared_ptr<ObjectMesh>& obj )
48 {
49 if ( obj )
50 obj->setDirtyFlags( DIRTY_ALL );
51 }
52
53 [[nodiscard]] virtual size_t heapBytes() const override
54 {
55 return name_.capacity() + data_.heapBytes();
56 }
57
58 const std::shared_ptr<ObjectMesh>& obj() const { return objMesh_; }
59
60 const ObjectMeshData& data() const { return data_; }
61
62private:
63 std::shared_ptr<ObjectMesh> objMesh_;
64 ObjectMeshData data_;
65
66 std::string name_;
67};
68
71{
72public:
74 MRMESH_API PartialChangeMeshDataAction( std::string name, const std::shared_ptr<ObjectMesh>& obj, ObjectMeshData&& newData );
75
76 virtual std::string name() const override
77 {
78 if ( combinedAction_ )
79 return combinedAction_->name();
80 assert( false );
81 return "##empty_PartialChangeMeshDataAction";
82 }
83
84 virtual void action( HistoryAction::Type type) override
85 {
86 if ( combinedAction_ )
87 combinedAction_->action( type );
88 }
89
90 [[nodiscard]] virtual size_t heapBytes() const override
91 {
92 if ( combinedAction_ )
93 return combinedAction_->heapBytes() + sizeof( CombinedHistoryAction );
94 else
95 return 0;
96 }
97
98private:
99 std::unique_ptr<CombinedHistoryAction> combinedAction_;
100};
101
103
104}
#define MRMESH_API
Definition MRMeshFwd.h:85
#define MRMESH_CLASS
Definition MRMeshFwd.h:92
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeMeshDataAction.h:39
virtual std::string name() const override
Definition MRChangeMeshDataAction.h:34
const std::shared_ptr< ObjectMesh > & obj() const
Definition MRChangeMeshDataAction.h:58
ObjectMesh Obj
Definition MRChangeMeshDataAction.h:17
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeMeshDataAction.h:53
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:60
static void setObjectDirty(const std::shared_ptr< ObjectMesh > &obj)
Definition MRChangeMeshDataAction.h:47
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:23
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:90
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:84
virtual std::string name() const override
Definition MRChangeMeshDataAction.h:76
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:94
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
mesh and its per-element attributes for ObjectMeshHolder
Definition MRObjectMeshData.h:17