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
31
32std::vector<scene3D::SceneObjectPtr>
34{
35 return this->sceneObjects;
36}
37
39scene3D::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
52void
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
74void
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::SceneObjectPtr getObjectById(const std::string &objectId) const
Returns a SceneObject specified by Id.
void removeObject(scene3D::SceneObjectPtr object)
Removes a SceneObject.
std::vector< scene3D::SceneObjectPtr > getAllObjects() const
Returns all Existing Objects.
SceneObjectManager(ScenePtr scene)
Constructor Creates an Instance of the Class.
void addObject(scene3D::SceneObjectPtr object)
Adds a SceneObject.
std::shared_ptr< Scene > ScenePtr
boost::intrusive_ptr< SceneObject > SceneObjectPtr