mirror of
https://github.com/leozide/leocad
synced 2025-01-18 22:26:44 +01:00
Have the view use signals to pass camera changes to the main window.
This commit is contained in:
parent
fd8aca92df
commit
1ce80b8c2c
10 changed files with 206 additions and 217 deletions
|
@ -67,6 +67,7 @@ class PieceInfo;
|
||||||
typedef std::map<const PieceInfo*, std::map<int, int>> lcPartsList;
|
typedef std::map<const PieceInfo*, std::map<int, int>> lcPartsList;
|
||||||
struct lcModelPartsEntry;
|
struct lcModelPartsEntry;
|
||||||
struct lcMinifig;
|
struct lcMinifig;
|
||||||
|
enum class lcViewpoint;
|
||||||
|
|
||||||
class lcVector2;
|
class lcVector2;
|
||||||
class lcVector3;
|
class lcVector3;
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#include "lc_model.h"
|
#include "lc_model.h"
|
||||||
#include "lc_scene.h"
|
#include "lc_scene.h"
|
||||||
|
|
||||||
lcGLWidget* lcGLWidget::mLastFocusView;
|
lcGLWidget* lcGLWidget::mLastFocusedView;
|
||||||
|
|
||||||
lcGLWidget::lcGLWidget(lcModel* Model)
|
lcGLWidget::lcGLWidget(lcModel* Model)
|
||||||
: mModel(Model), mScene(new lcScene())
|
: mModel(Model), mScene(new lcScene())
|
||||||
|
@ -19,8 +19,8 @@ lcGLWidget::lcGLWidget(lcModel* Model)
|
||||||
|
|
||||||
lcGLWidget::~lcGLWidget()
|
lcGLWidget::~lcGLWidget()
|
||||||
{
|
{
|
||||||
if (mLastFocusView == this)
|
if (mLastFocusedView == this)
|
||||||
mLastFocusView = nullptr;
|
mLastFocusedView = nullptr;
|
||||||
|
|
||||||
if (mDeleteContext)
|
if (mDeleteContext)
|
||||||
delete mContext;
|
delete mContext;
|
||||||
|
@ -34,7 +34,7 @@ lcModel* lcGLWidget::GetActiveModel() const
|
||||||
void lcGLWidget::SetFocus(bool Focus)
|
void lcGLWidget::SetFocus(bool Focus)
|
||||||
{
|
{
|
||||||
if (Focus)
|
if (Focus)
|
||||||
mLastFocusView = this;
|
mLastFocusedView = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcGLWidget::SetMousePosition(int MouseX, int MouseY)
|
void lcGLWidget::SetMousePosition(int MouseX, int MouseY)
|
||||||
|
@ -261,6 +261,142 @@ void lcGLWidget::UnprojectPoints(lcVector3* Points, int NumPoints) const
|
||||||
lcUnprojectPoints(Points, NumPoints, mCamera->mWorldView, GetProjectionMatrix(), Viewport);
|
lcUnprojectPoints(Points, NumPoints, mCamera->mWorldView, GetProjectionMatrix(), Viewport);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::ZoomExtents()
|
||||||
|
{
|
||||||
|
lcModel* ActiveModel = GetActiveModel();
|
||||||
|
if (ActiveModel)
|
||||||
|
ActiveModel->ZoomExtents(mCamera, (float)mWidth / (float)mHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetViewpoint(lcViewpoint Viewpoint)
|
||||||
|
{
|
||||||
|
if (!mCamera || !mCamera->IsSimple())
|
||||||
|
{
|
||||||
|
lcCamera* OldCamera = mCamera;
|
||||||
|
|
||||||
|
mCamera = new lcCamera(true);
|
||||||
|
|
||||||
|
if (OldCamera)
|
||||||
|
mCamera->CopySettings(OldCamera);
|
||||||
|
}
|
||||||
|
|
||||||
|
mCamera->SetViewpoint(Viewpoint);
|
||||||
|
ZoomExtents();
|
||||||
|
Redraw();
|
||||||
|
|
||||||
|
emit CameraChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetViewpoint(const lcVector3& Position)
|
||||||
|
{
|
||||||
|
if (!mCamera || !mCamera->IsSimple())
|
||||||
|
{
|
||||||
|
lcCamera* OldCamera = mCamera;
|
||||||
|
|
||||||
|
mCamera = new lcCamera(true);
|
||||||
|
|
||||||
|
if (OldCamera)
|
||||||
|
mCamera->CopySettings(OldCamera);
|
||||||
|
}
|
||||||
|
|
||||||
|
mCamera->SetViewpoint(Position);
|
||||||
|
ZoomExtents();
|
||||||
|
Redraw();
|
||||||
|
|
||||||
|
emit CameraChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetViewpoint(const lcVector3& Position, const lcVector3& Target, const lcVector3& Up)
|
||||||
|
{
|
||||||
|
if (!mCamera || !mCamera->IsSimple())
|
||||||
|
{
|
||||||
|
lcCamera* OldCamera = mCamera;
|
||||||
|
|
||||||
|
mCamera = new lcCamera(true);
|
||||||
|
|
||||||
|
if (OldCamera)
|
||||||
|
mCamera->CopySettings(OldCamera);
|
||||||
|
}
|
||||||
|
|
||||||
|
mCamera->SetViewpoint(Position, Target, Up);
|
||||||
|
Redraw();
|
||||||
|
|
||||||
|
emit CameraChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetCameraAngles(float Latitude, float Longitude)
|
||||||
|
{
|
||||||
|
if (!mCamera || !mCamera->IsSimple())
|
||||||
|
{
|
||||||
|
lcCamera* OldCamera = mCamera;
|
||||||
|
|
||||||
|
mCamera = new lcCamera(true);
|
||||||
|
|
||||||
|
if (OldCamera)
|
||||||
|
mCamera->CopySettings(OldCamera);
|
||||||
|
}
|
||||||
|
|
||||||
|
mCamera->SetAngles(Latitude, Longitude, 1.0f);
|
||||||
|
ZoomExtents();
|
||||||
|
Redraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetDefaultCamera()
|
||||||
|
{
|
||||||
|
if (!mCamera || !mCamera->IsSimple())
|
||||||
|
mCamera = new lcCamera(true);
|
||||||
|
|
||||||
|
mCamera->SetViewpoint(lcViewpoint::Home);
|
||||||
|
|
||||||
|
emit CameraChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetCamera(lcCamera* Camera, bool ForceCopy)
|
||||||
|
{
|
||||||
|
if (Camera->IsSimple() || ForceCopy)
|
||||||
|
{
|
||||||
|
if (!mCamera || !mCamera->IsSimple())
|
||||||
|
mCamera = new lcCamera(true);
|
||||||
|
|
||||||
|
mCamera->CopyPosition(Camera);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (mCamera && mCamera->IsSimple())
|
||||||
|
delete mCamera;
|
||||||
|
|
||||||
|
mCamera = Camera;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetCamera(const char* CameraName)
|
||||||
|
{
|
||||||
|
const lcArray<lcCamera*>& Cameras = mModel->GetCameras();
|
||||||
|
|
||||||
|
for (int CameraIdx = 0; CameraIdx < Cameras.GetSize(); CameraIdx++)
|
||||||
|
{
|
||||||
|
if (qstricmp(CameraName, Cameras[CameraIdx]->m_strName) == 0)
|
||||||
|
{
|
||||||
|
SetCameraIndex(CameraIdx);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcGLWidget::SetCameraIndex(int Index)
|
||||||
|
{
|
||||||
|
const lcArray<lcCamera*>& Cameras = mModel->GetCameras();
|
||||||
|
|
||||||
|
if (Index >= Cameras.GetSize())
|
||||||
|
return;
|
||||||
|
|
||||||
|
lcCamera* Camera = Cameras[Index];
|
||||||
|
SetCamera(Camera, false);
|
||||||
|
|
||||||
|
emit CameraChanged();
|
||||||
|
Redraw();
|
||||||
|
}
|
||||||
|
|
||||||
void lcGLWidget::StartTracking(lcTrackButton TrackButton)
|
void lcGLWidget::StartTracking(lcTrackButton TrackButton)
|
||||||
{
|
{
|
||||||
mTrackButton = TrackButton;
|
mTrackButton = TrackButton;
|
||||||
|
@ -410,7 +546,7 @@ void lcGLWidget::DrawViewport() const
|
||||||
|
|
||||||
mContext->SetMaterial(lcMaterialType::UnlitColor);
|
mContext->SetMaterial(lcMaterialType::UnlitColor);
|
||||||
|
|
||||||
if (mLastFocusView == this)
|
if (mLastFocusedView == this)
|
||||||
mContext->SetColor(lcVector4FromColor(lcGetPreferences().mActiveViewColor));
|
mContext->SetColor(lcVector4FromColor(lcGetPreferences().mActiveViewColor));
|
||||||
else
|
else
|
||||||
mContext->SetColor(lcVector4FromColor(lcGetPreferences().mInactiveViewColor));
|
mContext->SetColor(lcVector4FromColor(lcGetPreferences().mInactiveViewColor));
|
||||||
|
|
|
@ -80,8 +80,10 @@ enum class lcTrackTool
|
||||||
Count
|
Count
|
||||||
};
|
};
|
||||||
|
|
||||||
class lcGLWidget
|
class lcGLWidget : public QObject
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
lcGLWidget(lcModel* Model);
|
lcGLWidget(lcModel* Model);
|
||||||
virtual ~lcGLWidget();
|
virtual ~lcGLWidget();
|
||||||
|
@ -96,6 +98,11 @@ public:
|
||||||
return mCamera;
|
return mCamera;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsLastFocused() const
|
||||||
|
{
|
||||||
|
return mLastFocusedView == this;
|
||||||
|
}
|
||||||
|
|
||||||
bool IsTracking() const
|
bool IsTracking() const
|
||||||
{
|
{
|
||||||
return mTrackButton != lcTrackButton::None;
|
return mTrackButton != lcTrackButton::None;
|
||||||
|
@ -124,6 +131,17 @@ public:
|
||||||
void UnprojectPoints(lcVector3* Points, int NumPoints) const;
|
void UnprojectPoints(lcVector3* Points, int NumPoints) const;
|
||||||
lcMatrix44 GetProjectionMatrix() const;
|
lcMatrix44 GetProjectionMatrix() const;
|
||||||
|
|
||||||
|
void ZoomExtents();
|
||||||
|
|
||||||
|
void SetViewpoint(lcViewpoint Viewpoint);
|
||||||
|
void SetViewpoint(const lcVector3& Position);
|
||||||
|
void SetViewpoint(const lcVector3& Position, const lcVector3& Target, const lcVector3& Up);
|
||||||
|
void SetCameraAngles(float Latitude, float Longitude);
|
||||||
|
void SetDefaultCamera();
|
||||||
|
void SetCamera(lcCamera* Camera, bool ForceCopy);
|
||||||
|
void SetCamera(const char* CameraName);
|
||||||
|
void SetCameraIndex(int Index);
|
||||||
|
|
||||||
void DrawBackground() const;
|
void DrawBackground() const;
|
||||||
void DrawViewport() const;
|
void DrawViewport() const;
|
||||||
void DrawAxes() const;
|
void DrawAxes() const;
|
||||||
|
@ -151,6 +169,9 @@ public:
|
||||||
QGLWidget* mWidget = nullptr;
|
QGLWidget* mWidget = nullptr;
|
||||||
lcContext* mContext = nullptr;
|
lcContext* mContext = nullptr;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void CameraChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
lcCursor GetCursor() const;
|
lcCursor GetCursor() const;
|
||||||
void SetCursor(lcCursor Cursor);
|
void SetCursor(lcCursor Cursor);
|
||||||
|
@ -178,5 +199,5 @@ protected:
|
||||||
lcCamera* mCamera = nullptr;
|
lcCamera* mCamera = nullptr;
|
||||||
bool mDeleteContext = true;
|
bool mDeleteContext = true;
|
||||||
|
|
||||||
static lcGLWidget* mLastFocusView;
|
static lcGLWidget* mLastFocusedView;
|
||||||
};
|
};
|
||||||
|
|
|
@ -760,14 +760,23 @@ void lcMainWindow::CreateToolBars()
|
||||||
tabifyDockWidget(mPartsToolBar, mPropertiesToolBar);
|
tabifyDockWidget(mPartsToolBar, mPropertiesToolBar);
|
||||||
tabifyDockWidget(mPropertiesToolBar, mTimelineToolBar);
|
tabifyDockWidget(mPropertiesToolBar, mTimelineToolBar);
|
||||||
|
|
||||||
connect(mPropertiesToolBar, SIGNAL (topLevelChanged(bool)), this, SLOT (EnableWindowFlags(bool)));
|
connect(mPropertiesToolBar, SIGNAL(topLevelChanged(bool)), this, SLOT(EnableWindowFlags(bool)));
|
||||||
connect(mTimelineToolBar, SIGNAL (topLevelChanged(bool)), this, SLOT (EnableWindowFlags(bool)));
|
connect(mTimelineToolBar, SIGNAL(topLevelChanged(bool)), this, SLOT(EnableWindowFlags(bool)));
|
||||||
connect(mPartsToolBar, SIGNAL (topLevelChanged(bool)), this, SLOT (EnableWindowFlags(bool)));
|
connect(mPartsToolBar, SIGNAL(topLevelChanged(bool)), this, SLOT(EnableWindowFlags(bool)));
|
||||||
connect(mColorsToolBar, SIGNAL (topLevelChanged(bool)), this, SLOT (EnableWindowFlags(bool)));
|
connect(mColorsToolBar, SIGNAL(topLevelChanged(bool)), this, SLOT(EnableWindowFlags(bool)));
|
||||||
|
|
||||||
mPartsToolBar->raise();
|
mPartsToolBar->raise();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
View* lcMainWindow::CreateView(lcModel* Model)
|
||||||
|
{
|
||||||
|
View* NewView = new View(Model);
|
||||||
|
|
||||||
|
connect(NewView, SIGNAL(CameraChanged()), this, SLOT(ViewCameraChanged()));
|
||||||
|
|
||||||
|
return NewView;
|
||||||
|
}
|
||||||
|
|
||||||
void lcMainWindow::PreviewPiece(const QString &PartType, int ColorCode)
|
void lcMainWindow::PreviewPiece(const QString &PartType, int ColorCode)
|
||||||
{
|
{
|
||||||
if (mPreviewWidget) {
|
if (mPreviewWidget) {
|
||||||
|
@ -789,7 +798,7 @@ void lcMainWindow::CreatePreviewWidget()
|
||||||
|
|
||||||
tabifyDockWidget(mTimelineToolBar, mPreviewToolBar);
|
tabifyDockWidget(mTimelineToolBar, mPreviewToolBar);
|
||||||
|
|
||||||
connect(mPreviewToolBar, SIGNAL (topLevelChanged(bool)), this, SLOT (EnableWindowFlags(bool)));
|
connect(mPreviewToolBar, SIGNAL(topLevelChanged(bool)), this, SLOT(EnableWindowFlags(bool)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcMainWindow::TogglePreviewWidget(bool visible)
|
void lcMainWindow::TogglePreviewWidget(bool visible)
|
||||||
|
@ -1599,7 +1608,7 @@ void lcMainWindow::SetCurrentModelTab(lcModel* Model)
|
||||||
QGridLayout* CentralLayout = new QGridLayout(TabWidget);
|
QGridLayout* CentralLayout = new QGridLayout(TabWidget);
|
||||||
CentralLayout->setContentsMargins(0, 0, 0, 0);
|
CentralLayout->setContentsMargins(0, 0, 0, 0);
|
||||||
|
|
||||||
NewView = new View(Model);
|
NewView = CreateView(Model);
|
||||||
ViewWidget = new lcQGLWidget(TabWidget, NewView);
|
ViewWidget = new lcQGLWidget(TabWidget, NewView);
|
||||||
CentralLayout->addWidget(ViewWidget, 0, 0, 1, 1);
|
CentralLayout->addWidget(ViewWidget, 0, 0, 1, 1);
|
||||||
|
|
||||||
|
@ -1610,7 +1619,7 @@ void lcMainWindow::SetCurrentModelTab(lcModel* Model)
|
||||||
TabWidget = EmptyWidget;
|
TabWidget = EmptyWidget;
|
||||||
TabWidget->SetModel(Model);
|
TabWidget->SetModel(Model);
|
||||||
|
|
||||||
NewView = new View(Model);
|
NewView = CreateView(Model);
|
||||||
ViewWidget = (lcQGLWidget*)TabWidget->layout()->itemAt(0)->widget();
|
ViewWidget = (lcQGLWidget*)TabWidget->layout()->itemAt(0)->widget();
|
||||||
ViewWidget->mWidget = NewView;
|
ViewWidget->mWidget = NewView;
|
||||||
NewView->mWidget = ViewWidget;
|
NewView->mWidget = ViewWidget;
|
||||||
|
@ -1825,7 +1834,7 @@ void lcMainWindow::SplitView(Qt::Orientation Orientation)
|
||||||
Splitter = new QSplitter(Orientation, Parent);
|
Splitter = new QSplitter(Orientation, Parent);
|
||||||
Parent->layout()->addWidget(Splitter);
|
Parent->layout()->addWidget(Splitter);
|
||||||
Splitter->addWidget(Focus);
|
Splitter->addWidget(Focus);
|
||||||
Splitter->addWidget(new lcQGLWidget(mModelTabWidget->currentWidget(), new View(GetCurrentTabModel())));
|
Splitter->addWidget(new lcQGLWidget(mModelTabWidget->currentWidget(), CreateView(GetCurrentTabModel())));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1836,7 +1845,7 @@ void lcMainWindow::SplitView(Qt::Orientation Orientation)
|
||||||
Splitter = new QSplitter(Orientation, Parent);
|
Splitter = new QSplitter(Orientation, Parent);
|
||||||
ParentSplitter->insertWidget(FocusIndex, Splitter);
|
ParentSplitter->insertWidget(FocusIndex, Splitter);
|
||||||
Splitter->addWidget(Focus);
|
Splitter->addWidget(Focus);
|
||||||
Splitter->addWidget(new lcQGLWidget(mModelTabWidget->currentWidget(), new View(GetCurrentTabModel())));
|
Splitter->addWidget(new lcQGLWidget(mModelTabWidget->currentWidget(), CreateView(GetCurrentTabModel())));
|
||||||
|
|
||||||
ParentSplitter->setSizes(Sizes);
|
ParentSplitter->setSizes(Sizes);
|
||||||
}
|
}
|
||||||
|
@ -2154,6 +2163,16 @@ void lcMainWindow::UpdateUndoRedo(const QString& UndoText, const QString& RedoTe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void lcMainWindow::ViewCameraChanged()
|
||||||
|
{
|
||||||
|
lcGLWidget* View = dynamic_cast<lcGLWidget*>(sender());
|
||||||
|
|
||||||
|
if (!View || !View->IsLastFocused())
|
||||||
|
return;
|
||||||
|
|
||||||
|
UpdateCameraMenu();
|
||||||
|
}
|
||||||
|
|
||||||
void lcMainWindow::UpdateCameraMenu()
|
void lcMainWindow::UpdateCameraMenu()
|
||||||
{
|
{
|
||||||
const lcArray<lcCamera*>& Cameras = lcGetActiveModel()->GetCameras();
|
const lcArray<lcCamera*>& Cameras = lcGetActiveModel()->GetCameras();
|
||||||
|
|
|
@ -362,6 +362,7 @@ public slots:
|
||||||
void TogglePreviewWidget(bool);
|
void TogglePreviewWidget(bool);
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
|
void ViewCameraChanged();
|
||||||
void UpdateDockWidgetActions();
|
void UpdateDockWidgetActions();
|
||||||
void UpdateGamepads();
|
void UpdateGamepads();
|
||||||
void ModelTabContextMenuRequested(const QPoint& Point);
|
void ModelTabContextMenuRequested(const QPoint& Point);
|
||||||
|
@ -384,6 +385,7 @@ protected:
|
||||||
void CreateMenus();
|
void CreateMenus();
|
||||||
void CreateToolBars();
|
void CreateToolBars();
|
||||||
void CreateStatusBar();
|
void CreateStatusBar();
|
||||||
|
View* CreateView(lcModel* Model);
|
||||||
void ToggleDockWidget(QWidget* DockWidget);
|
void ToggleDockWidget(QWidget* DockWidget);
|
||||||
void SplitView(Qt::Orientation Orientation);
|
void SplitView(Qt::Orientation Orientation);
|
||||||
void ShowSearchDialog();
|
void ShowSearchDialog();
|
||||||
|
|
|
@ -188,31 +188,6 @@ void lcPreviewWidget::UpdatePreview()
|
||||||
SetCurrentPiece(PartType, ColorCode);
|
SetCurrentPiece(PartType, ColorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcPreviewWidget::SetDefaultCamera()
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
mCamera->SetViewpoint(lcViewpoint::Home);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcPreviewWidget::SetCamera(lcCamera* Camera) // called by lcModel::DeleteModel()
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
mCamera->CopyPosition(Camera);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcPreviewWidget::ZoomExtents()
|
|
||||||
{
|
|
||||||
lcModel* ActiveModel = GetActiveModel();
|
|
||||||
if (ActiveModel)
|
|
||||||
{
|
|
||||||
ActiveModel->ZoomExtents(mCamera, float(mWidth) / float(mHeight));
|
|
||||||
Redraw();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcPreviewWidget::StartOrbitTracking() // called by viewSphere
|
void lcPreviewWidget::StartOrbitTracking() // called by viewSphere
|
||||||
{
|
{
|
||||||
mTrackTool = lcTrackTool::OrbitXY;
|
mTrackTool = lcTrackTool::OrbitXY;
|
||||||
|
@ -222,23 +197,6 @@ void lcPreviewWidget::StartOrbitTracking() // called by viewSphere
|
||||||
OnButtonDown(lcTrackButton::Left);
|
OnButtonDown(lcTrackButton::Left);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lcPreviewWidget::SetViewpoint(const lcVector3& Position)
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
{
|
|
||||||
lcCamera* OldCamera = mCamera;
|
|
||||||
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
if (OldCamera)
|
|
||||||
mCamera->CopySettings(OldCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
mCamera->SetViewpoint(Position);
|
|
||||||
|
|
||||||
Redraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcPreviewWidget::StopTracking(bool Accept)
|
void lcPreviewWidget::StopTracking(bool Accept)
|
||||||
{
|
{
|
||||||
if (mTrackButton == lcTrackButton::None)
|
if (mTrackButton == lcTrackButton::None)
|
||||||
|
|
|
@ -40,22 +40,17 @@ public:
|
||||||
return mDescription;
|
return mDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClearPreview();
|
|
||||||
void UpdatePreview();
|
|
||||||
bool SetCurrentPiece(const QString& PartType, int ColorCode);
|
|
||||||
void SetCamera(lcCamera* Camera);
|
|
||||||
void SetDefaultCamera();
|
|
||||||
void ZoomExtents();
|
|
||||||
|
|
||||||
// exclusively called from viewSphere
|
|
||||||
void SetViewpoint(const lcVector3& Position);
|
|
||||||
void StartOrbitTracking();
|
|
||||||
|
|
||||||
bool IsModel() const
|
bool IsModel() const
|
||||||
{
|
{
|
||||||
return mIsModel;
|
return mIsModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ClearPreview();
|
||||||
|
void UpdatePreview();
|
||||||
|
bool SetCurrentPiece(const QString& PartType, int ColorCode);
|
||||||
|
|
||||||
|
void StartOrbitTracking();
|
||||||
|
|
||||||
void OnDraw() override;
|
void OnDraw() override;
|
||||||
void OnLeftButtonDown() override;
|
void OnLeftButtonDown() override;
|
||||||
void OnLeftButtonUp() override;
|
void OnLeftButtonUp() override;
|
||||||
|
|
|
@ -283,7 +283,7 @@ bool lcViewSphere::OnLeftButtonUp()
|
||||||
Position[AxisIdx] = -1250.0f;
|
Position[AxisIdx] = -1250.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
mIsPreview ? mPreview->SetViewpoint(Position) : mView->SetViewpoint(Position);
|
mWidget->SetViewpoint(Position);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
138
common/view.cpp
138
common/view.cpp
|
@ -257,139 +257,10 @@ void View::RemoveCamera()
|
||||||
else
|
else
|
||||||
mCamera->SetViewpoint(lcViewpoint::Home);
|
mCamera->SetViewpoint(lcViewpoint::Home);
|
||||||
|
|
||||||
gMainWindow->UpdateCurrentCamera(-1);
|
emit CameraChanged();
|
||||||
Redraw();
|
Redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::SetCamera(lcCamera* Camera, bool ForceCopy)
|
|
||||||
{
|
|
||||||
if (Camera->IsSimple() || ForceCopy)
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
mCamera->CopyPosition(Camera);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (mCamera && mCamera->IsSimple())
|
|
||||||
delete mCamera;
|
|
||||||
|
|
||||||
mCamera = Camera;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetCamera(const char* CameraName)
|
|
||||||
{
|
|
||||||
const lcArray<lcCamera*>& Cameras = mModel->GetCameras();
|
|
||||||
|
|
||||||
for (int CameraIdx = 0; CameraIdx < Cameras.GetSize(); CameraIdx++)
|
|
||||||
{
|
|
||||||
if (qstricmp(CameraName, Cameras[CameraIdx]->m_strName) == 0)
|
|
||||||
{
|
|
||||||
SetCameraIndex(CameraIdx);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetCameraIndex(int Index)
|
|
||||||
{
|
|
||||||
const lcArray<lcCamera*>& Cameras = mModel->GetCameras();
|
|
||||||
|
|
||||||
if (Index >= Cameras.GetSize())
|
|
||||||
return;
|
|
||||||
|
|
||||||
lcCamera* Camera = Cameras[Index];
|
|
||||||
SetCamera(Camera, false);
|
|
||||||
|
|
||||||
gMainWindow->UpdateCurrentCamera(Index);
|
|
||||||
Redraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetViewpoint(lcViewpoint Viewpoint)
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
{
|
|
||||||
lcCamera* OldCamera = mCamera;
|
|
||||||
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
if (OldCamera)
|
|
||||||
mCamera->CopySettings(OldCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
mCamera->SetViewpoint(Viewpoint);
|
|
||||||
ZoomExtents();
|
|
||||||
Redraw();
|
|
||||||
|
|
||||||
gMainWindow->UpdateCurrentCamera(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetViewpoint(const lcVector3& Position)
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
{
|
|
||||||
lcCamera* OldCamera = mCamera;
|
|
||||||
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
if (OldCamera)
|
|
||||||
mCamera->CopySettings(OldCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
mCamera->SetViewpoint(Position);
|
|
||||||
ZoomExtents();
|
|
||||||
Redraw();
|
|
||||||
|
|
||||||
gMainWindow->UpdateCurrentCamera(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetViewpoint(const lcVector3& Position, const lcVector3& Target, const lcVector3& Up)
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
{
|
|
||||||
lcCamera* OldCamera = mCamera;
|
|
||||||
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
if (OldCamera)
|
|
||||||
mCamera->CopySettings(OldCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
mCamera->SetViewpoint(Position, Target, Up);
|
|
||||||
Redraw();
|
|
||||||
|
|
||||||
gMainWindow->UpdateCurrentCamera(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetCameraAngles(float Latitude, float Longitude)
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
{
|
|
||||||
lcCamera* OldCamera = mCamera;
|
|
||||||
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
if (OldCamera)
|
|
||||||
mCamera->CopySettings(OldCamera);
|
|
||||||
}
|
|
||||||
|
|
||||||
mCamera->SetAngles(Latitude, Longitude, 1.0f);
|
|
||||||
ZoomExtents();
|
|
||||||
Redraw();
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::SetDefaultCamera()
|
|
||||||
{
|
|
||||||
if (!mCamera || !mCamera->IsSimple())
|
|
||||||
mCamera = new lcCamera(true);
|
|
||||||
|
|
||||||
mCamera->SetViewpoint(lcViewpoint::Home);
|
|
||||||
|
|
||||||
gMainWindow->UpdateCurrentCamera(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
lcMatrix44 View::GetTileProjectionMatrix(int CurrentRow, int CurrentColumn, int CurrentTileWidth, int CurrentTileHeight) const
|
lcMatrix44 View::GetTileProjectionMatrix(int CurrentRow, int CurrentColumn, int CurrentTileWidth, int CurrentTileHeight) const
|
||||||
{
|
{
|
||||||
int ImageWidth = mRenderImage.width();
|
int ImageWidth = mRenderImage.width();
|
||||||
|
@ -1791,13 +1662,6 @@ void View::LookAt()
|
||||||
ActiveModel->LookAt(mCamera);
|
ActiveModel->LookAt(mCamera);
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::ZoomExtents()
|
|
||||||
{
|
|
||||||
lcModel* ActiveModel = GetActiveModel();
|
|
||||||
if (ActiveModel)
|
|
||||||
ActiveModel->ZoomExtents(mCamera, (float)mWidth / (float)mHeight);
|
|
||||||
}
|
|
||||||
|
|
||||||
void View::MoveCamera(const lcVector3& Direction)
|
void View::MoveCamera(const lcVector3& Direction)
|
||||||
{
|
{
|
||||||
lcModel* ActiveModel = GetActiveModel();
|
lcModel* ActiveModel = GetActiveModel();
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
class View : public lcGLWidget
|
class View : public lcGLWidget
|
||||||
{
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
View(lcModel* Model);
|
View(lcModel* Model);
|
||||||
~View();
|
~View();
|
||||||
|
@ -53,19 +55,10 @@ public:
|
||||||
|
|
||||||
void SetProjection(bool Ortho);
|
void SetProjection(bool Ortho);
|
||||||
void LookAt();
|
void LookAt();
|
||||||
void ZoomExtents();
|
|
||||||
void MoveCamera(const lcVector3& Direction);
|
void MoveCamera(const lcVector3& Direction);
|
||||||
void Zoom(float Amount);
|
void Zoom(float Amount);
|
||||||
|
|
||||||
void RemoveCamera();
|
void RemoveCamera();
|
||||||
void SetCamera(lcCamera* Camera, bool ForceCopy);
|
|
||||||
void SetCamera(const char* CameraName);
|
|
||||||
void SetCameraIndex(int Index);
|
|
||||||
void SetViewpoint(lcViewpoint Viewpoint);
|
|
||||||
void SetViewpoint(const lcVector3& Position);
|
|
||||||
void SetViewpoint(const lcVector3& Position, const lcVector3& Target, const lcVector3& Up);
|
|
||||||
void SetCameraAngles(float Latitude, float Longitude);
|
|
||||||
void SetDefaultCamera();
|
|
||||||
void ShowContextMenu() const;
|
void ShowContextMenu() const;
|
||||||
|
|
||||||
lcVector3 GetMoveDirection(const lcVector3& Direction) const;
|
lcVector3 GetMoveDirection(const lcVector3& Direction) const;
|
||||||
|
|
Loading…
Reference in a new issue