29bool scene3D::SceneSelectionManager::createOperations =
true;
37 scene->getManipulatorManager()->addManipulator(
object);
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>());
69 scene->getManipulatorManager()->applyManipulator(
object);
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());
140std::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());
246scene3D::SceneSelectionManager::storeHistory()
248 this->historySelected = this->getAllSelected();
252scene3D::SceneSelectionManager::restoreHistory()
256 this->addToSelection(
object);
263 if (
ScenePtr scene = this->scene.lock())
265 scene->selectionRootNode->deselectAll();
270scene3D::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;
static const int UNDOABLE
A flag to save the executed operations to the history.
static const int EXECUTE_ON_WM
A Flag to execute operations on the WorkingMemory.
A operation to deselect a object.
A operation to select a object.
void deselectAll()
Deselects all SceneObjects.
static void deselectionCallback(void *userData, SoPath *selectionPath)
Executes all commands when an Item is deselected and the Callback is voked.
static SoPath * pickFilterCB(void *userData, const SoPickedPoint *pick)
Adjusts a path so that it always show to a valid Object.
void addToSelection(scene3D::SceneObjectPtr object)
Adds a SceneObject to the Selection.
bool getCreateOperations()
SceneSelectionManager(ScenePtr scene)
Constructor Creates an Instance of the Class.
bool isSelected(scene3D::SceneObjectPtr object)
Determines whether a SceneObject is selected.
static void selectionCallback(void *userData, SoPath *selectionPath)
Executes all commands when an Item is selected and the Callback is voked.
void setCreateOperations(bool enable)
std::vector< scene3D::SceneObjectPtr > getAllSelected()
Returns all selected SceneObjects.
void removeFromSelection(scene3D::SceneObjectPtr object)
Removes a SceneObject from the Selection.
std::shared_ptr< Controller > ControllerPtr
std::shared_ptr< Operation > OperationPtr
std::shared_ptr< Scene > ScenePtr
boost::intrusive_ptr< SceneObject > SceneObjectPtr
std::shared_ptr< SceneGroup > SceneGroupPtr