ModelCreator.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_MODEL_MODELCREATOR_HH_
19#define GAZEBO_GUI_MODEL_MODELCREATOR_HH_
20
21#include <map>
22#include <memory>
23#include <mutex>
24#include <string>
25
26#include <ignition/math/Pose3.hh>
27#include <ignition/math/Vector3.hh>
28#include <sdf/sdf.hh>
29
30#include "gazebo/gui/qt.h"
31
33
34#include "gazebo/util/system.hh"
35
36namespace 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
83
86 public: enum SaveState
87 {
90
93
95 UNSAVED_CHANGES
96 };
97
100 public: explicit ModelCreator(QObject *_parent = NULL);
101
103 public: virtual ~ModelCreator();
104
106 public: void EnableEventHandlers();
107
109 public: void DisableEventHandlers();
110
113 public: void SetModelName(const std::string &_modelName);
114
117 public: std::string ModelName() const;
118
120 public: void ModelChanged();
121
123 public: void SaveModelFiles();
124
126 public: void FinishModel();
127
134 public: void AddCustomLink(const EntityType _type,
135 const ignition::math::Vector3d &_size = ignition::math::Vector3d::One,
136 const ignition::math::Pose3d &_pose = ignition::math::Pose3d::Zero,
137 const std::string &_uri = "", const unsigned int _samples = 5);
138
146 public: LinkData *AddShape(const EntityType _type,
147 const ignition::math::Vector3d &_size = ignition::math::Vector3d::One,
148 const ignition::math::Pose3d &_pose = ignition::math::Pose3d::Zero,
149 const std::string &_uri = "", const unsigned int _samples = 5);
150
154 public: NestedModelData *AddModel(const sdf::ElementPtr &_sdf);
155
158 public: void AddJoint(const std::string &_type);
159
162 public: void RemoveEntity(const std::string &_entityName);
163
168 public: void RemoveModelPlugin(const std::string &_pluginName,
169 const bool _newCmd = true);
170
173 public: void SetStatic(const bool _static);
174
177 public: void SetAutoDisable(const bool _auto);
178
180 public: void Reset();
181
183 public: void Stop();
184
187 public: gui::JointMaker *JointMaker() const;
188
192 public: void SetSelected(const std::string &_name, const bool selected);
193
197 public: void SetSelected(const rendering::VisualPtr &_entityVis,
198 const bool selected);
199
202 public: enum SaveState CurrentSaveState() const;
203
206 public: void AddEntity(const sdf::ElementPtr &_sdf);
207
210 public: void AddLink(const EntityType _type);
211
218 public: void OnAddModelPlugin(const std::string &_name,
219 const std::string &_filename, const std::string &_innerxml,
220 const bool _newCmd = true);
221
224 public: void AddModelPlugin(const sdf::ElementPtr &_pluginElem);
225
229 public: ModelPluginData *ModelPlugin(const std::string &_name);
230
232 public: void GenerateSDF();
233
236 public slots: void ShowCollisions(const bool _show);
237
240 public slots: void ShowVisuals(const bool _show);
241
244 public slots: void ShowLinkFrames(const bool _show);
245
250 public: ignition::math::Pose3d WorldToLocal(
251 const ignition::math::Pose3d &_world) const;
252
256 private: sdf::ElementPtr GenerateLinkSDF(LinkData *_link);
257
259 private: void OnNew();
260
263 private: bool OnSave();
264
267 private: bool OnSaveAs();
268
272 private: void OnNameChanged(const std::string &_modelName);
273
277 private: void OnPropertiesChanged(const bool _static,
278 const bool _autoDisable);
279
281 private: void OnExit();
282
286 private: void RemoveNestedModelImpl(const std::string &_nestedModelName);
287
291 private: void RemoveLinkImpl(const std::string &_linkName);
292
295 private slots: void OnEdit(const bool _checked);
296
299 private slots: void OnEditModel(const std::string &_modelName);
300
302 private slots: void OnCopy();
303
305 private slots: void OnPaste();
306
310 private: bool OnMousePress(const common::MouseEvent &_event);
311
315 private: bool OnMouseRelease(const common::MouseEvent &_event);
316
320 private: bool OnMouseMove(const common::MouseEvent &_event);
321
325 private: bool OnMouseDoubleClick(const common::MouseEvent &_event);
326
330 private: bool OnKeyPress(const common::KeyEvent &_event);
331
334 private: void OnManipMode(const std::string &_mode);
335
339 private: void OnDeselectAll(const std::string &_name,
340 const std::string &_mode);
341
346 private: void OnSetSelectedEntity(const std::string &_name,
347 const bool _selected);
348
353 private: void OnSetSelectedModelPlugin(const std::string &_name,
354 const bool _selected);
355
362 private: LinkData *CreateLink(const rendering::VisualPtr &_visual);
363
366 private: void InsertLinkFromSDF(sdf::ElementPtr _sdf);
367
370 private: void InsertNestedModelFromSDF(sdf::ElementPtr _sdf);
371
375 private: NestedModelData *CloneNestedModel(const std::string &_modelName);
376
380 private: LinkData *CloneLink(const std::string &_linkName);
381
387 private: LinkData *CreateLinkFromSDF(const sdf::ElementPtr &_linkElem,
388 const rendering::VisualPtr &_parentVis);
389
392 private: void OpenInspector(const std::string &_name);
393
396 private: void OpenModelPluginInspector(const std::string &_name);
397
399 private: virtual void CreateTheEntity();
400
402 private: bool Init();
403
406 private: std::string CreateModel();
407
416 private: NestedModelData *CreateModelFromSDF(const sdf::ElementPtr &_sdf,
417 const rendering::VisualPtr &_parentVis = NULL,
418 const bool _emit = true);
419
427 private: void OnAlignMode(const std::string &_axis,
428 const std::string &_config, const std::string &_target,
429 const bool _preview, const bool _inverted = false);
430
434 private: void OnEntityScaleChanged(const std::string &_name,
435 const ignition::math::Vector3d &_scale);
436
442 private: void OnEntityMoved(const std::string &_name,
443 const ignition::math::Pose3d &_pose, const bool _isFinal);
444
447 private: void DeselectAll();
448
450 private: void DeselectAllEntities();
451
453 private: void DeselectAllModelPlugins();
454
458 private: void OnRequestLinkScale(const std::string &_name,
459 const std::map<std::string, ignition::math::Vector3d> &_scales);
460
464 private: void OnRequestLinkMove(const std::string &_name,
465 const ignition::math::Pose3d &_pose);
466
470 private: void OnRequestNestedModelMove(const std::string &_name,
471 const ignition::math::Pose3d &_pose);
472
477 private: void SetModelVisible(const std::string &_name,
478 const bool _visible);
479
484 private: void SetModelVisible(const rendering::VisualPtr &_visual,
485 const bool _visible);
486
489 private: void ShowContextMenu(const std::string &_link);
490
493 private: void ShowModelPluginContextMenu(const std::string &_name);
494
497 private: void EmitNestedModelInsertedEvent(
498 const rendering::VisualPtr &_vis) const;
499
502 private slots: void OnDelete();
503
506 private slots: void OnDelete(const std::string &_name);
507
509 private slots: void OnOpenInspector();
510
513 private slots: void OnOpenModelPluginInspector(const QString &_name);
514
517 private slots: void OnRemoveModelPlugin(const QString &_name);
518
520 Q_SIGNALS: void LinkAdded();
521
524 private: std::unique_ptr<ModelCreatorPrivate> dataPtr;
525 };
527 }
528}
529#endif
#define NULL
Definition CommonTypes.hh:31
common
Definition FuelModelDatabase.hh:37
gui
Definition KeyEventHandler.hh:29
Generic description of a keyboard event.
Definition KeyEvent.hh:33
Generic description of a mouse event.
Definition MouseEvent.hh:36
Handles the creation of joints in the model editor.
Definition JointMaker.hh:77
Helper class to store link data.
Definition ModelData.hh:95
Create and manage 3D visuals of a model with links, nested models and joints.
Definition ModelCreator.hh:61
ignition::math::Pose3d WorldToLocal(const ignition::math::Pose3d &_world) const
Convert a given pose from the world frame to the local frame of the model being edited.
void SaveModelFiles()
Helper function to manage writing files to disk.
void AddJoint(const std::string &_type)
Add a joint to the model.
void Stop()
Stop the process of adding a link or joint to the model.
void AddCustomLink(const EntityType _type, const ignition::math::Vector3d &_size=ignition::math::Vector3d::One, const ignition::math::Pose3d &_pose=ignition::math::Pose3d::Zero, const std::string &_uri="", const unsigned int _samples=5)
Begin the process of inserting a custom link using the mouse.
LinkData * AddShape(const EntityType _type, const ignition::math::Vector3d &_size=ignition::math::Vector3d::One, const ignition::math::Pose3d &_pose=ignition::math::Pose3d::Zero, const std::string &_uri="", const unsigned int _samples=5)
Add a link to the model.
void SetSelected(const std::string &_name, const bool selected)
Set the select state of an entity.
void AddLink(const EntityType _type)
Add a link to the model.
void AddModelPlugin(const sdf::ElementPtr &_pluginElem)
Add a model plugin to the model.
gui::JointMaker * JointMaker() const
Get joint maker.
void Reset()
Reset the model creator and the SDF.
void DisableEventHandlers()
Disable the mouse and key event handlers.
void FinishModel()
Finish the model and create the entity on the gzserver.
ModelCreator(QObject *_parent=NULL)
Constructor.
void OnAddModelPlugin(const std::string &_name, const std::string &_filename, const std::string &_innerxml, const bool _newCmd=true)
Add a model plugin to the model.
void ShowCollisions(const bool _show)
Show or hide collision visuals.
SaveState
Save states for the model editor.
Definition ModelCreator.hh:87
@ ALL_SAVED
All changes have been saved.
Definition ModelCreator.hh:92
@ NEVER_SAVED
The model has never been saved.
Definition ModelCreator.hh:89
@ UNSAVED_CHANGES
Has been saved before, but has unsaved changes.
Definition ModelCreator.hh:95
ModelPluginData * ModelPlugin(const std::string &_name)
Get a model plugin data by its name.
void SetStatic(const bool _static)
Set the model to be static.
void ModelChanged()
Set save state upon a change to the model.
void ShowVisuals(const bool _show)
Show or hide visual visuals.
void LinkAdded()
Qt signal when the a link has been added.
std::string ModelName() const
Get the name of the model.
void RemoveEntity(const std::string &_entityName)
Remove an entity from the model.
void SetModelName(const std::string &_modelName)
Set the name of the model.
void RemoveModelPlugin(const std::string &_pluginName, const bool _newCmd=true)
Remove a model plugin from the model.
virtual ~ModelCreator()
Destructor.
void AddEntity(const sdf::ElementPtr &_sdf)
Add an entity to the model.
void GenerateSDF()
Generate the SDF from model link and joint visuals.
enum SaveState CurrentSaveState() const
Get current save state.
void SetAutoDisable(const bool _auto)
Set the model to allow auto disable at rest.
NestedModelData * AddModel(const sdf::ElementPtr &_sdf)
Add a nested model to the model.
void EnableEventHandlers()
Enable the mouse and key event handlers.
EntityType
Definition ModelCreator.hh:67
@ ENTITY_POLYLINE
Extruded polyline.
Definition ModelCreator.hh:79
@ ENTITY_MESH
Imported 3D mesh.
Definition ModelCreator.hh:77
@ ENTITY_BOX
Box.
Definition ModelCreator.hh:71
@ ENTITY_CYLINDER
Cylinder.
Definition ModelCreator.hh:75
@ ENTITY_SPHERE
Sphere.
Definition ModelCreator.hh:73
@ ENTITY_NONE
none
Definition ModelCreator.hh:69
@ ENTITY_MODEL
Nested model.
Definition ModelCreator.hh:81
void SetSelected(const rendering::VisualPtr &_entityVis, const bool selected)
Set the select state of a entity visual.
void ShowLinkFrames(const bool _show)
Show or hide link frame visuals.
Helper class to store model plugin data.
Definition ModelData.hh:313
Helper class to store nested models data.
Definition ModelData.hh:58
std::shared_ptr< Visual > VisualPtr
Definition RenderTypes.hh:114
Forward declarations for the common classes.
Definition Animation.hh:27