opensurgsim
PaintBehavior.h
1 // This file is a part of the OpenSurgSim project.
2 // Copyright 2016, SimQuest Solutions Inc.
3 //
4 // Licensed under the Apache License, Version 2.0 (the "License");
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 // http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 
16 #ifndef SURGSIM_GRAPHICS_PAINTBEHAVIOR_H
17 #define SURGSIM_GRAPHICS_PAINTBEHAVIOR_H
18 
19 #include "SurgSim/Collision/Representation.h"
20 #include "SurgSim/DataStructures/IndexedLocalCoordinate.h"
21 #include "SurgSim/Framework/Behavior.h"
22 #include "SurgSim/Framework/Component.h"
23 #include "SurgSim/Framework/Logger.h"
24 #include "SurgSim/Graphics/OsgMeshRepresentation.h"
25 #include "SurgSim/Graphics/OsgTexture2d.h"
26 #include "SurgSim/Math/Matrix.h"
27 #include "SurgSim/Math/Vector.h"
28 
29 namespace SurgSim
30 {
31 namespace Graphics
32 {
33 
34 SURGSIM_STATIC_REGISTRATION(PaintBehavior);
35 
38 {
39 public:
40  explicit PaintBehavior(const std::string& name);
41 
42  SURGSIM_CLASSNAME(SurgSim::Graphics::PaintBehavior);
43 
46  void setRepresentation(std::shared_ptr<Framework::Component> representation);
47 
50  std::shared_ptr<Graphics::OsgMeshRepresentation> getRepresentation() const;
51 
55  void setTextureSize(int width, int height);
56 
59  void setColor(const Math::Vector4d& color);
60 
63  Math::Vector4d getColor() const;
64 
67  void setRadius(double radius);
68 
71  double getRadius() const;
72 
75  void setAntiAlias(bool antialias);
76 
79  bool getAntiAlias() const;
80 
83  void setCoordinates(const std::vector<DataStructures::IndexedLocalCoordinate>& coordinate);
84 
85  bool doInitialize() override;
86  bool doWakeUp() override;
87 
88  void update(double dt) override;
89 
90 private:
91 
93  void buildBrush(double radius);
94 
96  void buildAntiAliasedBrush(double radius);
97 
99  Math::Vector2d toPixel(const Math::Vector2d& uv);
100 
102  void paint(const Math::Vector2d& coordinates);
103 
105  std::shared_ptr<Graphics::OsgMeshRepresentation> m_representation;
106 
108  std::shared_ptr<Graphics::OsgTexture2d> m_texture;
109 
111  Math::Vector4d m_color;
112 
114  int m_width;
115 
117  int m_height;
118 
120  double m_radius;
121 
123  bool m_antialias;
124 
126  std::vector<DataStructures::IndexedLocalCoordinate> m_coordinates;
127 
128  int m_brushOffsetX;
129  int m_brushOffsetY;
130 
131  Math::Matrix m_brush;
132 
133  boost::mutex m_mutex;
134 };
135 
136 } // Graphics
137 } // SurgSim
138 
139 #endif // SURGSIM_GRAPHICS_PAINTBEHAVIOR_H
Wraps glewInit() to separate the glew opengl definitions from the osg opengl definitions only imgui n...
Definition: AddRandomSphereBehavior.cpp:36
void setRepresentation(std::shared_ptr< Framework::Component > representation)
Sets graphics representation being painted on.
Definition: PaintBehavior.cpp:46
Eigen::Matrix< double, 4, 1 > Vector4d
A 4D vector of doubles.
Definition: Vector.h:61
bool doWakeUp() override
Interface to be implemented by derived classes.
Definition: PaintBehavior.cpp:134
void update(double dt) override
Update the behavior.
Definition: PaintBehavior.cpp:169
void setRadius(double radius)
Sets radius of paint splat.
Definition: PaintBehavior.cpp:201
void setCoordinates(const std::vector< DataStructures::IndexedLocalCoordinate > &coordinate)
Sets collection of local triangle coordinates to paint on during next update.
Definition: PaintBehavior.cpp:85
void setTextureSize(int width, int height)
Sets the size of the texture layer to paint onto.
Definition: PaintBehavior.cpp:91
Eigen::Matrix< double, 2, 1 > Vector2d
A 2D vector of doubles.
Definition: Vector.h:53
double getRadius() const
Gets radius of paint splat.
Definition: PaintBehavior.cpp:206
std::shared_ptr< Graphics::OsgMeshRepresentation > getRepresentation() const
Gets graphics representation being painted on.
Definition: PaintBehavior.cpp:52
Definitions of small fixed-size square matrix types.
Definitions of small fixed-size vector types.
Behaviors perform actions.
Definition: Behavior.h:40
void setAntiAlias(bool antialias)
Sets whether to anti-alias the brush.
Definition: PaintBehavior.cpp:67
bool getAntiAlias() const
Gets status of antialiased brush.
Definition: PaintBehavior.cpp:80
void setColor(const Math::Vector4d &color)
Sets color of the paint.
Definition: PaintBehavior.cpp:57
Math::Vector4d getColor() const
Gets color of the paint.
Definition: PaintBehavior.cpp:62
Behavior class to allow a specified scene element to receive painting effects.
Definition: PaintBehavior.h:37
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > Matrix
A dynamic size matrix.
Definition: Matrix.h:65
bool doInitialize() override
Interface to be implemented by derived classes.
Definition: PaintBehavior.cpp:105