mirror of
https://github.com/leozide/leocad
synced 2025-01-17 18:11:42 +01:00
Derive preview from view.
This commit is contained in:
parent
72bb41e8aa
commit
e27b235936
9 changed files with 54 additions and 362 deletions
|
@ -792,7 +792,7 @@ void lcMainWindow::PreviewPiece(const QString& PartId, int ColorCode)
|
|||
}
|
||||
else
|
||||
{
|
||||
lcPreviewWidget* Preview = new lcPreviewWidget();
|
||||
lcPreview* Preview = new lcPreview();
|
||||
lcViewWidget* ViewWidget = new lcViewWidget(nullptr, Preview);
|
||||
|
||||
if (Preview && ViewWidget)
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "lc_mainwindow.h"
|
||||
#include "lc_profile.h"
|
||||
#include "lc_library.h"
|
||||
#include "lc_scene.h"
|
||||
#include "lc_texture.h"
|
||||
#include "lc_synth.h"
|
||||
#include "lc_file.h"
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
#include "lc_model.h"
|
||||
#include "project.h"
|
||||
#include "pieceinf.h"
|
||||
#include "lc_scene.h"
|
||||
#include "view.h"
|
||||
#include "lc_glextensions.h"
|
||||
#include "lc_viewwidget.h"
|
||||
|
|
|
@ -4,15 +4,14 @@
|
|||
#include "piece.h"
|
||||
#include "project.h"
|
||||
#include "lc_model.h"
|
||||
#include "camera.h"
|
||||
#include "lc_library.h"
|
||||
#include "lc_viewsphere.h"
|
||||
#include "lc_viewwidget.h"
|
||||
#include "view.h"
|
||||
|
||||
lcPreviewDockWidget::lcPreviewDockWidget(QMainWindow* Parent)
|
||||
: QMainWindow(Parent)
|
||||
{
|
||||
mPreview = new lcPreviewWidget();
|
||||
mPreview = new lcPreview();
|
||||
mViewWidget = new lcViewWidget(nullptr, mPreview);
|
||||
setCentralWidget(mViewWidget);
|
||||
setMinimumSize(200, 200);
|
||||
|
@ -24,7 +23,7 @@ lcPreviewDockWidget::lcPreviewDockWidget(QMainWindow* Parent)
|
|||
connect(mLockAction, SIGNAL(triggered()), this, SLOT(SetPreviewLock()));
|
||||
SetPreviewLock();
|
||||
|
||||
mLabel = new QLabel(QString());
|
||||
mLabel = new QLabel();
|
||||
|
||||
mToolBar = addToolBar(tr("Toolbar"));
|
||||
mToolBar->setObjectName("Toolbar");
|
||||
|
@ -58,54 +57,46 @@ void lcPreviewDockWidget::UpdatePreview()
|
|||
|
||||
void lcPreviewDockWidget::ClearPreview()
|
||||
{
|
||||
if (mPreview->GetActiveModel()->GetPieces().GetSize())
|
||||
if (mPreview->GetModel()->GetPieces().GetSize())
|
||||
mPreview->ClearPreview();
|
||||
|
||||
mLabel->setText(QString());
|
||||
}
|
||||
|
||||
void lcPreviewDockWidget::SetPreviewLock()
|
||||
{
|
||||
bool Locked = mLockAction->isChecked();
|
||||
if (Locked && mPreview->GetActiveModel()->GetPieces().IsEmpty())
|
||||
|
||||
if (Locked && mPreview->GetModel()->GetPieces().IsEmpty())
|
||||
{
|
||||
mLockAction->setChecked(false);
|
||||
return;
|
||||
}
|
||||
|
||||
QIcon LockIcon(Locked ? ":/resources/action_preview_locked.png" : ":/resources/action_preview_unlocked.png");
|
||||
QString State(Locked ? tr("Unlock") : tr("Lock"));
|
||||
QString StatusTip(tr("%1 the preview display to %2 updates").arg(State).arg(Locked ? "enable" : "disable"));
|
||||
|
||||
mLockAction->setToolTip(tr("%1 Preview").arg(State));
|
||||
mLockAction->setIcon(LockIcon);
|
||||
mLockAction->setStatusTip(StatusTip);
|
||||
}
|
||||
|
||||
lcPreviewWidget::lcPreviewWidget()
|
||||
: lcGLWidget(lcViewType::Preview, nullptr), mLoader(new Project(true))
|
||||
lcPreview::lcPreview()
|
||||
: View(lcViewType::Preview, nullptr), mLoader(new Project(true))
|
||||
{
|
||||
mViewSphere = std::unique_ptr<lcViewSphere>(new lcViewSphere(this));
|
||||
mLoader->SetActiveModel(0);
|
||||
mModel = mLoader->GetActiveModel();
|
||||
|
||||
SetDefaultCamera();
|
||||
}
|
||||
|
||||
lcPreviewWidget::~lcPreviewWidget()
|
||||
{
|
||||
if (mCamera && mCamera->IsSimple())
|
||||
delete mCamera;
|
||||
|
||||
delete mLoader;
|
||||
}
|
||||
|
||||
bool lcPreviewWidget::SetCurrentPiece(const QString& PartType, int ColorCode)
|
||||
bool lcPreview::SetCurrentPiece(const QString& PartType, int ColorCode)
|
||||
{
|
||||
lcPiecesLibrary* Library = lcGetPiecesLibrary();
|
||||
PieceInfo* Info = Library->FindPiece(PartType.toLatin1().constData(), nullptr, false, false);
|
||||
|
||||
if (Info)
|
||||
{
|
||||
lcModel* ActiveModel = GetActiveModel();
|
||||
for (lcPiece* ModelPiece : ActiveModel->GetPieces())
|
||||
for (lcPiece* ModelPiece : mModel->GetPieces())
|
||||
{
|
||||
if (Info == ModelPiece->mPieceInfo)
|
||||
{
|
||||
|
@ -118,8 +109,8 @@ bool lcPreviewWidget::SetCurrentPiece(const QString& PartType, int ColorCode)
|
|||
mIsModel = Info->IsModel();
|
||||
mDescription = Info->m_strDescription;
|
||||
|
||||
ActiveModel->SelectAllPieces();
|
||||
ActiveModel->DeleteSelectedObjects();
|
||||
mModel->SelectAllPieces();
|
||||
mModel->DeleteSelectedObjects();
|
||||
|
||||
Library->LoadPieceInfo(Info, false, true);
|
||||
Library->WaitForLoadQueue();
|
||||
|
@ -131,7 +122,7 @@ bool lcPreviewWidget::SetCurrentPiece(const QString& PartType, int ColorCode)
|
|||
Piece->Initialize(lcMatrix44Identity(), CurrentStep);
|
||||
Piece->SetColorCode(ColorCode);
|
||||
|
||||
ActiveModel->SetPreviewPiece(Piece);
|
||||
mModel->SetPreviewPiece(Piece);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -158,22 +149,21 @@ bool lcPreviewWidget::SetCurrentPiece(const QString& PartType, int ColorCode)
|
|||
return true;
|
||||
}
|
||||
|
||||
void lcPreviewWidget::ClearPreview()
|
||||
void lcPreview::ClearPreview()
|
||||
{
|
||||
delete mLoader;
|
||||
mLoader = new Project(true/*IsPreview*/);
|
||||
mLoader = std::unique_ptr<Project>(new Project(true/*IsPreview*/));
|
||||
mLoader->SetActiveModel(0);
|
||||
mModel = mLoader->GetActiveModel();
|
||||
lcGetPiecesLibrary()->UnloadUnusedParts();
|
||||
Redraw();
|
||||
}
|
||||
|
||||
void lcPreviewWidget::UpdatePreview()
|
||||
void lcPreview::UpdatePreview()
|
||||
{
|
||||
QString PartType;
|
||||
int ColorCode = -1;
|
||||
lcModel* ActiveModel = GetActiveModel();
|
||||
for (lcPiece* ModelPiece : ActiveModel->GetPieces())
|
||||
|
||||
for (lcPiece* ModelPiece : mModel->GetPieces())
|
||||
{
|
||||
if (ModelPiece->mPieceInfo)
|
||||
{
|
||||
|
@ -188,275 +178,3 @@ void lcPreviewWidget::UpdatePreview()
|
|||
if (!PartType.isEmpty() && ColorCode > -1)
|
||||
SetCurrentPiece(PartType, ColorCode);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::StartOrbitTracking() // called by viewSphere
|
||||
{
|
||||
mTrackTool = lcTrackTool::OrbitXY;
|
||||
|
||||
UpdateCursor();
|
||||
|
||||
OnButtonDown(lcTrackButton::Left);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::StopTracking(bool Accept)
|
||||
{
|
||||
if (mTrackButton == lcTrackButton::None)
|
||||
return;
|
||||
|
||||
lcTool Tool = GetCurrentTool();
|
||||
lcModel* ActiveModel = GetActiveModel();
|
||||
|
||||
switch (Tool)
|
||||
{
|
||||
case lcTool::Select:
|
||||
break;
|
||||
|
||||
case lcTool::Pan:
|
||||
case lcTool::RotateView:
|
||||
ActiveModel->EndMouseTool(Tool, Accept);
|
||||
break;
|
||||
|
||||
case lcTool::Count:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
mTrackButton = lcTrackButton::None;
|
||||
|
||||
mTrackTool = lcTrackTool::None;
|
||||
|
||||
UpdateCursor();
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnButtonDown(lcTrackButton TrackButton)
|
||||
{
|
||||
switch (mTrackTool)
|
||||
{
|
||||
case lcTrackTool::None:
|
||||
break;
|
||||
|
||||
case lcTrackTool::Pan:
|
||||
StartTracking(TrackButton);
|
||||
break;
|
||||
|
||||
case lcTrackTool::OrbitXY:
|
||||
StartTracking(TrackButton);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnDraw()
|
||||
{
|
||||
if (!mModel)
|
||||
return;
|
||||
|
||||
lcPreferences& Preferences = lcGetPreferences();
|
||||
const bool DrawInterface = mWidget != nullptr;
|
||||
|
||||
mScene->SetAllowLOD(Preferences.mAllowLOD && mWidget != nullptr);
|
||||
mScene->SetLODDistance(Preferences.mMeshLODDistance);
|
||||
|
||||
mScene->Begin(mCamera->mWorldView);
|
||||
|
||||
mScene->SetDrawInterface(DrawInterface);
|
||||
|
||||
mModel->GetScene(mScene.get(), mCamera, false /*HighlightNewParts*/, false/*mFadeSteps*/);
|
||||
|
||||
mScene->End();
|
||||
|
||||
mContext->SetDefaultState();
|
||||
|
||||
mContext->SetViewport(0, 0, mWidth, mHeight);
|
||||
|
||||
DrawBackground();
|
||||
|
||||
mContext->SetProjectionMatrix(GetProjectionMatrix());
|
||||
|
||||
mContext->SetLineWidth(Preferences.mLineWidth);
|
||||
|
||||
mScene->Draw(mContext);
|
||||
|
||||
if (DrawInterface)
|
||||
{
|
||||
mContext->SetLineWidth(1.0f);
|
||||
|
||||
if (Preferences.mDrawPreviewAxis)
|
||||
DrawAxes();
|
||||
|
||||
if (Preferences.mDrawPreviewViewSphere)
|
||||
mViewSphere->Draw();
|
||||
DrawViewport();
|
||||
}
|
||||
|
||||
mContext->ClearResources();
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnLeftButtonDown()
|
||||
{
|
||||
if (mTrackButton != lcTrackButton::None)
|
||||
{
|
||||
StopTracking(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (mViewSphere->OnLeftButtonDown())
|
||||
return;
|
||||
|
||||
lcTrackTool OverrideTool = lcTrackTool::OrbitXY;
|
||||
|
||||
if (OverrideTool != lcTrackTool::None)
|
||||
{
|
||||
mTrackTool = OverrideTool;
|
||||
UpdateCursor();
|
||||
}
|
||||
|
||||
OnButtonDown(lcTrackButton::Left);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnLeftButtonUp()
|
||||
{
|
||||
StopTracking(mTrackButton == lcTrackButton::Left);
|
||||
|
||||
if (mViewSphere->OnLeftButtonUp())
|
||||
{
|
||||
ZoomExtents();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnMiddleButtonDown()
|
||||
{
|
||||
if (mTrackButton != lcTrackButton::None)
|
||||
{
|
||||
StopTracking(false);
|
||||
return;
|
||||
}
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(4, 7, 0))
|
||||
lcTrackTool OverrideTool = lcTrackTool::None;
|
||||
|
||||
if (OverrideTool != lcTrackTool::None)
|
||||
{
|
||||
mTrackTool = OverrideTool;
|
||||
UpdateCursor();
|
||||
}
|
||||
#endif
|
||||
OnButtonDown(lcTrackButton::Middle);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnMiddleButtonUp()
|
||||
{
|
||||
StopTracking(mTrackButton == lcTrackButton::Middle);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnLeftButtonDoubleClick()
|
||||
{
|
||||
ZoomExtents();
|
||||
Redraw();
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnRightButtonDown()
|
||||
{
|
||||
if (mTrackButton != lcTrackButton::None)
|
||||
{
|
||||
StopTracking(false);
|
||||
return;
|
||||
}
|
||||
|
||||
lcTrackTool OverrideTool = lcTrackTool::Pan;
|
||||
|
||||
if (OverrideTool != lcTrackTool::None)
|
||||
{
|
||||
mTrackTool = OverrideTool;
|
||||
UpdateCursor();
|
||||
}
|
||||
|
||||
OnButtonDown(lcTrackButton::Middle);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnRightButtonUp()
|
||||
{
|
||||
if (mTrackButton != lcTrackButton::None)
|
||||
StopTracking(mTrackButton == lcTrackButton::Right);
|
||||
}
|
||||
|
||||
void lcPreviewWidget::OnMouseMove()
|
||||
{
|
||||
lcModel* ActiveModel = GetActiveModel();
|
||||
|
||||
if (!ActiveModel)
|
||||
return;
|
||||
|
||||
if (mTrackButton == lcTrackButton::None)
|
||||
{
|
||||
if (mViewSphere->OnMouseMove())
|
||||
{
|
||||
lcTrackTool NewTrackTool = mViewSphere->IsDragging() ? lcTrackTool::OrbitXY : lcTrackTool::None;
|
||||
|
||||
if (NewTrackTool != mTrackTool)
|
||||
{
|
||||
mTrackTool = NewTrackTool;
|
||||
UpdateCursor();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
const float MouseSensitivity = 0.5f / (21.0f - lcGetPreferences().mMouseSensitivity);
|
||||
|
||||
switch (mTrackTool)
|
||||
{
|
||||
case lcTrackTool::None:
|
||||
break;
|
||||
|
||||
case lcTrackTool::Pan:
|
||||
{
|
||||
lcVector3 Points[4] =
|
||||
{
|
||||
lcVector3((float)mMouseX, (float)mMouseY, 0.0f),
|
||||
lcVector3((float)mMouseX, (float)mMouseY, 1.0f),
|
||||
lcVector3(mMouseDownX, mMouseDownY, 0.0f),
|
||||
lcVector3(mMouseDownX, mMouseDownY, 1.0f)
|
||||
};
|
||||
|
||||
UnprojectPoints(Points, 4);
|
||||
|
||||
const lcVector3& CurrentStart = Points[0];
|
||||
const lcVector3& CurrentEnd = Points[1];
|
||||
const lcVector3& MouseDownStart = Points[2];
|
||||
const lcVector3& MouseDownEnd = Points[3];
|
||||
lcVector3 Center = ActiveModel->GetSelectionOrModelCenter();
|
||||
|
||||
lcVector3 PlaneNormal(mCamera->mPosition - mCamera->mTargetPosition);
|
||||
lcVector4 Plane(PlaneNormal, -lcDot(PlaneNormal, Center));
|
||||
lcVector3 Intersection, MoveStart;
|
||||
|
||||
if (!lcLineSegmentPlaneIntersection(&Intersection, CurrentStart, CurrentEnd, Plane) || !lcLineSegmentPlaneIntersection(&MoveStart, MouseDownStart, MouseDownEnd, Plane))
|
||||
{
|
||||
Center = MouseDownStart + lcNormalize(MouseDownEnd - MouseDownStart) * 10.0f;
|
||||
Plane = lcVector4(PlaneNormal, -lcDot(PlaneNormal, Center));
|
||||
|
||||
if (!lcLineSegmentPlaneIntersection(&Intersection, CurrentStart, CurrentEnd, Plane) || !lcLineSegmentPlaneIntersection(&MoveStart, MouseDownStart, MouseDownEnd, Plane))
|
||||
break;
|
||||
}
|
||||
|
||||
ActiveModel->UpdatePanTool(mCamera, MoveStart - Intersection);
|
||||
Redraw();
|
||||
}
|
||||
break;
|
||||
|
||||
case lcTrackTool::OrbitXY:
|
||||
ActiveModel->UpdateOrbitTool(mCamera, 0.1f * MouseSensitivity * (mMouseX - mMouseDownX), 0.1f * MouseSensitivity * (mMouseY - mMouseDownY));
|
||||
Redraw();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
#include "lc_glwidget.h"
|
||||
#include "lc_scene.h"
|
||||
#include "lc_commands.h"
|
||||
#include "view.h"
|
||||
|
||||
class lcPreviewWidget;
|
||||
class lcPreview;
|
||||
|
||||
class lcPreviewDockWidget : public QMainWindow
|
||||
{
|
||||
|
@ -12,6 +10,7 @@ class lcPreviewDockWidget : public QMainWindow
|
|||
|
||||
public:
|
||||
explicit lcPreviewDockWidget(QMainWindow* Parent = nullptr);
|
||||
|
||||
bool SetCurrentPiece(const QString& PartType, int ColorCode);
|
||||
void ClearPreview();
|
||||
void UpdatePreview();
|
||||
|
@ -23,15 +22,14 @@ protected:
|
|||
QAction* mLockAction;
|
||||
QToolBar* mToolBar;
|
||||
QLabel* mLabel;
|
||||
lcPreviewWidget* mPreview;
|
||||
lcPreview* mPreview;
|
||||
lcViewWidget* mViewWidget;
|
||||
};
|
||||
|
||||
class lcPreviewWidget : public lcGLWidget
|
||||
class lcPreview : public View
|
||||
{
|
||||
public:
|
||||
lcPreviewWidget();
|
||||
~lcPreviewWidget();
|
||||
lcPreview();
|
||||
|
||||
QString GetDescription() const
|
||||
{
|
||||
|
@ -47,24 +45,9 @@ public:
|
|||
void UpdatePreview();
|
||||
bool SetCurrentPiece(const QString& PartType, int ColorCode);
|
||||
|
||||
void StartOrbitTracking();
|
||||
|
||||
void OnDraw() override;
|
||||
void OnLeftButtonDown() override;
|
||||
void OnLeftButtonUp() override;
|
||||
void OnLeftButtonDoubleClick() override;
|
||||
void OnMiddleButtonDown() override;
|
||||
void OnMiddleButtonUp() override;
|
||||
void OnRightButtonDown() override;
|
||||
void OnRightButtonUp() override;
|
||||
void OnMouseMove() override;
|
||||
|
||||
protected:
|
||||
void StopTracking(bool Accept);
|
||||
void OnButtonDown(lcTrackButton TrackButton);
|
||||
|
||||
Project* mLoader;
|
||||
std::unique_ptr<Project> mLoader;
|
||||
|
||||
QString mDescription;
|
||||
bool mIsModel;
|
||||
bool mIsModel = false;
|
||||
};
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
#include "lc_global.h"
|
||||
#include "lc_viewsphere.h"
|
||||
#include "view.h"
|
||||
#include "lc_previewwidget.h"
|
||||
#include "camera.h"
|
||||
#include "lc_context.h"
|
||||
#include "lc_stringcache.h"
|
||||
|
@ -17,13 +16,7 @@ const float lcViewSphere::mHighlightRadius = 0.35f;
|
|||
const int lcViewSphere::mSubdivisions = 7;
|
||||
|
||||
lcViewSphere::lcViewSphere(View* View)
|
||||
: mWidget(View), mPreview(nullptr), mView(View), mIsPreview(false)
|
||||
{
|
||||
UpdateSettings();
|
||||
}
|
||||
|
||||
lcViewSphere::lcViewSphere(lcPreviewWidget* Preview)
|
||||
: mWidget(Preview), mPreview(Preview), mView(nullptr), mIsPreview(true)
|
||||
: mView(View)
|
||||
{
|
||||
UpdateSettings();
|
||||
}
|
||||
|
@ -32,7 +25,7 @@ void lcViewSphere::UpdateSettings()
|
|||
{
|
||||
const lcPreferences& Preferences = lcGetPreferences();
|
||||
|
||||
switch (mWidget->GetViewType())
|
||||
switch (mView->GetViewType())
|
||||
{
|
||||
case lcViewType::View:
|
||||
mSize = Preferences.mViewSphereSize;
|
||||
|
@ -54,7 +47,7 @@ void lcViewSphere::UpdateSettings()
|
|||
|
||||
lcMatrix44 lcViewSphere::GetViewMatrix() const
|
||||
{
|
||||
lcMatrix44 ViewMatrix = mWidget->GetCamera()->mWorldView;
|
||||
lcMatrix44 ViewMatrix = mView->GetCamera()->mWorldView;
|
||||
ViewMatrix.SetTranslation(lcVector3(0, 0, 0));
|
||||
return ViewMatrix;
|
||||
}
|
||||
|
@ -188,9 +181,9 @@ void lcViewSphere::Draw()
|
|||
if (!mSize || !mEnabled)
|
||||
return;
|
||||
|
||||
lcContext* Context = mWidget->mContext;
|
||||
const int Width = mWidget->GetWidth();
|
||||
const int Height = mWidget->GetHeight();
|
||||
lcContext* Context = mView->mContext;
|
||||
const int Width = mView->GetWidth();
|
||||
const int Height = mView->GetHeight();
|
||||
const int ViewportSize = mSize;
|
||||
const int Left = (mLocation == lcViewSphereLocation::BottomLeft || mLocation == lcViewSphereLocation::TopLeft) ? 0 : Width - ViewportSize;
|
||||
const int Bottom = (mLocation == lcViewSphereLocation::BottomLeft || mLocation == lcViewSphereLocation::BottomRight) ? 0 : Height - ViewportSize;
|
||||
|
@ -259,8 +252,8 @@ bool lcViewSphere::OnLeftButtonDown()
|
|||
if (!mIntersectionFlags.any())
|
||||
return false;
|
||||
|
||||
mMouseDownX = mWidget->GetMouseX();
|
||||
mMouseDownY = mWidget->GetMouseY();
|
||||
mMouseDownX = mView->GetMouseX();
|
||||
mMouseDownY = mView->GetMouseY();
|
||||
mMouseDown = true;
|
||||
|
||||
return true;
|
||||
|
@ -289,7 +282,7 @@ bool lcViewSphere::OnLeftButtonUp()
|
|||
Position[AxisIdx] = -1250.0f;
|
||||
}
|
||||
|
||||
mWidget->SetViewpoint(Position);
|
||||
mView->SetViewpoint(Position);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -302,11 +295,11 @@ bool lcViewSphere::OnMouseMove()
|
|||
if (IsDragging())
|
||||
{
|
||||
mIntersectionFlags.reset();
|
||||
mIsPreview ? mPreview->StartOrbitTracking() : mView->StartOrbitTracking();
|
||||
mView->StartOrbitTracking();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mWidget->IsTracking())
|
||||
if (mView->IsTracking())
|
||||
return false;
|
||||
|
||||
std::bitset<6> IntersectionFlags = GetIntersectionFlags(mIntersection);
|
||||
|
@ -314,7 +307,7 @@ bool lcViewSphere::OnMouseMove()
|
|||
if (IntersectionFlags != mIntersectionFlags)
|
||||
{
|
||||
mIntersectionFlags = IntersectionFlags;
|
||||
mWidget->Redraw();
|
||||
mView->Redraw();
|
||||
}
|
||||
|
||||
return mIntersectionFlags.any();
|
||||
|
@ -322,20 +315,20 @@ bool lcViewSphere::OnMouseMove()
|
|||
|
||||
bool lcViewSphere::IsDragging() const
|
||||
{
|
||||
int InputStateX = mWidget->GetMouseX();
|
||||
int InputStateY = mWidget->GetMouseY();
|
||||
int InputStateX = mView->GetMouseX();
|
||||
int InputStateY = mView->GetMouseY();
|
||||
return mMouseDown && (qAbs(mMouseDownX - InputStateX) > 3 || qAbs(mMouseDownY - InputStateY) > 3);
|
||||
}
|
||||
|
||||
std::bitset<6> lcViewSphere::GetIntersectionFlags(lcVector3& Intersection) const
|
||||
{
|
||||
const int Width = mWidget->GetWidth();
|
||||
const int Height = mWidget->GetHeight();
|
||||
const int Width = mView->GetWidth();
|
||||
const int Height = mView->GetHeight();
|
||||
const int ViewportSize = mSize;
|
||||
const int Left = (mLocation == lcViewSphereLocation::BottomLeft || mLocation == lcViewSphereLocation::TopLeft) ? 0 : Width - ViewportSize;
|
||||
const int Bottom = (mLocation == lcViewSphereLocation::BottomLeft || mLocation == lcViewSphereLocation::BottomRight) ? 0 : Height - ViewportSize;
|
||||
const int x = mWidget->GetMouseX() - Left;
|
||||
const int y = mWidget->GetMouseY() - Bottom;
|
||||
const int x = mView->GetMouseX() - Left;
|
||||
const int y = mView->GetMouseY() - Bottom;
|
||||
std::bitset<6> IntersectionFlags;
|
||||
|
||||
if (x < 0 || x > Width || y < 0 || y > Height)
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#include <bitset>
|
||||
|
||||
class View;
|
||||
class lcPreviewWidget;
|
||||
|
||||
enum class lcViewSphereLocation
|
||||
{
|
||||
|
@ -19,7 +18,6 @@ class lcViewSphere
|
|||
{
|
||||
public:
|
||||
lcViewSphere(View* View);
|
||||
lcViewSphere(lcPreviewWidget* Preview);
|
||||
|
||||
void Draw();
|
||||
bool OnMouseMove();
|
||||
|
@ -36,10 +34,7 @@ protected:
|
|||
lcMatrix44 GetProjectionMatrix() const;
|
||||
std::bitset<6> GetIntersectionFlags(lcVector3& Intersection) const;
|
||||
|
||||
lcGLWidget* const mWidget = nullptr;
|
||||
lcPreviewWidget* const mPreview = nullptr;
|
||||
View* const mView = nullptr;
|
||||
bool mIsPreview = false;
|
||||
|
||||
int mSize = 1;
|
||||
bool mEnabled = false;
|
||||
|
|
|
@ -106,7 +106,7 @@ void lcViewWidget::SetView(lcGLWidget* View)
|
|||
void lcViewWidget::SetPreviewPosition(const QRect& ParentRect)
|
||||
{
|
||||
lcPreferences& Preferences = lcGetPreferences();
|
||||
lcPreviewWidget* Preview = reinterpret_cast<lcPreviewWidget*>(mView);
|
||||
lcPreview* Preview = reinterpret_cast<lcPreview*>(mView);
|
||||
|
||||
setWindowTitle(tr("%1 Preview").arg(Preview->IsModel() ? "Submodel" : "Part"));
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ View::~View()
|
|||
{
|
||||
mContext->DestroyVertexBuffer(mGridBuffer);
|
||||
|
||||
if (gMainWindow)
|
||||
if (gMainWindow && mViewType == lcViewType::View)
|
||||
gMainWindow->RemoveView(this);
|
||||
|
||||
if (mCamera && mCamera->IsSimple())
|
||||
|
@ -1572,7 +1572,8 @@ void View::DrawGrid()
|
|||
|
||||
void View::OnInitialUpdate()
|
||||
{
|
||||
gMainWindow->AddView(this);
|
||||
if (mViewType == lcViewType::View)
|
||||
gMainWindow->AddView(this);
|
||||
}
|
||||
|
||||
lcTrackTool View::GetOverrideTrackTool(Qt::MouseButton Button) const
|
||||
|
|
Loading…
Reference in a new issue