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
gui
Definition: KeyEventHandler.hh:29
Base class of an item in the editor.
Definition: EditorItem.hh:43
Definition: GrabberHandle.hh:39
2D line segment.
Definition: SegmentItem.hh:46
double Thickness() const
Get the thickness of the segment item.
void SegmentChanged()
Emit segment changed Qt signals.
void SetThickness(const double _thickness)
Set the thickness of the segment item on the 2d view.
double SceneRotation() const
Get the scene rotation of the editor item.
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.
static const double SnapLength
Length to snap in meters.
Definition: SegmentItem.hh:174
ignition::math::Vector3d Size() const
Get the size of the item in pixels.
void SetEndPoint(const ignition::math::Vector2d &_end)
Set the end point of the segment.
std::vector< GrabberHandle * > grabbers
A list of grabber handles for this item.
Definition: SegmentItem.hh:178
ignition::math::Vector2d EndPoint() const
Get the end point of the segment.
void ShowHandles(const bool _show)
Show the grabber handles of the segment item.
void SetStartPoint(const ignition::math::Vector2d &_start)
Set the start point of the segment.
void SetColor(const ignition::math::Color &_color)
Set the color of the segment item.
ignition::math::Vector2d StartPoint() const
Get the start point of the segment.
double Scale() const
Get the scale of the segment item.
void UpdateLinkedGrabbers(GrabberHandle *_grabber, const ignition::math::Vector2d &_pos)
Update the position of all grabbers linked to the given one.
virtual void SegmentUpdated()
Update item.
SegmentItem(QGraphicsItem *_parent=0)
Constructor.
std::vector< GrabberHandle * > Grabbers() const
Get the grabber handles.
static const double SnapAngle
Angle to snap in degrees.
Definition: SegmentItem.hh:171
Forward declarations for the common classes.
Definition: Animation.hh:27