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);
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);