11#include <QGuiApplication>
26#define STB_IMAGE_WRITE_IMPLEMENTATION
27#include <stb/stb_image_write.h>
31 std::map<int, PKeyboardType>
KeyMap =
126 , QOpenGLWidget(parent)
128 QSurfaceFormat format;
129 format.setDepthBufferSize(24);
130 format.setMajorVersion(4);
131 format.setMinorVersion(6);
132 format.setSamples(4);
133 format.setSwapInterval(1);
134 format.setProfile(QSurfaceFormat::CoreProfile);
138 QObject::connect(&
timer, SIGNAL(timeout()),
this, SLOT(update()));
141 setFocusPolicy(Qt::StrongFocus);
163 initializeOpenGLFunctions();
174 float scale = QGuiApplication::primaryScreen()->logicalDotsPerInchX() / 96.0;
182 scn->updateGraphicsContext();
220 qreal ratio = devicePixelRatio();
227 if (event->buttons().testFlag(Qt::LeftButton))
231 else if (event->buttons().testFlag(Qt::MiddleButton))
235 else if (event->buttons().testFlag(Qt::RightButton))
243 if (mods == Qt::ControlModifier)
247 else if (mods == Qt::ShiftModifier)
251 else if (mods == Qt::AltModifier)
267 camera->registerPoint(event->x(), event->y());
273 mouseEvent.
ray = camera->castRayInWorldSpace((
float)event->x(), (
float)event->y());
277 mouseEvent.
camera = camera;
278 mouseEvent.
x = (float)event->x();
279 mouseEvent.
y = (float)event->y();
288 activeScene->onMouseEvent(mouseEvent);
293 if (event->button() == Qt::RightButton)
306 if ((event->modifiers() == 0 || event->modifiers() == Qt::ShiftModifier)
307 && event->button() == Qt::LeftButton
309 && !ImGui::GetIO().WantCaptureMouse)
319 y = this->height() - y - 1;
322 const auto& selection = this->
select(x, y, w, h);
335 mouseEvent.
ray = camera->castRayInWorldSpace((
float)event->x(), (
float)event->y());
339 mouseEvent.
camera = camera;
340 mouseEvent.
x = (float)event->x();
341 mouseEvent.
y = (float)event->y();
358 if (event->buttons().testFlag(Qt::LeftButton) &&
360 event->modifiers() == Qt::AltModifier &&
363 camera->rotateToPoint(event->x(), event->y());
365 else if (event->buttons().testFlag(Qt::RightButton) &&
367 event->modifiers() == Qt::AltModifier &&
373 else if (event->buttons().testFlag(Qt::MiddleButton) &&
375 event->modifiers() == Qt::AltModifier &&
378 camera->translateToPoint(event->x(), event->y());
384 mouseEvent.
ray = camera->castRayInWorldSpace((
float)event->x(), (
float)event->y());
388 mouseEvent.
camera = camera;
389 mouseEvent.
x = (float)event->x();
390 mouseEvent.
y = (float)event->y();
406 this->
getCamera()->zoom(-0.001*event->angleDelta().x());
420 activeScene->onKeyboardEvent(keyEvent);
422 switch (event->key())
441 activeScene->onKeyboardEvent(keyEvent);
494 QImage image = QOpenGLWidget::grabFramebuffer();
496 image.save(filename.c_str());
std::shared_ptr< GraphicsPipeline > graphicsPipeline()
void startUpdatingGraphicsContext()
static PSimulationThread * instance()
void stopUpdatingGraphicsContext()
virtual std::shared_ptr< Camera > getCamera()
void saveScreen(unsigned int frame)
virtual std::shared_ptr< RenderEngine > getRenderEngine()
SelectionMode getSelectionMode()
std::shared_ptr< Camera > mCamera
bool & isScreenRecordingOn()
RenderParams mRenderParams
std::shared_ptr< RenderEngine > mRenderEngine
virtual const Selection & select(int x, int y, int w, int h)
virtual void setRenderEngine(std::shared_ptr< RenderEngine > engine)
virtual std::shared_ptr< Node > getCurrentSelectedNode()
virtual void setWindowSize(int w, int h)
static SceneGraphFactory * instance()
std::shared_ptr< SceneGraph > active()
void render(RenderRef ref)
void newFrame(RenderRef ref)
RenderRef initialize(QWindow *window, bool defaultRender)
This is an implementation of AdditiveCCD based on peridyno.
PButtonType mappingMouseButton(QMouseEvent *event)
PModifierBits mappingModifierBits(Qt::KeyboardModifiers mods)
std::map< int, PKeyboardType > KeyMap
std::shared_ptr< Camera > camera
std::vector< Item > items