leocad/common/view.h

183 lines
4.1 KiB
C
Raw Normal View History

#pragma once
2011-09-07 21:06:51 +00:00
2013-08-09 04:57:18 +00:00
#include "lc_glwidget.h"
2014-05-03 21:16:48 +00:00
#include "camera.h"
2017-04-01 16:53:54 -07:00
#include "lc_scene.h"
2018-10-28 17:59:01 -07:00
#include "lc_viewsphere.h"
2018-08-19 20:27:58 -07:00
#include "lc_commands.h"
2011-09-07 21:06:51 +00:00
2020-02-15 11:36:06 -08:00
enum class lcTrackButton
{
2020-02-15 11:36:06 -08:00
None,
Left,
Middle,
Right
};
2020-12-04 16:06:39 -08:00
enum class lcTrackTool
{
2020-12-04 16:06:39 -08:00
None,
Insert,
PointLight,
SpotLight,
Camera,
Select,
MoveX,
MoveY,
MoveZ,
MoveXY,
MoveXZ,
MoveYZ,
MoveXYZ,
RotateX,
RotateY,
RotateZ,
RotateXY,
RotateXYZ,
ScalePlus,
ScaleMinus,
Eraser,
Paint,
ColorPicker,
Zoom,
Pan,
OrbitX,
OrbitY,
OrbitXY,
Roll,
ZoomRegion,
Count
};
2013-08-09 04:57:18 +00:00
class View : public lcGLWidget
2011-09-07 21:06:51 +00:00
{
public:
View(lcModel* Model);
~View();
2012-02-05 02:50:57 +00:00
2020-05-03 15:39:39 -07:00
View(const View&) = delete;
View(View&&) = delete;
View& operator=(const View&) = delete;
View& operator=(View&&) = delete;
void Clear()
{
mModel = nullptr;
mActiveSubmodelInstance = nullptr;
}
lcModel* GetModel() const
{
return mModel;
}
lcModel* GetActiveModel() const;
void SetTopSubmodelActive();
void SetSelectedSubmodelActive();
static void CreateResources(lcContext* Context);
static void DestroyResources(lcContext* Context);
void OnDraw() override;
void OnInitialUpdate() override;
void OnUpdateCursor() override;
void OnLeftButtonDown() override;
void OnLeftButtonUp() override;
void OnLeftButtonDoubleClick() override;
void OnMiddleButtonDown() override;
void OnMiddleButtonUp() override;
void OnRightButtonDown() override;
void OnRightButtonUp() override;
void OnBackButtonUp() override;
void OnForwardButtonUp() override;
void OnMouseMove() override;
void OnMouseWheel(float Direction) override;
2020-11-14 12:47:55 -08:00
void BeginDrag(lcDragState DragState) override;
void EndDrag(bool Accept) override;
2011-09-07 21:06:51 +00:00
bool IsTracking() const
{
2020-02-15 11:36:06 -08:00
return mTrackButton != lcTrackButton::None;
}
void StartOrbitTracking();
2014-11-29 02:55:58 +00:00
void CancelTrackingOrClearSelection();
void SetProjection(bool Ortho);
void LookAt();
2014-11-08 01:05:17 +00:00
void ZoomExtents();
void MoveCamera(const lcVector3& Direction);
void Zoom(float Amount);
2014-05-26 22:58:08 +00:00
void RemoveCamera();
2014-11-08 01:05:17 +00:00
void SetCamera(lcCamera* Camera, bool ForceCopy);
void SetCamera(const char* CameraName);
void SetCameraIndex(int Index);
2014-11-08 01:05:17 +00:00
void SetViewpoint(lcViewpoint Viewpoint);
2018-08-19 20:27:58 -07:00
void SetViewpoint(const lcVector3& Position);
void SetCameraAngles(float Latitude, float Longitude);
2012-08-20 04:05:56 +00:00
void SetDefaultCamera();
2020-02-15 11:36:06 -08:00
lcCursor GetCursor() const;
2015-12-04 20:32:10 +00:00
void ShowContextMenu() const;
2011-09-07 21:06:51 +00:00
lcVector3 GetMoveDirection(const lcVector3& Direction) const;
2017-11-12 19:38:07 -08:00
lcMatrix44 GetPieceInsertPosition(bool IgnoreSelected, PieceInfo* Info) const;
lcVector3 GetCameraLightInsertPosition() const;
void GetRayUnderPointer(lcVector3& Start, lcVector3& End) const;
2017-11-12 19:38:07 -08:00
lcObjectSection FindObjectUnderPointer(bool PiecesOnly, bool IgnoreSelected) const;
2014-11-29 02:55:58 +00:00
lcArray<lcObject*> FindObjectsInBox(float x1, float y1, float x2, float y2) const;
2014-05-03 16:59:57 +00:00
bool BeginRenderToImage(int Width, int Height);
void EndRenderToImage();
QImage GetRenderImage() const
{
return mRenderImage;
}
protected:
static void CreateSelectMoveOverlayMesh(lcContext* Context);
void DrawSelectMoveOverlay();
void DrawRotateOverlay();
void DrawSelectZoomRegionOverlay();
void DrawRotateViewOverlay();
void DrawGrid();
void DrawViewport();
void UpdateTrackTool();
2017-12-02 12:22:04 -08:00
bool IsTrackToolAllowed(lcTrackTool TrackTool, quint32 AllowedTransforms) const;
lcTool GetCurrentTool() const;
2016-04-23 00:17:33 +00:00
lcTrackTool GetOverrideTrackTool(Qt::MouseButton Button) const;
float GetOverlayScale() const;
void StartTracking(lcTrackButton TrackButton);
void StopTracking(bool Accept);
void OnButtonDown(lcTrackButton TrackButton);
lcMatrix44 GetTileProjectionMatrix(int CurrentRow, int CurrentColumn, int CurrentTileWidth, int CurrentTileHeight) const;
lcModel* mModel;
lcPiece* mActiveSubmodelInstance;
lcMatrix44 mActiveSubmodelTransform;
2015-02-08 18:54:51 +00:00
lcScene mScene;
2014-05-26 22:58:08 +00:00
lcDragState mDragState;
lcTrackButton mTrackButton;
lcTrackTool mTrackTool;
bool mTrackToolFromOverlay;
bool mTrackUpdated;
int mMouseDownX;
int mMouseDownY;
2017-11-12 19:38:07 -08:00
lcVector3 mMouseDownPosition;
PieceInfo* mMouseDownPiece;
QImage mRenderImage;
std::pair<lcFramebuffer, lcFramebuffer> mRenderFramebuffer;
2018-10-28 17:59:01 -07:00
lcViewSphere mViewSphere;
2015-04-14 04:14:10 +00:00
lcVertexBuffer mGridBuffer;
2015-04-14 04:14:10 +00:00
int mGridSettings[7];
static lcVertexBuffer mRotateMoveVertexBuffer;
static lcIndexBuffer mRotateMoveIndexBuffer;
2011-09-07 21:06:51 +00:00
};