MeshLib C++ Docs
Loading...
Searching...
No Matches
MRChangeObjectAction.h
Go to the documentation of this file.
1#pragma once
2#include "MRHistoryAction.h"
3#include "MRObject.h"
4#include "MRVisualObject.h"
5#include "MRHeapBytes.h"
6#include <memory>
7
8namespace MR
9{
12
13
17{
18public:
20 ChangeObjectAction( const std::string& name, const std::shared_ptr<Object>& obj ):
21 obj_{ obj },
22 name_{name}
23 {
24 if ( obj )
25 {
26 cloneObj_ = obj->clone();
27
29 if ( auto visObj = cloneObj_->asType<VisualObject>() )
30 visObj->setVisualizeProperty( false, VisualizeMaskType::ClippedByPlane, ViewportMask::all() );
31 }
32 }
33
34 virtual std::string name() const override { return name_; }
35
36 virtual void action( HistoryAction::Type ) override
37 {
38 if ( obj_.expired() || !cloneObj_ )
39 return;
40
41 auto obj = obj_.lock();
42 auto children = obj->children();
43 for ( auto& child : children )
44 {
45 child->detachFromParent();
46 cloneObj_->addChild( child );
47 }
48
50 if ( auto visObj = obj->asType<VisualObject>() )
51 visObj->setVisualizeProperty( false, VisualizeMaskType::ClippedByPlane, ViewportMask::all() );
52
53 obj->swap( *cloneObj_ );
54 if ( auto visObj = obj->asType<VisualObject>() )
55 visObj->setDirtyFlags( DIRTY_ALL );
56 }
57
58 [[nodiscard]] virtual size_t heapBytes() const override
59 {
60 return name_.capacity() + MR::heapBytes( cloneObj_ );
61 }
62
63private:
64 std::weak_ptr<Object> obj_;
65 std::shared_ptr<Object> cloneObj_;
66 std::string name_;
67};
68
69}
Definition MRChangeObjectAction.h:17
Definition MRHistoryAction.h:15
static ViewportMask all()
mask meaning all or any viewports
Definition MRViewportId.h:49
Visual Object.
Definition MRVisualObject.h:116
size_t heapBytes(const BitSet &bs)
returns the amount of memory given BitSet occupies on heap
Definition MRBitSet.h:313
ChangeObjectAction(const std::string &name, const std::shared_ptr< Object > &obj)
Constructed from original Object.
Definition MRChangeObjectAction.h:20
virtual std::string name() const override
Definition MRChangeObjectAction.h:34
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangeObjectAction.h:58
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangeObjectAction.h:36
Type
Definition MRHistoryAction.h:22
@ DIRTY_ALL
Definition MRVisualObject.h:94
only for bindings generation
Definition MRCameraOrientationPlugin.h:8