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