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 <algorithm>
25 
26 #include "SceneObjectManager.h"
27 
29 {
30 
31 }
32 
33 std::vector<scene3D::SceneObjectPtr> scene3D::SceneObjectManager::getAllObjects() const
34 {
35  return this->sceneObjects;
36 }
37 
39 {
40  for (SceneObjectPtr object : sceneObjects)
41  {
42  if (object->getObjectId().compare(objectId) == 0)
43  {
44  return object;
45  }
46  }
47 
48  return NULL;
49 }
50 
52 {
53  if (ScenePtr scene = this->scene.lock())
54  {
55  /* Lock scene, prevent rendering*/
56  std::unique_lock lock(scene->execute_mutex);
57 
58  //Check whether an object with same ID already exists
59  if (this->getObjectById(object->getObjectId()) != NULL)
60  {
61  throw std::logic_error("Object with this ID is already contained in scene!");
62  }
63 
64  //Otherwise push object in our list
65  sceneObjects.push_back(object);
66 
67  //Place in scene
68  scene->objectRootNode->insertChild(object.get(), 0);
69  }
70 }
71 
73 {
74  if (ScenePtr scene = this->scene.lock())
75  {
76  /* Lock scene, prevent rendering*/
77  std::unique_lock lock(scene->execute_mutex);
78 
79  if (object != NULL)
80  {
81  if (std::find(sceneObjects.begin(), sceneObjects.end(), object) != sceneObjects.end())
82  {
83  if (scene->getSelectionManager()->isSelected(object))
84  {
85  std::cerr << "Warning: Remove selected item, whis is currently selected." << std::endl;
86  }
87 
88  //Remove object from list
89  sceneObjects.erase(std::remove(sceneObjects.begin(), sceneObjects.end(), object), sceneObjects.end());
90 
91  scene->getSelectionManager()->removeFromSelection(object);
92  scene->objectRootNode->removeChild(object.get());
93  }
94  else
95  {
96  throw std::runtime_error("This object is not registered in the sceneObjectManager!");
97  }
98  }
99  else
100  {
101  throw std::runtime_error("Object is null!");
102  }
103  }
104 }
scene3D::SceneObjectManager::getObjectById
scene3D::SceneObjectPtr getObjectById(const std::string &objectId) const
Returns a SceneObject specified by Id.
Definition: SceneObjectManager.cpp:38
scene3D::SceneObjectManager::addObject
void addObject(scene3D::SceneObjectPtr object)
Adds a SceneObject.
Definition: SceneObjectManager.cpp:51
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:72
scene3D::SceneObjectManager::SceneObjectManager
SceneObjectManager(ScenePtr scene)
Constructor Creates an Instance of the Class.
Definition: SceneObjectManager.cpp:28
SceneObjectManager.h
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