diff --git a/common/lc_model.cpp b/common/lc_model.cpp index f8d44524..6a3a2d7b 100644 --- a/common/lc_model.cpp +++ b/common/lc_model.cpp @@ -1352,6 +1352,12 @@ void lcModel::GetScene(lcScene* Scene, const lcCamera* ViewCamera, bool AllowHig if (Light->IsVisible()) Scene->AddInterfaceObject(Light.get()); } + + if (Scene->GetDrawInsertPreview()) + { + for (const lcInsertPieceInfo& PreviewPieceInfoTransform : mPreviewInsertPieceInfo) + PreviewPieceInfoTransform.Info->AddRenderMeshes(Scene, PreviewPieceInfoTransform.Transform, PreviewPieceInfoTransform.ColorIndex, lcRenderMeshState::Focused, false); + } } void lcModel::AddSubModelRenderMeshes(lcScene* Scene, const lcMatrix44& WorldMatrix, int DefaultColorIndex, lcRenderMeshState RenderMeshState, bool ParentActive) const @@ -1366,6 +1372,12 @@ void lcModel::AddSubModelRenderMeshes(lcScene* Scene, const lcMatrix44& WorldMat Piece->AddSubModelRenderMeshes(Scene, WorldMatrix, DefaultColorIndex, RenderMeshState, ParentActive); } } + + if (Scene->GetDrawInsertPreview()) + { + for (const lcInsertPieceInfo& PreviewPieceInfoTransform : mPreviewInsertPieceInfo) + PreviewPieceInfoTransform.Info->AddRenderMeshes(Scene, lcMul(PreviewPieceInfoTransform.Transform, WorldMatrix), PreviewPieceInfoTransform.ColorIndex, lcRenderMeshState::Focused, false); + } } QImage lcModel::GetStepImage(bool Zoom, int Width, int Height, lcStep Step) @@ -4965,7 +4977,7 @@ void lcModel::EndMouseTool(lcTool Tool, lcView* View, bool Accept) } } -bool lcModel::InsertPieceToolClicked(std::optional Transform) +bool lcModel::InsertPieceToolClicked() { if (mPreviewInsertPieceInfo.empty()) return false; @@ -4979,14 +4991,7 @@ bool lcModel::InsertPieceToolClicked(std::optional Transform) { Piece = new lcPiece(InsertPieceInfo.Info); - lcMatrix44 PieceTransform; - - if (Transform.has_value()) - PieceTransform = lcMul(InsertPieceInfo.Transform, Transform.value()); - else - PieceTransform = InsertPieceInfo.Transform; - - Piece->Initialize(PieceTransform, mCurrentStep); + Piece->Initialize(InsertPieceInfo.Transform, mCurrentStep); Piece->SetColorIndex(InsertPieceInfo.ColorIndex); Piece->UpdatePosition(mCurrentStep); diff --git a/common/lc_model.h b/common/lc_model.h index 1c96f994..0389d133 100644 --- a/common/lc_model.h +++ b/common/lc_model.h @@ -351,7 +351,7 @@ public: void BeginMouseTool(lcTool Tool, lcView* View); void EndMouseTool(lcTool Tool, lcView* View, bool Accept); - bool InsertPieceToolClicked(std::optional Transform); + bool InsertPieceToolClicked(); void InsertCameraToolClicked(const lcVector3& Position); void InsertLightToolClicked(const lcVector3& Position, lcLightType LightType); void UpdateMoveTool(const lcVector3& Distance, bool AllowRelative, bool AlternateButtonDrag); diff --git a/common/lc_scene.cpp b/common/lc_scene.cpp index 72dcb164..dad41270 100644 --- a/common/lc_scene.cpp +++ b/common/lc_scene.cpp @@ -10,13 +10,8 @@ lcScene::lcScene() { - mActiveSubmodelInstance = nullptr; - mDrawInterface = false; mShadingMode = lcShadingMode::DefaultLights; - mAllowLOD = true; mMeshLODDistance = 250.0f; - mHasFadedParts = false; - mPreTranslucentCallback = nullptr; } void lcScene::Begin(const lcMatrix44& ViewMatrix) diff --git a/common/lc_scene.h b/common/lc_scene.h index 046cd30d..ed8262dc 100644 --- a/common/lc_scene.h +++ b/common/lc_scene.h @@ -58,6 +58,16 @@ public: return mDrawInterface; } + void SetDrawInsertPreview(bool DrawInsertPreview) + { + mDrawInsertPreview = DrawInsertPreview; + } + + bool GetDrawInsertPreview() const + { + return mDrawInsertPreview; + } + void SetShadingMode(lcShadingMode ShadingMode) { mShadingMode = ShadingMode; @@ -102,18 +112,19 @@ protected: lcMatrix44 mViewMatrix; lcMatrix44 mActiveSubmodelTransform; - lcPiece* mActiveSubmodelInstance; + lcPiece* mActiveSubmodelInstance = nullptr; lcShadingMode mShadingMode; - bool mDrawInterface; - bool mAllowLOD; + bool mDrawInterface = false; + bool mDrawInsertPreview = false; + bool mAllowLOD = true; float mMeshLODDistance; lcVector4 mFadeColor; lcVector4 mHighlightColor; - bool mHasFadedParts; - bool mTranslucentFade; + bool mHasFadedParts = false; + bool mTranslucentFade = false; - std::function mPreTranslucentCallback; + std::function mPreTranslucentCallback = nullptr; std::vector mRenderMeshes; std::vector mOpaqueMeshes; std::vector mTranslucentMeshes; diff --git a/common/lc_view.cpp b/common/lc_view.cpp index ee626837..26a0a545 100644 --- a/common/lc_view.cpp +++ b/common/lc_view.cpp @@ -479,15 +479,9 @@ void lcView::UpdatePiecePreview() if (PreviewInfo) { std::tie(InsertPieceInfo, IsConnection) = GetMouseInsertPieceInfo(false, true, PreviewInfo, nullptr); - - if (GetActiveModel() != mModel) - { - for (lcInsertPieceInfo& InfoTransform : InsertPieceInfo) - InfoTransform.Transform = lcMul(InfoTransform.Transform, mActiveSubmodelTransform); - } } - mModel->SetPreviewInsertPieceInfo(std::move(InsertPieceInfo)); + GetActiveModel()->SetPreviewInsertPieceInfo(std::move(InsertPieceInfo)); } std::pair, bool> lcView::GetMouseInsertPieceInfo(bool IgnoreSelected, bool AllowNewPieces, PieceInfo* Info, lcPiece* MovingPiece) const @@ -877,16 +871,11 @@ void lcView::OnDraw() mScene->SetActiveSubmodelInstance(mActiveSubmodelInstance, mActiveSubmodelTransform); mScene->SetDrawInterface(DrawInterface); - - mModel->GetScene(mScene.get(), mCamera, Preferences.mHighlightNewParts, Preferences.mFadeSteps); - + bool DrawInsertPreview = DrawInterface && std::any_of(mViews.begin(), mViews.end(), [](lcView* View){ return View->mTrackTool == lcTrackTool::Insert; }); - - if (DrawInsertPreview) - { - for (const lcInsertPieceInfo& PreviewPieceInfoTransform : mModel->GetPreviewInsertPieceInfo()) - PreviewPieceInfoTransform.Info->AddRenderMeshes(mScene.get(), PreviewPieceInfoTransform.Transform, PreviewPieceInfoTransform.ColorIndex, lcRenderMeshState::Focused, false); - } + mScene->SetDrawInsertPreview(DrawInsertPreview); + + mModel->GetScene(mScene.get(), mCamera, Preferences.mHighlightNewParts, Preferences.mFadeSteps); if (DrawInterface) mScene->SetPreTranslucentCallback([this]() { DrawGrid(); }); @@ -1731,7 +1720,7 @@ void lcView::EndDrag(bool Accept) break; case lcDragState::Piece: - ActiveModel->InsertPieceToolClicked(std::nullopt); + ActiveModel->InsertPieceToolClicked(); break; case lcDragState::Color: @@ -2518,12 +2507,7 @@ void lcView::OnButtonDown(lcTrackButton TrackButton) { UpdatePiecePreview(); - std::optional Transform; - - if (GetActiveModel() != mModel) - Transform = lcMatrix44AffineInverse(mActiveSubmodelTransform); - - if (!ActiveModel->InsertPieceToolClicked(Transform)) + if (!ActiveModel->InsertPieceToolClicked()) break; if ((mMouseModifiers & Qt::ControlModifier) == 0)