34 #include <QVBoxLayout>
36 #include <QTouchEvent>
39 #include <QRadialGradient>
40 #include "vtkRenderer.h"
41 #include "vtkCamera.h"
42 #include "vtkSmartPointer.h"
60 BaseWidget(parent,
"TrackPadWidget",
"Camera Control")
64 mMinPadSize = QSize(50,50);
65 mMinBarSize = QSize(20,50);
67 mTopLayout =
new QVBoxLayout(
this);
69 this->createStandard3DViewActions();
70 this->definePanLayout();
71 this->defineRotateLayout();
77 "<h3>Trackpad for touch screen devices</h3>"
78 "<p>Helps the user control the camera on a touch screen.</p>"
83 void TrackPadWidget::createStandard3DViewActions()
85 QActionGroup* group = mCameraControl->createStandard3DViewActions();
87 QToolBar* toolBar =
new QToolBar(
this);
88 mTopLayout->addWidget(toolBar);
89 toolBar->addActions(group->actions());
90 toolBar->addSeparator();
93 void TrackPadWidget::defineRotateLayout()
95 QGroupBox* group =
new QGroupBox(
"rotate",
this);
97 mTopLayout->addWidget(group);
99 QHBoxLayout* layout =
new QHBoxLayout;
100 layout->setMargin(4);
101 group->setLayout(layout);
103 MousePadWidget* rotateWidget =
new MousePadWidget(
this, mMinPadSize);
104 connect(rotateWidget, SIGNAL(mouseMoved(QPointF)),
this, SLOT(
rotateXZSlot(QPointF)));
105 layout->addWidget(rotateWidget, 4);
107 MousePadWidget* rotateYWidget =
new MousePadWidget(
this, mMinBarSize);
108 rotateYWidget->setFixedXPos(
true);
109 connect(rotateYWidget, SIGNAL(mouseMoved(QPointF)),
this, SLOT(
rotateYSlot(QPointF)));
110 layout->addWidget(rotateYWidget, 1);
114 void TrackPadWidget::definePanLayout()
116 QGroupBox* group =
new QGroupBox(
"pan",
this);
117 group->setFlat(
true);
118 mTopLayout->addWidget(group);
120 QHBoxLayout* panLayout =
new QHBoxLayout;
121 panLayout->setMargin(4);
122 group->setLayout(panLayout);
124 MousePadWidget* panWidget =
new MousePadWidget(
this, mMinPadSize);
125 connect(panWidget, SIGNAL(mouseMoved(QPointF)),
this, SLOT(
panXZSlot(QPointF)));
126 panLayout->addWidget(panWidget, 4);
128 MousePadWidget* dollyWidget =
new MousePadWidget(
this, mMinBarSize);
129 dollyWidget->setFixedXPos(
true);
130 connect(dollyWidget, SIGNAL(mouseMoved(QPointF)),
this, SLOT(
dollySlot(QPointF)));
131 panLayout->addWidget(dollyWidget, 1);
136 return viewService()->get3DView()->getRenderer()->GetActiveCamera();
142 double factor = scale * delta.y();
144 this->getCamera()->Roll(factor);
152 camera->Azimuth(-scale * delta.x());
153 camera->Elevation(scale * delta.y());
154 camera->OrthogonalizeViewUp();
159 double factor = 1 + delta.y();
160 this->getCamera()->Dolly(factor);
161 viewService()->get3DView()->getRenderer()->ResetCameraClippingRange();
167 Vector3D position(camera->GetPosition());
168 Vector3D focus(camera->GetFocalPoint());
176 double volSize = bb.
range().length() / pow(3, 1.0/3.0);
177 double scale = volSize;
178 Vector3D t = scale * (-delta.x() * e_x + delta.y() * e_y);
183 camera->SetPosition(position.begin());
184 camera->SetFocalPoint(focus.begin());
193 QWidget::showEvent(event);
198 QWidget::closeEvent(event);
Vector3D cross(const Vector3D &a, const Vector3D &b)
compute cross product of a and b.
Representation of a floating-point bounding box in 3D. The data are stored as {xmin,xmax,ymin,ymax,zmin,zmax}, in order to simplify communication with vtk.
Eigen::Vector3d Vector3D
Vector3D is a representation of a point or vector in 3D.
cxLogicManager_EXPORT ViewServicePtr viewService()
vtkSmartPointer< class vtkCamera > vtkCameraPtr