JointMaker.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 
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 
31 #include "gazebo/gui/qt.h"
32 
33 #include "gazebo/msgs/msgs.hh"
34 
36 
37 #include "gazebo/util/system.hh"
38 
39 namespace Ogre
40 {
41  class BillboardSet;
42 }
43 
44 namespace boost
45 {
46  class recursive_mutex;
47 }
48 
49 namespace gazebo
50 {
51  namespace common
52  {
53  class KeyEvent;
54  class MouseEvent;
55  }
56 
57  namespace rendering
58  {
59  class DynamicLines;
60  }
61 
62  namespace gui
63  {
64  class JointData;
65  class JointInspector;
66  class MEUserCmdManager;
67 
68  // Forward declare private data.
69  class JointMakerPrivate;
70 
73 
76  class GZ_GUI_VISIBLE JointMaker : public QObject
77  {
78  Q_OBJECT
79 
82  public: enum JointType
83  {
101  JOINT_GEARBOX
102  };
103 
105  public: JointMaker();
106 
108  public: virtual ~JointMaker();
109 
111  public: void Reset();
112 
114  public: void EnableEventHandlers();
115 
117  public: void DisableEventHandlers();
118 
121  public: void AddJoint(const std::string &_type);
122 
125  public: void AddJoint(const JointType _type);
126 
131  public: JointData *CreateJoint(const rendering::VisualPtr &_parent,
132  const rendering::VisualPtr &_child);
133 
137  public: std::string CreateHotSpot(JointData *_joint);
138 
140  public: void Update();
141 
145  public: void RemoveJoint(const std::string &_jointName);
146 
149  public: void RemoveJointByUser(const std::string &_jointName);
150 
153  public: void RemoveJointsByLink(const std::string &_linkName);
154 
159  public: std::vector<JointData *> JointDataByLink(
160  const std::string &_linkName) const;
161 
163  public: void GenerateSDF();
164 
167  public: sdf::ElementPtr SDF() const;
168 
172  public: static unsigned int JointAxisCount(
173  const JointMaker::JointType _type);
174 
178  public: static std::string TypeAsString(
179  const JointMaker::JointType _type);
180 
184  public: static JointType ConvertJointType(const std::string &_type);
185 
189  public: static std::string JointMaterial(const std::string &_type);
190 
195  public: JointMaker::JointType State() const;
196 
198  public: void Stop();
199 
202  public: unsigned int JointCount();
203 
208  public: void CreateJointFromSDF(sdf::ElementPtr _jointElem,
209  const std::string &_modelName = "");
210 
216  public: void AddScopedLinkName(const std::string &_name);
217 
220  public slots: void ShowJoints(const bool _show);
221 
225  public: void SetSelected(const std::string &_name, const bool selected);
226 
230  public: void SetSelected(const rendering::VisualPtr &_jointVis,
231  const bool selected);
232 
235  public: std::map<std::string, std::string> LinkList() const;
236 
240  public slots: void OnType(const int _typeInt);
241 
246  public slots: void SetAxis(const std::string &_axis,
247  const ignition::math::Vector3d &_value);
248 
252  public: void SetJointPose(const ignition::math::Pose3d &_pose);
253 
258  public: void SetParentLink(const std::string &_name);
259 
264  public: void SetChildLink(const std::string &_name);
265 
273  public: void SetLinksRelativePose(
274  const ignition::math::Pose3d &_pose, const bool _resetAll,
275  const int _resetAxis = -1);
276 
283  public: void AlignLinks(const bool _childToParent,
284  const std::string &_axis, const std::string &_mode,
285  const bool _reverse);
286 
288  public: void FinalizeCreation();
289 
292  public: void SetUserCmdManager(MEUserCmdManager *_manager);
293 
297  private: bool OnMousePress(const common::MouseEvent &_event);
298 
302  private: bool OnMouseRelease(const common::MouseEvent &_event);
303 
307  private: bool OnMouseMove(const common::MouseEvent &_event);
308 
312  private: bool OnMouseDoubleClick(const common::MouseEvent &_event);
313 
317  private: bool OnKeyPress(const common::KeyEvent &_event);
318 
321  private: void OpenInspector(const std::string &_name);
322 
326  private: std::string ScopedLinkName(const std::string &_name);
327 
330  private: void ShowContextMenu(const std::string &_joint);
331 
333  private: void DeselectAll();
334 
338  private: void OnSetSelectedEntity(const std::string &_name,
339  const std::string &_mode);
340 
345  private: void OnSetSelectedJoint(const std::string &_name,
346  const bool _selected);
347 
350  private: void OnLinkInserted(const std::string &_linkName);
351 
354  private: void OnLinkRemoved(const std::string &_linkName);
355 
360  private: JointData *CreateJointLine(const std::string &_name,
361  const rendering::VisualPtr &_parent);
362 
366  private: rendering::VisualPtr LinkVisualFromName(
367  const std::string &_name);
368 
373  private: bool SetParentLink(const rendering::VisualPtr &_parentLink);
374 
379  private: bool SetChildLink(const rendering::VisualPtr &_childLink);
380 
385  private: void SetVisualMoved(const rendering::VisualPtr &_vis,
386  const bool _moved);
387 
389  Q_SIGNALS: void JointAdded();
390 
393  Q_SIGNALS: void EmitLinkInserted(const std::string &_linkId);
394 
397  Q_SIGNALS: void EmitLinkRemoved(const std::string &_linkId);
398 
400  private slots: void OnOpenInspector();
401 
404  private slots: void OnDelete();
405 
407  public: static std::map<JointMaker::JointType, std::string> jointTypes;
408 
410  public: static std::vector<ignition::math::Vector3d> unitVectors;
411 
413  public: static std::map<JointMaker::JointType, std::string>
415 
418  private: std::unique_ptr<JointMakerPrivate> dataPtr;
419  };
421 
422 
425  class GZ_GUI_VISIBLE JointData : public QObject
426  {
427  Q_OBJECT
428 
430  public: void OpenInspector();
431 
434  public: void Update();
435 
437  public: void UpdateMsg();
438 
440  public: std::string name;
441 
444 
447 
450 
453 
456 
459  public: ignition::math::Pose3d parentPose;
460 
463  public: ignition::math::Pose3d childPose;
464 
467  public: ignition::math::Vector3d childScale;
468 
471 
473  public: Ogre::BillboardSet *handles;
474 
477 
479  public: std::vector<ignition::math::Vector3d> axes;
480 
482  public: bool dirty;
483 
486 
489 
491  private slots: void OnOpenInspector();
492 
495  private slots: void OnApply();
496  };
498  }
499 }
500 #endif
Class for drawing lines that can change.
Definition: DynamicLines.hh:42
Generic description of a mouse event.
Definition: MouseEvent.hh:35
Ball joint.
Definition: JointMaker.hh:99
none
Definition: JointMaker.hh:85
rendering::VisualPtr parent
Parent visual the joint is connected to.
Definition: JointMaker.hh:452
static std::vector< ignition::math::Vector3d > unitVectors
Constant vector containing [UnitX, UnitY, UnitZ].
Definition: JointMaker.hh:410
Screw joint.
Definition: JointMaker.hh:95
Hinge joint.
Definition: JointMaker.hh:91
Fixed joint.
Definition: JointMaker.hh:87
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
boost::shared_ptr< Joint > JointPtr
Definition: PhysicsTypes.hh:117
static std::map< JointMaker::JointType, std::string > jointMaterials
A map of joint type to its corresponding material.
Definition: JointMaker.hh:414
msgs::JointPtr jointMsg
Msg containing joint data.
Definition: JointMaker.hh:485
Slider joint.
Definition: JointMaker.hh:89
ignition::math::Pose3d parentPose
Definition: JointMaker.hh:459
Hinge2 joint.
Definition: JointMaker.hh:93
Ogre::BillboardSet * handles
Visual handle used to represent joint parent.
Definition: JointMaker.hh:473
Handles the creation of joints in the model editor.
Definition: JointMaker.hh:76
JointInspector * inspector
Inspector for configuring joint properties.
Definition: JointMaker.hh:488
Universal joint.
Definition: JointMaker.hh:97
Class which manages user commands in the model editor.
Definition: MEUserCmdManager.hh:144
rendering::DynamicLines * line
Visual line used to represent joint connecting parent and child.
Definition: JointMaker.hh:470
JointMaker::JointType type
Type of joint.
Definition: JointMaker.hh:476
rendering::JointVisualPtr jointVisual
Joint visual.
Definition: JointMaker.hh:446
std::shared_ptr< JointVisual > JointVisualPtr
Definition: RenderTypes.hh:142
A class to inspect and modify joints.
Definition: JointInspector.hh:42
std::vector< ignition::math::Vector3d > axes
Last known axes values.
Definition: JointMaker.hh:479
ignition::math::Pose3d childPose
Definition: JointMaker.hh:463
std::string name
Name of the joint.
Definition: JointMaker.hh:440
std::shared_ptr< Visual > VisualPtr
Definition: RenderTypes.hh:114
rendering::VisualPtr child
Child visual the joint is connected to.
Definition: JointMaker.hh:455
rendering::VisualPtr hotspot
Visual of the hotspot
Definition: JointMaker.hh:449
static std::map< JointMaker::JointType, std::string > jointTypes
A map of joint type to its string value.
Definition: JointMaker.hh:407
rendering::VisualPtr visual
Visual of the dynamic line.
Definition: JointMaker.hh:443
bool dirty
True if the joint needs update.
Definition: JointMaker.hh:482
ignition::math::Vector3d childScale
Definition: JointMaker.hh:467
JointType
Definition: JointMaker.hh:82
Helper class to store joint data.
Definition: JointMaker.hh:425