From 95bf7e43ffbc9dfdd2c57420ee3688be73a4ed80 Mon Sep 17 00:00:00 2001 From: Leonardo Zide Date: Wed, 23 Dec 2020 18:45:34 -0800 Subject: [PATCH] Rotate view around the minifig center. --- common/lc_model.cpp | 6 ++++++ common/view.cpp | 42 ++++++++++++++++++++---------------------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/common/lc_model.cpp b/common/lc_model.cpp index 6a3c1f39..f6175ac5 100644 --- a/common/lc_model.cpp +++ b/common/lc_model.cpp @@ -4442,6 +4442,8 @@ void lcModel::SetMinifig(const lcMinifig& Minifig) { DeleteModel(); + lcArray Pieces(LC_MFW_NUMITEMS); + for (int PartIdx = 0; PartIdx < LC_MFW_NUMITEMS; PartIdx++) { if (!Minifig.Parts[PartIdx]) @@ -4453,7 +4455,11 @@ void lcModel::SetMinifig(const lcMinifig& Minifig) Piece->SetColorIndex(Minifig.Colors[PartIdx]); AddPiece(Piece); Piece->UpdatePosition(1); + + Pieces.Add(Piece); } + + SetSelectionAndFocus(Pieces, nullptr, 0, false); } void lcModel::UpdateInterface() diff --git a/common/view.cpp b/common/view.cpp index 0d7f3afd..304ee601 100644 --- a/common/view.cpp +++ b/common/view.cpp @@ -611,7 +611,7 @@ void View::OnDraw() return; const lcPreferences& Preferences = lcGetPreferences(); - const bool DrawInterface = mWidget != nullptr; + const bool DrawInterface = mWidget != nullptr && mViewType == lcViewType::View; mScene->SetAllowLOD(Preferences.mAllowLOD && mWidget != nullptr); mScene->SetLODDistance(Preferences.mMeshLODDistance); @@ -638,7 +638,7 @@ void View::OnDraw() } } - if (DrawInterface && mViewType == lcViewType::View) + if (DrawInterface) mScene->SetPreTranslucentCallback([this]() { DrawGrid(); }); mScene->End(); @@ -730,31 +730,29 @@ void View::OnDraw() mContext->SetLineWidth(1.0f); - if (mViewType == lcViewType::View) - { - if (Preferences.mDrawAxes) - DrawAxes(); + if (Preferences.mDrawAxes) + DrawAxes(); - lcTool Tool = gMainWindow->GetTool(); - lcModel* ActiveModel = GetActiveModel(); + lcTool Tool = gMainWindow->GetTool(); + lcModel* ActiveModel = GetActiveModel(); - if ((Tool == lcTool::Select || Tool == lcTool::Move) && mTrackButton == lcTrackButton::None && ActiveModel->AnyObjectsSelected()) - DrawSelectMoveOverlay(); - else if (GetCurrentTool() == lcTool::Move && mTrackButton != lcTrackButton::None) - DrawSelectMoveOverlay(); - else if ((Tool == lcTool::Rotate || (Tool == lcTool::Select && mTrackButton != lcTrackButton::None && mTrackTool >= lcTrackTool::RotateX && mTrackTool <= lcTrackTool::RotateXYZ)) && ActiveModel->AnyPiecesSelected()) - DrawRotateOverlay(); - else if ((mTrackTool == lcTrackTool::Select || mTrackTool == lcTrackTool::ZoomRegion) && mTrackButton != lcTrackButton::None) - DrawSelectZoomRegionOverlay(); - else if (Tool == lcTool::RotateView && mTrackButton == lcTrackButton::None) - DrawRotateViewOverlay(); + if ((Tool == lcTool::Select || Tool == lcTool::Move) && mTrackButton == lcTrackButton::None && ActiveModel->AnyObjectsSelected()) + DrawSelectMoveOverlay(); + else if (GetCurrentTool() == lcTool::Move && mTrackButton != lcTrackButton::None) + DrawSelectMoveOverlay(); + else if ((Tool == lcTool::Rotate || (Tool == lcTool::Select && mTrackButton != lcTrackButton::None && mTrackTool >= lcTrackTool::RotateX && mTrackTool <= lcTrackTool::RotateXYZ)) && ActiveModel->AnyPiecesSelected()) + DrawRotateOverlay(); + else if ((mTrackTool == lcTrackTool::Select || mTrackTool == lcTrackTool::ZoomRegion) && mTrackButton != lcTrackButton::None) + DrawSelectZoomRegionOverlay(); + else if (Tool == lcTool::RotateView && mTrackButton == lcTrackButton::None) + DrawRotateViewOverlay(); - mViewSphere->Draw(); - } - - DrawViewport(); + mViewSphere->Draw(); } + if (mWidget != nullptr) + DrawViewport(); + mContext->ClearResources(); }