26 #include "../controller/DeselectOperation.h"
27 #include "../controller/SelectOperation.h"
29 bool scene3D::SceneSelectionManager::createOperations =
true;
41 if (SceneSelectionManager::createOperations)
43 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
44 new std::vector<controller::OperationPtr>());
48 operations->push_back(operation);
55 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
56 new std::vector<controller::OperationPtr>());
73 if (SceneSelectionManager::createOperations)
75 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
76 new std::vector<controller::OperationPtr>());
80 operations->push_back(operation);
88 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
89 new std::vector<controller::OperationPtr>());
99 SoFullPath* p = (SoFullPath*)pick->getPath();
102 for (
int i = 0; i < p->getLength(); i++)
104 SoNode*
n = p->getNode(i);
106 if (
n->isOfType(SoTransformManip::getClassTypeId()))
119 for (
int i = 0; i < p->getLength(); i++)
121 SoNode*
n = p->getNode(i);
123 if (
n->isOfType(SceneObject::getClassTypeId()))
135 scene->selectionRootNode->setPickFilterCallback(
pickFilterCB, scene.get());
140 std::vector<scene3D::SceneObjectPtr>
143 std::vector<scene3D::SceneObjectPtr> selectedObjects;
145 if (
ScenePtr scene = this->scene.lock())
147 for (
int i = 0; i < scene->selectionRootNode->getNumSelected(); i++)
149 SoPath* objectPath = scene->selectionRootNode->getPath(i);
153 SoNode* objectNode = objectPath->getNodeFromTail(0);
155 if (objectNode->isOfType(SceneObject::getClassTypeId()))
162 return selectedObjects;
168 if (
ScenePtr scene = this->scene.lock())
171 for (
int i = 0; i < scene->selectionRootNode->getNumSelected(); i++)
173 SoPath* objectPath = scene->selectionRootNode->getPath(i);
175 if (objectPath->containsNode(
object.get()))
188 if (
ScenePtr scene = this->scene.lock())
192 if (SceneSelectionManager::createOperations)
194 SceneSelectionManager::createOperations =
false;
195 scene->selectionRootNode->select(
object.get());
197 SceneSelectionManager::createOperations =
true;
201 scene->selectionRootNode->select(
object.get());
209 if (
ScenePtr scene = this->scene.lock())
213 if (SceneSelectionManager::createOperations)
215 SceneSelectionManager::createOperations =
false;
216 scene->selectionRootNode->deselect(
object.get());
218 SceneSelectionManager::createOperations =
true;
222 scene->selectionRootNode->select(
object.get());
232 this->addToSelection(
object);
241 this->removeFromSelection(
object);
246 scene3D::SceneSelectionManager::storeHistory()
248 this->historySelected = this->getAllSelected();
252 scene3D::SceneSelectionManager::restoreHistory()
256 this->addToSelection(
object);
263 if (
ScenePtr scene = this->scene.lock())
265 scene->selectionRootNode->deselectAll();
270 scene3D::SceneSelectionManager::getLastSelected()
272 if (
ScenePtr scene = this->scene.lock())
275 if (scene->selectionRootNode->getNumSelected() > 0)
278 scene->selectionRootNode->getPath(scene->selectionRootNode->getNumSelected() - 1);
282 SoNode* objectNode = objectPath->getNodeFromTail(0);
293 SceneSelectionManager::createOperations = enable;
299 return SceneSelectionManager::createOperations;