ModelCreator.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_MODEL_MODELCREATOR_HH_
19 #define _GAZEBO_GUI_MODEL_MODELCREATOR_HH_
20 
21 #include <memory>
22 #include <mutex>
23 #include <string>
24 
25 #include <ignition/math/Pose3.hh>
26 #include <ignition/math/Vector3.hh>
27 #include <sdf/sdf.hh>
28 
29 #include "gazebo/gui/qt.h"
30 #include "gazebo/math/Vector3.hh"
31 
33 
34 #include "gazebo/util/system.hh"
35 
36 namespace gazebo
37 {
38  namespace common
39  {
40  class KeyEvent;
41  class MouseEvent;
42  }
43 
44  namespace gui
45  {
46  class JointMaker;
47  class LinkData;
48  class ModelPluginData;
49  class NestedModelData;
50 
51  // Forward declare private data.
52  class ModelCreatorPrivate;
53 
56 
60  class GZ_GUI_VISIBLE ModelCreator : public QObject
61  {
62  Q_OBJECT
63 
66  public: enum EntityType
67  {
81  ENTITY_MODEL
82  };
83 
86  public: enum SaveState
87  {
90 
93 
95  UNSAVED_CHANGES
96  };
97 
100  public: ModelCreator(QObject *_parent = NULL);
101 
103  public: virtual ~ModelCreator();
104 
107  public: void SetModelName(const std::string &_modelName);
108 
111  public: std::string ModelName() const;
112 
114  public: void ModelChanged();
115 
117  public: void SaveModelFiles();
118 
120  public: void FinishModel();
121 
128  public: void AddCustomLink(const EntityType _type,
129  const ignition::math::Vector3d &_size = ignition::math::Vector3d::One,
130  const ignition::math::Pose3d &_pose = ignition::math::Pose3d::Zero,
131  const std::string &_uri = "", const unsigned int _samples = 5);
132 
140  public: LinkData *AddShape(const EntityType _type,
141  const ignition::math::Vector3d &_size = ignition::math::Vector3d::One,
142  const ignition::math::Pose3d &_pose = ignition::math::Pose3d::Zero,
143  const std::string &_uri = "", const unsigned int _samples = 5);
144 
148  public: NestedModelData *AddModel(const sdf::ElementPtr &_sdf);
149 
152  public: void AddJoint(const std::string &_type);
153 
156  public: void RemoveEntity(const std::string &_entityName);
157 
160  public: void RemoveModelPlugin(const std::string &_pluginName);
161 
164  public: void SetStatic(const bool _static);
165 
168  public: void SetAutoDisable(const bool _auto);
169 
171  public: void Reset();
172 
174  public: void Stop();
175 
178  public: gui::JointMaker *JointMaker() const;
179 
183  public: void SetSelected(const std::string &_name, const bool selected);
184 
188  public: void SetSelected(const rendering::VisualPtr &_entityVis,
189  const bool selected);
190 
193  public: enum SaveState CurrentSaveState() const;
194 
197  public: void AddEntity(const sdf::ElementPtr &_sdf);
198 
201  public: void AddLink(const EntityType _type);
202 
207  public: void OnAddModelPlugin(const std::string &_name,
208  const std::string &_filename, const std::string &_innerxml);
209 
212  public: void AddModelPlugin(const sdf::ElementPtr &_pluginElem);
213 
217  public: ModelPluginData *ModelPlugin(const std::string &_name);
218 
220  public: void GenerateSDF();
221 
225  private: sdf::ElementPtr GenerateLinkSDF(LinkData *_link);
226 
228  private: void OnNew();
229 
232  private: bool OnSave();
233 
236  private: bool OnSaveAs();
237 
241  private: void OnNameChanged(const std::string &_modelName);
242 
246  private: void OnPropertiesChanged(const bool _static,
247  const bool _autoDisable);
248 
250  private: void OnExit();
251 
253  private: void Update();
254 
258  private: void RemoveNestedModelImpl(const std::string &_nestedModelName);
259 
263  private: void RemoveLinkImpl(const std::string &_linkName);
264 
267  private slots: void OnEdit(const bool _checked);
268 
271  private slots: void OnEditModel(const std::string &_modelName);
272 
274  private slots: void OnCopy();
275 
277  private slots: void OnPaste();
278 
282  private: bool OnMousePress(const common::MouseEvent &_event);
283 
287  private: bool OnMouseRelease(const common::MouseEvent &_event);
288 
292  private: bool OnMouseMove(const common::MouseEvent &_event);
293 
297  private: bool OnMouseDoubleClick(const common::MouseEvent &_event);
298 
302  private: bool OnKeyPress(const common::KeyEvent &_event);
303 
306  private: void OnManipMode(const std::string &_mode);
307 
311  private: void OnDeselectAll(const std::string &_name,
312  const std::string &_mode);
313 
318  private: void OnSetSelectedEntity(const std::string &_name,
319  const bool _selected);
320 
325  private: void OnSetSelectedModelPlugin(const std::string &_name,
326  const bool _selected);
327 
334  private: LinkData * CreateLink(const rendering::VisualPtr &_visual);
335 
339  private: NestedModelData *CloneNestedModel(const std::string &_modelName);
340 
344  private: LinkData *CloneLink(const std::string &_linkName);
345 
351  private: LinkData *CreateLinkFromSDF(const sdf::ElementPtr &_linkElem,
352  const rendering::VisualPtr &_parentVis);
353 
356  private: void OpenInspector(const std::string &_name);
357 
360  private: void OpenModelPluginInspector(const std::string &_name);
361 
363  private: virtual void CreateTheEntity();
364 
366  private: bool Init();
367 
370  private: std::string CreateModel();
371 
380  private: NestedModelData *CreateModelFromSDF(const sdf::ElementPtr &_sdf,
381  const rendering::VisualPtr &_parentVis = NULL,
382  const bool _emit = true);
383 
391  private: void OnAlignMode(const std::string &_axis,
392  const std::string &_config, const std::string &_target,
393  const bool _preview, const bool _inverted = false);
394 
398  private: void OnEntityScaleChanged(const std::string &_name,
399  const gazebo::math::Vector3 &_scale);
400 
403  private: void DeselectAll();
404 
406  private: void DeselectAllEntities();
407 
409  private: void DeselectAllModelPlugins();
410 
415  private: void SetModelVisible(const std::string &_name,
416  const bool _visible);
417 
422  private: void SetModelVisible(const rendering::VisualPtr &_visual,
423  const bool _visible);
424 
427  private: void ShowContextMenu(const std::string &_link);
428 
431  private: void ShowModelPluginContextMenu(const std::string &_name);
432 
435  private: void EmitNestedModelInsertedEvent(
436  const rendering::VisualPtr &_vis) const;
437 
440  private slots: void OnDelete();
441 
444  private slots: void OnDelete(const std::string &_name);
445 
447  private slots: void OnOpenInspector();
448 
451  private slots: void OnOpenModelPluginInspector(const QString &_name);
452 
455  private slots: void OnRemoveModelPlugin(const QString &_name);
456 
458  Q_SIGNALS: void LinkAdded();
459 
462  private: std::unique_ptr<ModelCreatorPrivate> dataPtr;
463  };
465  }
466 }
467 #endif
Extruded polyline.
Definition: ModelCreator.hh:79
none
Definition: ModelCreator.hh:69
EntityType
Definition: ModelCreator.hh:66
Generic description of a mouse event.
Definition: MouseEvent.hh:35
Forward declarations for the common classes.
Definition: Animation.hh:33
The Vector3 class represents the generic vector containing 3 elements.
Definition: Vector3.hh:39
Generic description of a keyboard event.
Definition: KeyEvent.hh:32
Sphere.
Definition: ModelCreator.hh:73
Cylinder.
Definition: ModelCreator.hh:75
Helper class to store nested models data.
Definition: ModelData.hh:57
Create and manage 3D visuals of a model with links, nested models and joints.
Definition: ModelCreator.hh:60
Box.
Definition: ModelCreator.hh:71
Handles the creation of joints in the model editor.
Definition: JointMaker.hh:77
The model has never been saved.
Definition: ModelCreator.hh:89
SaveState
Save states for the model editor.
Definition: ModelCreator.hh:86
Helper class to store model plugin data.
Definition: ModelData.hh:233
Helper class to store link data.
Definition: ModelData.hh:90
Imported 3D mesh.
Definition: ModelCreator.hh:77
#define NULL
Definition: CommonTypes.hh:31
All changes have been saved.
Definition: ModelCreator.hh:92
std::shared_ptr< Visual > VisualPtr
Definition: RenderTypes.hh:112
GAZEBO_VISIBLE void Init(google::protobuf::Message &_message, const std::string &_id="")
Initialize a message.
A plugin with access to physics::Model.
Definition: Plugin.hh:245