SegmentItem.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Open Source Robotics Foundation
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 */
17 #ifndef GAZEBO_GUI_BUILDING_SEGMENTITEM_HH_
18 #define GAZEBO_GUI_BUILDING_SEGMENTITEM_HH_
19 
20 #include <memory>
21 #include <vector>
22 #include <ignition/math/Vector2.hh>
23 #include <ignition/math/Vector3.hh>
24 
25 #include "gazebo/gui/qt.h"
27 
28 #include "gazebo/util/system.hh"
29 
30 namespace gazebo
31 {
32  namespace gui
33  {
34  class GrabberHandle;
35 
36  // Forward declare private data.
37  class SegmentItemPrivate;
38 
41 
44  class GZ_GUI_VISIBLE SegmentItem
45  : public EditorItem, public QGraphicsLineItem
46  {
49  public: explicit SegmentItem(QGraphicsItem *_parent = 0);
50 
52  public: ~SegmentItem();
53 
57  public: void SetLine(const ignition::math::Vector2d &_start,
58  const ignition::math::Vector2d &_end);
59 
62  public: void SetStartPoint(const ignition::math::Vector2d &_start);
63 
66  public: ignition::math::Vector2d StartPoint() const;
67 
70  public: void SetEndPoint(const ignition::math::Vector2d &_end);
71 
74  public: ignition::math::Vector2d EndPoint() const;
75 
78  public: void SetThickness(const double _thickness);
79 
82  public: double Thickness() const;
83 
86  public: double Scale() const;
87 
90  public: void SetScale(const double _scale);
91 
94  public: void SetColor(const ignition::math::Color &_color);
95 
98  public: void ShowHandles(const bool _show);
99 
101  public: void SegmentChanged();
102 
103  // Documentation Inherited
104  public: ignition::math::Vector3d Size() const;
105 
106  // Documentation Inherited
107  public: ignition::math::Vector3d ScenePosition() const;
108 
109  // Documentation Inherited
110  public: double SceneRotation() const;
111 
114  public: std::vector<GrabberHandle *>Grabbers() const;
115 
117  protected: virtual void SegmentUpdated();
118 
122  protected: void UpdateLinkedGrabbers(GrabberHandle *_grabber,
123  const ignition::math::Vector2d &_pos);
124 
129  private: bool sceneEventFilter(QGraphicsItem *watched,
130  QEvent *_event);
131 
136  private: bool GrabberEventFilter(GrabberHandle *_grabber,
137  QEvent *_event);
138 
141  private: void hoverEnterEvent(QGraphicsSceneHoverEvent *_event);
142 
145  private: void hoverMoveEvent(QGraphicsSceneHoverEvent *_event);
146 
149  private: void hoverLeaveEvent(QGraphicsSceneHoverEvent *_event);
150 
153  private: void mouseMoveEvent(QGraphicsSceneMouseEvent *_event);
154 
157  private: void mousePressEvent(QGraphicsSceneMouseEvent *_event);
158 
161  private: void mouseReleaseEvent(QGraphicsSceneMouseEvent *_event);
162 
167  private: void paint(QPainter *_painter,
168  const QStyleOptionGraphicsItem *_option, QWidget *_widget);
169 
171  public: static const double SnapAngle;
172 
174  public: static const double SnapLength;
175 
178  protected: std::vector<GrabberHandle *> grabbers;
179 
182  private: std::unique_ptr<SegmentItemPrivate> dataPtr;
183  };
185  }
186 }
187 
188 #endif
~SegmentItem()
Destructor.
std::vector< GrabberHandle * > Grabbers() const
Get the grabber handles.
double Scale() const
Get the scale of the segment item.
ignition::math::Vector3d Size() const
Get the size of the item in pixels.
Forward declarations for the common classes.
Definition: Animation.hh:26
Base class of an item in the editor.
Definition: EditorItem.hh:42
virtual void SegmentUpdated()
Update item.
static const double SnapLength
Length to snap in meters.
Definition: SegmentItem.hh:174
ignition::math::Vector2d StartPoint() const
Get the start point of the segment.
double Thickness() const
Get the thickness of the segment item.
Definition: GrabberHandle.hh:38
void SetEndPoint(const ignition::math::Vector2d &_end)
Set the end point of the segment.
void SetColor(const ignition::math::Color &_color)
Set the color of the segment item.
void SetThickness(const double _thickness)
Set the thickness of the segment item on the 2d view.
ignition::math::Vector3d ScenePosition() const
Get the scene position of editor item.
void SetScale(const double _scale)
Set the scale of the segment item.
void SetLine(const ignition::math::Vector2d &_start, const ignition::math::Vector2d &_end)
Set the segment's line.
void SetStartPoint(const ignition::math::Vector2d &_start)
Set the start point of the segment.
ignition::math::Vector2d EndPoint() const
Get the end point of the segment.
void SegmentChanged()
Emit segment changed Qt signals.
gui
Definition: KeyEventHandler.hh:29
2D line segment.
Definition: SegmentItem.hh:44
void UpdateLinkedGrabbers(GrabberHandle *_grabber, const ignition::math::Vector2d &_pos)
Update the position of all grabbers linked to the given one.
double SceneRotation() const
Get the scene rotation of the editor item.
static const double SnapAngle
Angle to snap in degrees.
Definition: SegmentItem.hh:171
SegmentItem(QGraphicsItem *_parent=0)
Constructor.
void ShowHandles(const bool _show)
Show the grabber handles of the segment item.
std::vector< GrabberHandle * > grabbers
A list of grabber handles for this item.
Definition: SegmentItem.hh:178