MeshLib C++ Docs
Loading...
Searching...
No Matches
MRChangeSelectionAction.h
Go to the documentation of this file.
1#pragma once
2#include "MRHistoryAction.h"
3#include "MRObjectMesh.h"
4#include "MRObjectPoints.h"
5#include "MRHeapBytes.h"
6
7namespace MR
8{
9
12
15{
16public:
17 using Obj = ObjectMesh;
18
20 ChangeMeshFaceSelectionAction( const std::string& name, const std::shared_ptr<ObjectMesh>& objMesh ):
21 name_{name},
22 objMesh_{objMesh}
23 {
24 if ( !objMesh_ )
25 return;
26 selection_ = objMesh_->getSelectedFaces();
27 }
28
30 ChangeMeshFaceSelectionAction( const std::string& name, const std::shared_ptr<ObjectMesh>& objMesh, FaceBitSet&& newSelection ):
31 name_{name},
32 objMesh_{objMesh}
33 {
34 if ( !objMesh_ )
35 return;
36 selection_ = objMesh_->getSelectedFaces();
37 objMesh_->selectFaces( std::move( newSelection ) );
38 }
39
40 virtual std::string name() const override { return name_; }
41
42 virtual void action( Type ) override
43 {
44 if ( !objMesh_ )
45 return;
46 auto tmp = objMesh_->getSelectedFaces();
47 objMesh_->selectFaces( std::move( selection_ ) );
48 selection_ = std::move( tmp );
49 }
50
51 const FaceBitSet & selection() const { return selection_; }
52
54 static void setObjectDirty( const std::shared_ptr<ObjectMesh>& ) {}
55
56 [[nodiscard]] virtual size_t heapBytes() const override
57 {
58 return name_.capacity() + selection_.heapBytes();
59 }
60
61private:
62 std::string name_;
63 std::shared_ptr<ObjectMesh> objMesh_;
64 FaceBitSet selection_;
65};
66
69{
70public:
71 using Obj = ObjectMesh;
72
74 ChangeMeshEdgeSelectionAction( const std::string& name, const std::shared_ptr<ObjectMesh>& objMesh ) :
75 name_{ name },
76 objMesh_{ objMesh }
77 {
78 if( !objMesh_ )
79 return;
80 selection_ = objMesh_->getSelectedEdges();
81 }
82
84 ChangeMeshEdgeSelectionAction( const std::string& name, const std::shared_ptr<ObjectMesh>& objMesh, UndirectedEdgeBitSet&& newSelection ) :
85 name_{ name },
86 objMesh_{ objMesh }
87 {
88 if( !objMesh_ )
89 return;
90 selection_ = objMesh_->getSelectedEdges();
91 objMesh_->selectEdges( std::move( newSelection ) );
92 }
93
94 virtual std::string name() const override { return name_; }
95
96 virtual void action( Type ) override
97 {
98 if( !objMesh_ )
99 return;
100 auto tmp = objMesh_->getSelectedEdges();
101 objMesh_->selectEdges( std::move( selection_ ) );
102 selection_ = std::move( tmp );
103 }
104
105 const UndirectedEdgeBitSet & selection() const { return selection_; }
106
108 static void setObjectDirty( const std::shared_ptr<ObjectMesh>& ) {}
109
110 [[nodiscard]] virtual size_t heapBytes() const override
111 {
112 return name_.capacity() + selection_.heapBytes();
113 }
114
115private:
116 std::string name_;
117 std::shared_ptr<ObjectMesh> objMesh_;
118 UndirectedEdgeBitSet selection_;
119};
120
123{
124public:
126
128 ChangeMeshCreasesAction( const std::string& name, const std::shared_ptr<ObjectMesh>& objMesh ) :
129 name_{ name },
130 objMesh_{ objMesh }
131 {
132 if( !objMesh_ )
133 return;
134 creases_ = objMesh_->creases();
135 }
136
138 ChangeMeshCreasesAction( const std::string& name, const std::shared_ptr<ObjectMesh>& objMesh, UndirectedEdgeBitSet&& newCreases ) :
139 name_{ name },
140 objMesh_{ objMesh }
141 {
142 if( !objMesh_ )
143 return;
144 creases_ = objMesh_->creases();
145 objMesh_->setCreases( std::move( newCreases ) );
146 }
147
148 virtual std::string name() const override { return name_; }
149
150 virtual void action( Type ) override
151 {
152 if( !objMesh_ )
153 return;
154 auto tmp = objMesh_->creases();
155 objMesh_->setCreases( std::move( creases_ ) );
156 creases_ = std::move( tmp );
157 }
158
159 const UndirectedEdgeBitSet & creases() const { return creases_; }
160
162 static void setObjectDirty( const std::shared_ptr<ObjectMesh>& ) {}
163
164 [[nodiscard]] virtual size_t heapBytes() const override
165 {
166 return name_.capacity() + creases_.heapBytes();
167 }
168
169private:
170 std::string name_;
171 std::shared_ptr<ObjectMesh> objMesh_;
172 UndirectedEdgeBitSet creases_;
173};
174
177{
178public:
180
182 ChangePointPointSelectionAction( const std::string& name, const std::shared_ptr<ObjectPoints>& objPoints ) :
183 name_{ name },
184 objPoints_{ objPoints }
185 {
186 if ( !objPoints_ )
187 return;
188 selection_ = objPoints_->getSelectedPoints();
189 }
190
192 ChangePointPointSelectionAction( const std::string& name, const std::shared_ptr<ObjectPoints>& objPoints, VertBitSet&& newSelection ) :
193 name_{ name },
194 objPoints_{ objPoints }
195 {
196 if ( !objPoints_ )
197 return;
198 selection_ = objPoints_->getSelectedPoints();
199 objPoints_->selectPoints( std::move( newSelection ) );
200 }
201
202 virtual std::string name() const override { return name_; }
203
204 virtual void action( Type ) override
205 {
206 if ( !objPoints_ )
207 return;
208 auto tmp = objPoints_->getSelectedPoints();
209 objPoints_->selectPoints( std::move( selection_ ) );
210 selection_ = std::move( tmp );
211 }
212
213 const VertBitSet& selection() const { return selection_; }
214
216 static void setObjectDirty( const std::shared_ptr<ObjectPoints>& )
217 {}
218
219 [[nodiscard]] virtual size_t heapBytes() const override
220 {
221 return name_.capacity() + selection_.heapBytes();
222 }
223
224private:
225 std::string name_;
226 std::shared_ptr<ObjectPoints> objPoints_;
227 VertBitSet selection_;
228};
229
231
232}
virtual void action(Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeSelectionAction.h:150
ObjectMesh Obj
Definition MRChangeSelectionAction.h:125
ChangeMeshCreasesAction(const std::string &name, const std::shared_ptr< ObjectMesh > &objMesh)
use this constructor to remember object's creases before making any changes in it
Definition MRChangeSelectionAction.h:128
static void setObjectDirty(const std::shared_ptr< ObjectMesh > &)
empty because set dirty is inside setCreases
Definition MRChangeSelectionAction.h:162
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeSelectionAction.h:164
const UndirectedEdgeBitSet & creases() const
Definition MRChangeSelectionAction.h:159
virtual std::string name() const override
Definition MRChangeSelectionAction.h:148
ChangeMeshCreasesAction(const std::string &name, const std::shared_ptr< ObjectMesh > &objMesh, UndirectedEdgeBitSet &&newCreases)
use this constructor to remember object's current creases and immediate set new creases
Definition MRChangeSelectionAction.h:138
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeSelectionAction.h:110
static void setObjectDirty(const std::shared_ptr< ObjectMesh > &)
empty because set dirty is inside selectEdges
Definition MRChangeSelectionAction.h:108
ChangeMeshEdgeSelectionAction(const std::string &name, const std::shared_ptr< ObjectMesh > &objMesh)
use this constructor to remember object's edge selection before making any changes in it
Definition MRChangeSelectionAction.h:74
virtual std::string name() const override
Definition MRChangeSelectionAction.h:94
ObjectMesh Obj
Definition MRChangeSelectionAction.h:71
const UndirectedEdgeBitSet & selection() const
Definition MRChangeSelectionAction.h:105
ChangeMeshEdgeSelectionAction(const std::string &name, const std::shared_ptr< ObjectMesh > &objMesh, UndirectedEdgeBitSet &&newSelection)
use this constructor to remember object's edge selection and immediate set new selection
Definition MRChangeSelectionAction.h:84
virtual void action(Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeSelectionAction.h:96
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeSelectionAction.h:56
const FaceBitSet & selection() const
Definition MRChangeSelectionAction.h:51
ObjectMesh Obj
Definition MRChangeSelectionAction.h:17
virtual void action(Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeSelectionAction.h:42
virtual std::string name() const override
Definition MRChangeSelectionAction.h:40
ChangeMeshFaceSelectionAction(const std::string &name, const std::shared_ptr< ObjectMesh > &objMesh)
use this constructor to remember object's face selection before making any changes in it
Definition MRChangeSelectionAction.h:20
ChangeMeshFaceSelectionAction(const std::string &name, const std::shared_ptr< ObjectMesh > &objMesh, FaceBitSet &&newSelection)
use this constructor to remember object's face selection and immediate set new value
Definition MRChangeSelectionAction.h:30
static void setObjectDirty(const std::shared_ptr< ObjectMesh > &)
empty because set dirty is inside selectFaces
Definition MRChangeSelectionAction.h:54
const VertBitSet & selection() const
Definition MRChangeSelectionAction.h:213
ChangePointPointSelectionAction(const std::string &name, const std::shared_ptr< ObjectPoints > &objPoints, VertBitSet &&newSelection)
use this constructor to remember object's vertex selection and immediately set new selection
Definition MRChangeSelectionAction.h:192
ChangePointPointSelectionAction(const std::string &name, const std::shared_ptr< ObjectPoints > &objPoints)
use this constructor to remember object's vertex selection before making any changes in it
Definition MRChangeSelectionAction.h:182
static void setObjectDirty(const std::shared_ptr< ObjectPoints > &)
empty because set dirty is inside selectPoints
Definition MRChangeSelectionAction.h:216
virtual std::string name() const override
Definition MRChangeSelectionAction.h:202
virtual void action(Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeSelectionAction.h:204
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeSelectionAction.h:219
ObjectPoints Obj
Definition MRChangeSelectionAction.h:179
Definition MRObjectMesh.h:14
Definition MRObjectPoints.h:14
Type
Definition MRHistoryAction.h:27
HistoryAction()=default
explicitly define ctors to avoid warning C5267: definition of implicit copy constructor is deprecated...
only for bindings generation
Definition MRCameraOrientationPlugin.h:8