31 #include <QDataStream>
32 #include <QGridLayout>
34 #include "../controller/AddOperation.h"
35 #include "../controller/DeselectOperation.h"
36 #include "../controller/RotateTranslateOperation.h"
37 #include "../controller/SelectOperation.h"
40 #include <Inventor/actions/SoRayPickAction.h>
45 camera(new SoPerspectiveCamera),
52 this->setContentsMargins(1, 1, 1, 1);
54 QGridLayout* grid =
new QGridLayout();
55 grid->setContentsMargins(0, 0, 0, 0);
56 this->setLayout(grid);
57 this->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
59 QWidget* view1 =
new QWidget(
this);
60 view1->setMinimumSize(100, 100);
61 view1->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
62 grid->addWidget(view1, 0, 0, 1, 2);
66 std::shared_ptr<gui::ShortcutController> shortcutController =
control->getShortcutController();
69 QPointer<QAction> cameraViewAllAction(
new OverrideAction(
"Scene: Camera view all",
this));
70 this->addAction(cameraViewAllAction);
71 connect(cameraViewAllAction, SIGNAL(triggered()),
this, SLOT(
cameraViewAll()));
72 shortcutController->registerAction(cameraViewAllAction->text(), cameraViewAllAction);
75 QPointer<QAction> cameraViewFromXAction(
new OverrideAction(
"Scene: Camera view from X",
this));
76 this->addAction(cameraViewFromXAction);
77 connect(cameraViewFromXAction, SIGNAL(triggered()),
this, SLOT(
cameraViewFromX()));
78 shortcutController->registerAction(cameraViewFromXAction->text(), cameraViewFromXAction);
81 QPointer<QAction> cameraViewFromNegXAction(
83 this->addAction(cameraViewFromNegXAction);
84 connect(cameraViewFromNegXAction, SIGNAL(triggered()),
this, SLOT(
cameraViewFromNegX()));
85 shortcutController->registerAction(cameraViewFromNegXAction->text(), cameraViewFromNegXAction);
88 QPointer<QAction> cameraViewFromYAction(
new OverrideAction(
"Scene: Camera view from Y",
this));
89 this->addAction(cameraViewFromYAction);
90 connect(cameraViewFromYAction, SIGNAL(triggered()),
this, SLOT(
cameraViewFromY()));
91 shortcutController->registerAction(cameraViewFromYAction->text(), cameraViewFromYAction);
94 QPointer<QAction> cameraViewFromNegYAction(
96 this->addAction(cameraViewFromNegYAction);
97 connect(cameraViewFromNegYAction, SIGNAL(triggered()),
this, SLOT(
cameraViewFromNegY()));
98 shortcutController->registerAction(cameraViewFromNegYAction->text(), cameraViewFromNegYAction);
101 QPointer<QAction> cameraViewFromZAction(
new OverrideAction(
"Scene: Camera view from Z",
this));
102 this->addAction(cameraViewFromZAction);
103 connect(cameraViewFromZAction, SIGNAL(triggered()),
this, SLOT(
cameraViewFromZ()));
104 shortcutController->registerAction(cameraViewFromZAction->text(), cameraViewFromZAction);
107 QPointer<QAction> cameraViewFromNegZAction(
109 this->addAction(cameraViewFromNegZAction);
110 connect(cameraViewFromNegZAction, SIGNAL(triggered()),
this, SLOT(
cameraViewFromNegZ()));
111 shortcutController->registerAction(cameraViewFromNegZAction->text(), cameraViewFromNegZAction);
114 QPointer<QAction> selectToggleAllAction(
116 this->addAction(selectToggleAllAction);
117 connect(selectToggleAllAction, SIGNAL(triggered()),
this, SLOT(
selectToggleAll()));
118 shortcutController->registerAction(selectToggleAllAction->text(), selectToggleAllAction);
121 QPointer<QAction> copyAction(
new OverrideAction(
"Scene: Copy selection",
this));
122 this->addAction(copyAction);
123 connect(copyAction, SIGNAL(triggered()),
this, SLOT(
copy()));
124 shortcutController->registerAction(copyAction->text(), copyAction);
127 QPointer<QAction> pasteAction(
new OverrideAction(
"Scene: Paste selection",
this));
128 this->addAction(pasteAction);
129 connect(pasteAction, SIGNAL(triggered()),
this, SLOT(
paste()));
130 shortcutController->registerAction(pasteAction->text(), pasteAction);
133 QPointer<QAction> duplicateAction(
new OverrideAction(
"Scene: Duplicate selection",
this));
134 this->addAction(duplicateAction);
135 connect(duplicateAction, SIGNAL(triggered()),
this, SLOT(
duplicate()));
136 shortcutController->registerAction(duplicateAction->text(), duplicateAction);
139 QPointer<QAction> resetRotationAction(
new OverrideAction(
"Scene: Reset rotation",
this));
140 this->addAction(resetRotationAction);
141 connect(resetRotationAction, SIGNAL(triggered()),
this, SLOT(
resetRotation()));
142 shortcutController->registerAction(resetRotationAction->text(), resetRotationAction);
145 QPointer<QAction> resetTranslationAction(
new OverrideAction(
"Scene: Reset translation",
this));
146 this->addAction(resetTranslationAction);
147 connect(resetTranslationAction, SIGNAL(triggered()),
this, SLOT(
resetTranslation()));
148 shortcutController->registerAction(resetTranslationAction->text(), resetTranslationAction);
158 viewer->setSceneGraph(mainController->getScene()->registerCamera(camera));
161 camera->position.setValue(SbVec3f(10, -10, 5));
162 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 0, 1));
167 viewer->getViewportRegion(), mainController->getScene().get()));
168 viewer->redrawOnSelectionChange(mainController->getScene()->selectionRootNode);
173 setAcceptDrops(
true);
175 connect(mainController.get(), SIGNAL(reloadScene()),
this, SLOT(cameraViewAll()));
176 connect(mainController.get(), SIGNAL(minimapClicked()),
this, SLOT(cameraViewFromZ()));
184 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
185 new std::vector<controller::OperationPtr>());
188 controller->getScene()->sceneSelectionManager->getAllSelected())
193 sceneobject->getObjectId(),
194 sceneobject->getRotation(),
195 SbRotation(SbVec3f(0, 0, 1), 0),
196 sceneobject->getTranslation(),
197 sceneobject->getTranslation()));
199 operations->push_back(operation);
214 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
215 new std::vector<controller::OperationPtr>());
218 controller->getScene()->sceneSelectionManager->getAllSelected())
223 sceneobject->getObjectId(),
224 sceneobject->getRotation(),
225 sceneobject->getRotation(),
226 sceneobject->getTranslation(),
229 operations->push_back(operation);
248 controller->getScene()->sceneSelectionManager->getAllSelected())
253 sceneobject->getClassId(),
254 sceneobject->getCollection(),
255 sceneobject->getTranslation(),
256 sceneobject->getRotation()));
258 copyBuffer->push_back(addOperation);
266 if (copyBuffer->size() != 0)
270 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
271 new std::vector<controller::OperationPtr>());
275 controller->getScene()->getSelectionManager()->getAllSelected())
280 object->getObjectId()));
281 operations->push_back(deselect);
285 for (
auto it = copyBuffer->begin(); it != copyBuffer->end(); ++it)
288 operations->push_back(add);
292 add->getObjectId()));
293 operations->push_back(select);
309 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
310 new std::vector<controller::OperationPtr>());
313 controller->getScene()->getSelectionManager()->getAllSelected())
317 operations->push_back(deselect);
321 object->getClassId(),
322 object->getCollection(),
323 object->getTranslation(),
324 object->getRotation()));
325 operations->push_back(add);
328 operations->push_back(select);
343 controller->getScene()->makeCameraViewAll(camera, viewer->getViewportRegion());
351 camera->position.setValue(1, 0, 0);
353 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 0, 1));
356 this->cameraViewAll();
363 camera->position.setValue(-1, 0, 0);
365 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 0, 1));
368 this->cameraViewAll();
375 camera->position.setValue(0, 1, 0);
377 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 0, 1));
380 this->cameraViewAll();
387 camera->position.setValue(0, -1, 0);
389 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 0, 1));
392 this->cameraViewAll();
399 camera->position.setValue(0, 0, 1);
401 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 1, 0));
404 this->cameraViewAll();
411 camera->position.setValue(0, 0, -1);
413 camera->pointAt(SbVec3f(0, 0, 0), SbVec3f(0, 1, 0));
416 this->cameraViewAll();
425 bool allObjectsAreSelected =
true;
428 controller->getScene()->getObjectManager()->getAllObjects())
430 if (!
controller->getScene()->getSelectionManager()->isSelected(
object))
432 allObjectsAreSelected =
false;
438 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
439 new std::vector<controller::OperationPtr>());
441 if (allObjectsAreSelected)
445 controller->getScene()->getSelectionManager()->getAllSelected())
450 object->getObjectId()));
451 operations->push_back(deselect);
458 controller->getScene()->getObjectManager()->getAllObjects())
460 if (!
controller->getScene()->getSelectionManager()->isSelected(
object))
465 object->getObjectId()));
466 operations->push_back(select);
492 event->acceptProposedAction();
503 if (!event->mimeData()->hasFormat(
"application/vnd.text.list"))
510 QByteArray encodedData =
event->mimeData()->data(
"application/vnd.text.list");
511 QDataStream stream(&encodedData, QIODevice::ReadOnly);
513 std::shared_ptr<std::vector<controller::OperationPtr>> operations(
514 new std::vector<controller::OperationPtr>());
518 controller->getScene()->getSelectionManager()->getAllSelected())
522 operations->push_back(deselect);
526 while (!stream.atEnd())
528 QString collection, objectType;
529 stream >> collection;
530 stream >> objectType;
533 SoCamera* pCamera = viewer->getCamera();
534 float aspect = viewer->getViewportRegion().getViewportAspectRatio();
535 SbViewVolume vvol = pCamera->getViewVolume(aspect);
539 vvol.scale(1 / aspect);
542 SbPlane ground(SbVec3f(0, 0, 1), SbVec3f(0, 0, 0));
543 SbVec2s clickPoint((
short)event->pos().x(), (
short)(this->height() - event->pos().y()));
544 SbVec2f clickPointNormalized(1.0f * event->pos().x() / this->width(),
545 1.0f - 1.0f * event->pos().y() / this->height());
548 SbVec3f insertPosition;
550 vvol.projectPointToLine(clickPointNormalized, line);
551 SbVec3f pointOnCameraPlane;
552 vvol.getPlane(0.0).intersect(line, pointOnCameraPlane);
553 ground.intersect(line, insertPosition);
555 if (pointOnCameraPlane.getValue()[2] > 0)
557 SoRayPickAction rp(viewer->getViewportRegion());
558 rp.setPickAll(
false);
559 rp.setPoint(clickPoint);
560 rp.apply(viewer->getSceneGraph());
561 SoPickedPoint* picked = rp.getPickedPoint();
565 insertPosition = picked->getPoint();
570 SbRotation insertRotation(SbVec3f(1, 0, 0), 0);
576 objectType.toStdString(),
577 collection.toStdString(),
580 operations->push_back(add);
583 operations->push_back(select);