MeshLib C++ Docs
Loading...
Searching...
No Matches
MRChangePointCloudNormalsAction.h
Go to the documentation of this file.
1#pragma once
2#include "MRHistoryAction.h"
3#include "MRObjectPoints.h"
4#include "MRPointCloud.h"
5#include "MRHeapBytes.h"
6#include <memory>
7
8
9namespace MR
10{
13
14
18{
19public:
21
23 ChangePointCloudNormalsAction( std::string name, const std::shared_ptr<ObjectPoints>& obj ) :
24 objPoints_{ obj },
25 name_{ std::move( name ) }
26 {
27 if ( obj )
28 {
29 if ( auto pc = obj->pointCloud() )
30 backupNormals_ = pc->normals;
31 }
32 }
33
35 ChangePointCloudNormalsAction( std::string name, const std::shared_ptr<ObjectPoints>& obj, VertNormals && newNormals ) :
36 objPoints_{ obj },
37 backupNormals_{ std::move( newNormals ) },
38 name_{ std::move( name ) }
39 {
41 }
42
43 virtual std::string name() const override
44 {
45 return name_;
46 }
47
48 virtual void action( HistoryAction::Type ) override
49 {
50 if ( !objPoints_ || !objPoints_->varPointCloud() )
51 return;
52
53 std::swap( objPoints_->varPointCloud()->normals, backupNormals_ );
54 setObjectDirty( objPoints_ );
55 }
56
57 static void setObjectDirty( const std::shared_ptr<ObjectPoints>& obj )
58 {
59 if ( obj )
60 obj->setDirtyFlags( DIRTY_RENDER_NORMALS );
61 }
62
63 [[nodiscard]] virtual size_t heapBytes() const override
64 {
65 return name_.capacity() + backupNormals_.heapBytes();
66 }
67
68private:
69 std::shared_ptr<ObjectPoints> objPoints_;
70 VertNormals backupNormals_;
71
72 std::string name_;
73};
74
78{
79public:
81
83 ChangeOneNormalInCloudAction( std::string name, const std::shared_ptr<ObjectPoints>& obj, VertId pointId ) :
84 objPoints_{ obj },
85 pointId_{ pointId },
86 name_{ std::move( name ) }
87 {
88 if ( obj )
89 {
90 if ( auto m = obj->pointCloud() )
91 if ( m->normals.size() > pointId_ )
92 safeNormal_ = m->normals[pointId_];
93 }
94 }
95
97 ChangeOneNormalInCloudAction( std::string name, const std::shared_ptr<ObjectPoints>& obj, VertId pointId, const Vector3f & newNormal ) :
98 objPoints_{ obj },
99 pointId_{ pointId },
100 safeNormal_{ newNormal },
101 name_{ std::move( name ) }
102 {
104 }
105
106 virtual std::string name() const override
107 {
108 return name_;
109 }
110
111 virtual void action( HistoryAction::Type ) override
112 {
113 if ( !objPoints_ )
114 return;
115
116 if ( auto m = objPoints_->varPointCloud() )
117 {
118 if ( m->normals.size() > pointId_ )
119 {
120 std::swap( safeNormal_, m->normals[pointId_] );
121 objPoints_->setDirtyFlags( DIRTY_RENDER_NORMALS );
122 }
123 }
124 }
125
126 static void setObjectDirty( const std::shared_ptr<ObjectPoints>& obj )
127 {
128 if ( obj )
129 obj->setDirtyFlags( DIRTY_RENDER_NORMALS );
130 }
131
132 [[nodiscard]] virtual size_t heapBytes() const override
133 {
134 return name_.capacity();
135 }
136
137private:
138 std::shared_ptr<ObjectPoints> objPoints_;
139 VertId pointId_;
140 Vector3f safeNormal_;
141
142 std::string name_;
143};
144
145}
Definition MRChangePointCloudNormalsAction.h:78
Definition MRChangePointCloudNormalsAction.h:18
Definition MRHistoryAction.h:15
Definition MRObjectPoints.h:14
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangePointCloudNormalsAction.h:63
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangePointCloudNormalsAction.h:48
ChangeOneNormalInCloudAction(std::string name, const std::shared_ptr< ObjectPoints > &obj, VertId pointId)
use this constructor to remember point's normal before making any changes in it
Definition MRChangePointCloudNormalsAction.h:83
virtual size_t heapBytes() const override
returns the amount of memory this object occupies on heap
Definition MRChangePointCloudNormalsAction.h:132
ChangePointCloudNormalsAction(std::string name, const std::shared_ptr< ObjectPoints > &obj, VertNormals &&newNormals)
use this constructor to remember point cloud's normals and immediate set new value
Definition MRChangePointCloudNormalsAction.h:35
static void setObjectDirty(const std::shared_ptr< ObjectPoints > &obj)
Definition MRChangePointCloudNormalsAction.h:57
static void setObjectDirty(const std::shared_ptr< ObjectPoints > &obj)
Definition MRChangePointCloudNormalsAction.h:126
ChangeOneNormalInCloudAction(std::string name, const std::shared_ptr< ObjectPoints > &obj, VertId pointId, const Vector3f &newNormal)
use this constructor to remember point's normal and immediate set new normal
Definition MRChangePointCloudNormalsAction.h:97
ChangePointCloudNormalsAction(std::string name, const std::shared_ptr< ObjectPoints > &obj)
use this constructor to remember point cloud's normals before making any changes in them
Definition MRChangePointCloudNormalsAction.h:23
virtual std::string name() const override
Definition MRChangePointCloudNormalsAction.h:106
virtual void action(HistoryAction::Type) override
This function is called on history action (undo, redo, etc.)
Definition MRChangePointCloudNormalsAction.h:111
Type
Definition MRHistoryAction.h:22
virtual std::string name() const override
Definition MRChangePointCloudNormalsAction.h:43
@ DIRTY_RENDER_NORMALS
Definition MRVisualObject.h:81
only for bindings generation
Definition MRCameraOrientationPlugin.h:8