SceneObjectManager.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T), Karlsruhe Institute of Technology (KIT), all rights reserved.
5  *
6  * ArmarX is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * ArmarX is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program. If not, see <http://www.gnu.org/licenses/>.
17  *
18  * @package MemoryX::gui-plugins::SceneEditor
19  * @date 2015
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 #include "SceneObjectManager.h"
25 
26 #include <algorithm>
27 
29 {
30 }
31 
32 std::vector<scene3D::SceneObjectPtr>
34 {
35  return this->sceneObjects;
36 }
37 
39 scene3D::SceneObjectManager::getObjectById(const std::string& objectId) const
40 {
41  for (SceneObjectPtr object : sceneObjects)
42  {
43  if (object->getObjectId().compare(objectId) == 0)
44  {
45  return object;
46  }
47  }
48 
49  return NULL;
50 }
51 
52 void
54 {
55  if (ScenePtr scene = this->scene.lock())
56  {
57  /* Lock scene, prevent rendering*/
58  std::unique_lock lock(scene->execute_mutex);
59 
60  //Check whether an object with same ID already exists
61  if (this->getObjectById(object->getObjectId()) != NULL)
62  {
63  throw std::logic_error("Object with this ID is already contained in scene!");
64  }
65 
66  //Otherwise push object in our list
67  sceneObjects.push_back(object);
68 
69  //Place in scene
70  scene->objectRootNode->insertChild(object.get(), 0);
71  }
72 }
73 
74 void
76 {
77  if (ScenePtr scene = this->scene.lock())
78  {
79  /* Lock scene, prevent rendering*/
80  std::unique_lock lock(scene->execute_mutex);
81 
82  if (object != NULL)
83  {
84  if (std::find(sceneObjects.begin(), sceneObjects.end(), object) != sceneObjects.end())
85  {
86  if (scene->getSelectionManager()->isSelected(object))
87  {
88  std::cerr << "Warning: Remove selected item, whis is currently selected."
89  << std::endl;
90  }
91 
92  //Remove object from list
93  sceneObjects.erase(std::remove(sceneObjects.begin(), sceneObjects.end(), object),
94  sceneObjects.end());
95 
96  scene->getSelectionManager()->removeFromSelection(object);
97  scene->objectRootNode->removeChild(object.get());
98  }
99  else
100  {
101  throw std::runtime_error(
102  "This object is not registered in the sceneObjectManager!");
103  }
104  }
105  else
106  {
107  throw std::runtime_error("Object is null!");
108  }
109  }
110 }
scene3D::SceneObjectManager::getObjectById
scene3D::SceneObjectPtr getObjectById(const std::string &objectId) const
Returns a SceneObject specified by Id.
Definition: SceneObjectManager.cpp:39
scene3D::SceneObjectManager::addObject
void addObject(scene3D::SceneObjectPtr object)
Adds a SceneObject.
Definition: SceneObjectManager.cpp:53
scene3D::ScenePtr
std::shared_ptr< Scene > ScenePtr
Definition: PointerDefinitions.h:36
scene3D::SceneObjectManager::removeObject
void removeObject(scene3D::SceneObjectPtr object)
Removes a SceneObject.
Definition: SceneObjectManager.cpp:75
scene3D::SceneObjectManager::SceneObjectManager
SceneObjectManager(ScenePtr scene)
Constructor Creates an Instance of the Class.
Definition: SceneObjectManager.cpp:28
SceneObjectManager.h
magic_enum::detail::find
constexpr std::size_t find(string_view str, char_type c) noexcept
Definition: magic_enum.hpp:309
scene3D::SceneObjectPtr
boost::intrusive_ptr< SceneObject > SceneObjectPtr
Definition: PointerDefinitions.h:40
scene3D::SceneObjectManager::getAllObjects
std::vector< scene3D::SceneObjectPtr > getAllObjects() const
Returns all Existing Objects.
Definition: SceneObjectManager.cpp:33