JointMaker.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014-2016 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 
18 #ifndef _GAZEBO_GUI_JOINTMAKER_HH_
19 #define _GAZEBO_GUI_JOINTMAKER_HH_
20 
21 #include <map>
22 #include <memory>
23 #include <string>
24 #include <vector>
25 
26 #include <ignition/math/Pose3.hh>
27 #include <ignition/math/Vector3.hh>
28 
29 #include <sdf/sdf.hh>
30 
32 
33 #include "gazebo/gui/qt.h"
34 
35 #include "gazebo/msgs/msgs.hh"
36 
38 
39 #include "gazebo/util/system.hh"
40 
41 namespace Ogre
42 {
43  class BillboardSet;
44 }
45 
46 namespace boost
47 {
48  class recursive_mutex;
49 }
50 
51 namespace gazebo
52 {
53  namespace common
54  {
55  class KeyEvent;
56  class MouseEvent;
57  }
58 
59  namespace rendering
60  {
61  class DynamicLines;
62  }
63 
64  namespace gui
65  {
66  class JointData;
67  class JointInspector;
68 
69  // Forward declare private data.
70  class JointMakerPrivate;
71 
74 
77  class GZ_GUI_VISIBLE JointMaker : public QObject
78  {
79  Q_OBJECT
80 
83  public: enum JointType
84  {
102  JOINT_GEARBOX
103  };
104 
106  public: JointMaker();
107 
109  public: virtual ~JointMaker();
110 
112  public: void Reset();
113 
115  public: void EnableEventHandlers();
116 
118  public: void DisableEventHandlers();
119 
122  public: void AddJoint(const std::string &_type);
123 
126  public: void AddJoint(const JointType _type);
127 
132  public: JointData *CreateJoint(const rendering::VisualPtr &_parent,
133  const rendering::VisualPtr &_child);
134 
138  public: std::string CreateHotSpot(JointData *_joint);
139 
141  public: void Update();
142 
146  public: void RemoveJoint(const std::string &_jointName);
147 
150  public: void RemoveJointsByLink(const std::string &_linkName);
151 
156  public: std::vector<JointData *> JointDataByLink(
157  const std::string &_linkName) const;
158 
160  public: void GenerateSDF();
161 
164  public: sdf::ElementPtr SDF() const;
165 
169  public: static unsigned int JointAxisCount(
170  const JointMaker::JointType _type);
171 
175  public: static std::string TypeAsString(
176  const JointMaker::JointType _type);
177 
181  public: static JointType ConvertJointType(const std::string &_type);
182 
186  public: static std::string JointMaterial(const std::string &_type);
187 
192  public: JointMaker::JointType State() const;
193 
195  public: void Stop();
196 
199  public: unsigned int JointCount();
200 
205  public: void CreateJointFromSDF(sdf::ElementPtr _jointElem,
206  const std::string &_modelName = "");
207 
213  public: void AddScopedLinkName(const std::string &_name);
214 
217  public slots: void ShowJoints(const bool _show);
218 
222  public: void SetSelected(const std::string &_name, const bool selected);
223 
227  public: void SetSelected(const rendering::VisualPtr &_jointVis,
228  const bool selected);
229 
232  public: std::map<std::string, std::string> LinkList() const;
233 
237  public slots: void OnType(const int _typeInt);
238 
243  public slots: void SetAxis(const std::string &_axis,
244  const ignition::math::Vector3d &_value);
245 
249  public: void SetJointPose(const ignition::math::Pose3d &_pose);
250 
255  public: void SetParentLink(const std::string &_name);
256 
261  public: void SetChildLink(const std::string &_name);
262 
269  public: void SetLinksRelativePose(
270  const ignition::math::Pose3d &_pose, const bool _reset);
271 
278  public: void AlignLinks(const bool _childToParent,
279  const std::string &_axis, const std::string &_mode,
280  const bool _reverse);
281 
283  public: void FinalizeCreation();
284 
288  private: bool OnMousePress(const common::MouseEvent &_event);
289 
293  private: bool OnMouseRelease(const common::MouseEvent &_event);
294 
298  private: bool OnMouseMove(const common::MouseEvent &_event);
299 
303  private: bool OnMouseDoubleClick(const common::MouseEvent &_event);
304 
308  private: bool OnKeyPress(const common::KeyEvent &_event);
309 
313  private: ignition::math::Vector3d LinkWorldCentroid(
314  const rendering::VisualPtr &_visual);
315 
318  private: void OpenInspector(const std::string &_name);
319 
323  private: std::string ScopedLinkName(const std::string &_name);
324 
327  private: void ShowContextMenu(const std::string &_joint);
328 
330  private: void DeselectAll();
331 
335  private: void OnSetSelectedEntity(const std::string &_name,
336  const std::string &_mode);
337 
342  private: void OnSetSelectedJoint(const std::string &_name,
343  const bool _selected);
344 
347  private: void OnLinkInserted(const std::string &_linkName);
348 
351  private: void OnLinkRemoved(const std::string &_linkName);
352 
357  private: JointData *CreateJointLine(const std::string &_name,
358  const rendering::VisualPtr &_parent);
359 
363  private: rendering::VisualPtr LinkVisualFromName(
364  const std::string &_name);
365 
370  private: bool SetParentLink(const rendering::VisualPtr &_parentLink);
371 
376  private: bool SetChildLink(const rendering::VisualPtr &_childLink);
377 
382  private: void SetVisualMoved(const rendering::VisualPtr &_vis,
383  const bool _moved);
384 
386  Q_SIGNALS: void JointAdded();
387 
390  Q_SIGNALS: void EmitLinkInserted(const std::string &_linkId);
391 
394  Q_SIGNALS: void EmitLinkRemoved(const std::string &_linkId);
395 
397  private slots: void OnOpenInspector();
398 
401  private slots: void OnDelete();
402 
404  public: static std::map<JointMaker::JointType, std::string> jointTypes;
405 
407  public: static std::vector<ignition::math::Vector3d> unitVectors;
408 
410  public: static std::map<JointMaker::JointType, std::string>
412 
415  private: std::unique_ptr<JointMakerPrivate> dataPtr;
416  };
418 
419 
422  class GZ_GUI_VISIBLE JointData : public QObject
423  {
424  Q_OBJECT
425 
427  public: void OpenInspector();
428 
431  public: void Update();
432 
434  public: void UpdateMsg();
435 
437  public: std::string name;
438 
441 
444 
447 
450 
453 
456  public: ignition::math::Pose3d parentPose;
457 
460  public: ignition::math::Pose3d childPose;
461 
464  public: ignition::math::Vector3d childScale;
465 
468 
470  public: Ogre::BillboardSet *handles;
471 
474 
476  public: std::vector<ignition::math::Vector3d> axes;
477 
479  public: bool dirty;
480 
483 
486 
488  private slots: void OnOpenInspector();
489 
492  private slots: void OnApply();
493  };
495  }
496 }
497 #endif
Class for drawing lines that can change.
Definition: DynamicLines.hh:43
Generic description of a mouse event.
Definition: MouseEvent.hh:35
Ball joint.
Definition: JointMaker.hh:100
static std::map< JointMaker::JointType, std::string > jointMaterials
A map of joint type to its corresponding material.
Definition: JointMaker.hh:411
ignition::math::Pose3d childPose
Definition: JointMaker.hh:460
#define GZ_GUI_VISIBLE
Definition: system.hh:284
rendering::VisualPtr child
Child visual the joint is connected to.
Definition: JointMaker.hh:452
bool dirty
True if the joint needs update.
Definition: JointMaker.hh:479
GAZEBO_VISIBLE msgs::Joint::Type ConvertJointType(const std::string &_str)
Convert a string to a msgs::Joint::Type enum.
Generic description of a keyboard event.
Definition: KeyEvent.hh:32
Fixed joint.
Definition: JointMaker.hh:88
std::string name
Name of the joint.
Definition: JointMaker.hh:437
std::shared_ptr< Visual > VisualPtr
Definition: RenderTypes.hh:112
JointMaker::JointType type
Type of joint.
Definition: JointMaker.hh:473
static std::vector< ignition::math::Vector3d > unitVectors
Constant vector containing [UnitX, UnitY, UnitZ].
Definition: JointMaker.hh:407
JointInspector * inspector
Inspector for configuring joint properties.
Definition: JointMaker.hh:485
ignition::math::Pose3d parentPose
Definition: JointMaker.hh:456
rendering::VisualPtr parent
Parent visual the joint is connected to.
Definition: JointMaker.hh:449
Handles the creation of joints in the model editor.
Definition: JointMaker.hh:77
msgs::JointPtr jointMsg
Msg containing joint data.
Definition: JointMaker.hh:482
std::vector< ignition::math::Vector3d > axes
Last known axes values.
Definition: JointMaker.hh:476
JointType
Definition: JointMaker.hh:83
Ogre::BillboardSet * handles
Visual handle used to represent joint parent.
Definition: JointMaker.hh:470
Hinge2 joint.
Definition: JointMaker.hh:94
Screw joint.
Definition: JointMaker.hh:96
A class to inspect and modify joints.
Definition: JointInspector.hh:42
rendering::DynamicLines * line
Visual line used to represent joint connecting parent and child.
Definition: JointMaker.hh:467
static std::map< JointMaker::JointType, std::string > jointTypes
A map of joint type to its string value.
Definition: JointMaker.hh:404
Slider joint.
Definition: JointMaker.hh:90
boost::shared_ptr< Joint > JointPtr
Definition: PhysicsTypes.hh:108
rendering::JointVisualPtr jointVisual
Joint visual.
Definition: JointMaker.hh:443
std::shared_ptr< JointVisual > JointVisualPtr
Definition: RenderTypes.hh:140
rendering::VisualPtr visual
Visual of the dynamic line.
Definition: JointMaker.hh:440
ignition::math::Vector3d childScale
Definition: JointMaker.hh:464
Universal joint.
Definition: JointMaker.hh:98
Hinge joint.
Definition: JointMaker.hh:92
rendering::VisualPtr hotspot
Visual of the hotspot
Definition: JointMaker.hh:446
Helper class to store joint data.
Definition: JointMaker.hh:422
none
Definition: JointMaker.hh:86