PaintBehavior.h
Go to the documentation of this file.
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 
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 
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 
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 
112 
114  int m_width;
115 
117  int m_height;
118 
120  double m_radius;
121 
124 
126  std::vector<DataStructures::IndexedLocalCoordinate> m_coordinates;
127 
130 
132 
133  boost::mutex m_mutex;
134 };
135 
136 } // Graphics
137 } // SurgSim
138 
139 #endif // SURGSIM_GRAPHICS_PAINTBEHAVIOR_H
Definition: CompoundShapeToGraphics.cpp:29
void setRepresentation(std::shared_ptr< Framework::Component > representation)
Sets graphics representation being painted on.
Definition: PaintBehavior.cpp:44
double m_radius
Radius of brush.
Definition: PaintBehavior.h:120
Math::Vector4d m_color
Color to use for decal painting.
Definition: PaintBehavior.h:111
int m_brushOffsetY
Definition: PaintBehavior.h:129
bool doWakeUp() override
Interface to be implemented by derived classes.
Definition: PaintBehavior.cpp:132
void update(double dt) override
Update the behavior.
Definition: PaintBehavior.cpp:167
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > Matrix
A dynamic size matrix.
Definition: Matrix.h:65
void setRadius(double radius)
Sets radius of paint splat.
Definition: PaintBehavior.cpp:199
void setCoordinates(const std::vector< DataStructures::IndexedLocalCoordinate > &coordinate)
Sets collection of local triangle coordinates to paint on during next update.
Definition: PaintBehavior.cpp:83
std::shared_ptr< Graphics::OsgTexture2d > m_texture
Image data of the texture to be used as the decal layer.
Definition: PaintBehavior.h:108
int m_height
Height of assigned texture.
Definition: PaintBehavior.h:117
boost::mutex m_mutex
Definition: PaintBehavior.h:133
PaintBehavior(const std::string &name)
Definition: PaintBehavior.cpp:31
void buildBrush(double radius)
Builds paint brush at the set radius size.
Definition: PaintBehavior.cpp:209
void setTextureSize(int width, int height)
Sets the size of the texture layer to paint onto.
Definition: PaintBehavior.cpp:89
std::vector< DataStructures::IndexedLocalCoordinate > m_coordinates
Collection of UV texture coordinates to paint to on next update.
Definition: PaintBehavior.h:126
Math::Matrix m_brush
Definition: PaintBehavior.h:131
double getRadius() const
Gets radius of paint splat.
Definition: PaintBehavior.cpp:204
int m_brushOffsetX
Definition: PaintBehavior.h:128
std::shared_ptr< Graphics::OsgMeshRepresentation > m_representation
Graphics representation of the mesh to apply behavior to.
Definition: PaintBehavior.h:105
std::shared_ptr< Graphics::OsgMeshRepresentation > getRepresentation() const
Gets graphics representation being painted on.
Definition: PaintBehavior.cpp:50
Definitions of small fixed-size square matrix types.
void paint(const Math::Vector2d &coordinates)
Apply paint brush to texture at specified texture coordinates.
Definition: PaintBehavior.cpp:291
Eigen::Matrix< double, 2, 1 > Vector2d
A 2D vector of doubles.
Definition: Vector.h:53
void buildAntiAliasedBrush(double radius)
Builds an antialiased brush at the set radius size.
Definition: PaintBehavior.cpp:239
Definitions of small fixed-size vector types.
bool m_antialias
Flag for antialiasing the brush.
Definition: PaintBehavior.h:123
Behaviors perform actions.
Definition: Behavior.h:40
SURGSIM_CLASSNAME(SurgSim::Graphics::PaintBehavior)
void setAntiAlias(bool antialias)
Sets whether to anti-alias the brush.
Definition: PaintBehavior.cpp:65
bool getAntiAlias() const
Gets status of antialiased brush.
Definition: PaintBehavior.cpp:78
void setColor(const Math::Vector4d &color)
Sets color of the paint.
Definition: PaintBehavior.cpp:55
Math::Vector4d getColor() const
Gets color of the paint.
Definition: PaintBehavior.cpp:60
Behavior class to allow a specified scene element to receive painting effects.
Definition: PaintBehavior.h:37
int m_width
Width of assigned texture.
Definition: PaintBehavior.h:114
Eigen::Matrix< double, 4, 1 > Vector4d
A 4D vector of doubles.
Definition: Vector.h:61
bool doInitialize() override
Interface to be implemented by derived classes.
Definition: PaintBehavior.cpp:103
Math::Vector2d toPixel(const Math::Vector2d &uv)
Convert texture uv coordinates to pixel coordinates.
Definition: PaintBehavior.cpp:277