From 2dbc7bc1cac7ec46ee142213e8be2b85e373fef3 Mon Sep 17 00:00:00 2001 From: Leonardo Zide Date: Thu, 17 Apr 2025 16:14:51 -0700 Subject: [PATCH] Fixed dragging over another track always picking a different connection. --- common/lc_model.cpp | 10 +++++----- common/lc_model.h | 2 +- common/lc_traintrack.cpp | 2 +- common/lc_view.cpp | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/common/lc_model.cpp b/common/lc_model.cpp index 85a72fe3..166cb825 100644 --- a/common/lc_model.cpp +++ b/common/lc_model.cpp @@ -1333,7 +1333,7 @@ void lcModel::GetScene(lcScene* Scene, const lcCamera* ViewCamera, bool AllowHig if (Scene->GetDrawInterface() && !Scene->GetActiveSubmodelInstance()) { if (FocusPiece) - UpdateTrainTrackConnections(FocusPiece); + UpdateTrainTrackConnections(FocusPiece, false); for (const std::unique_ptr& Camera : mCameras) if (Camera.get() != ViewCamera && Camera->IsVisible()) @@ -1352,7 +1352,7 @@ void lcModel::AddSubModelRenderMeshes(lcScene* Scene, const lcMatrix44& WorldMat if (Piece->IsVisibleInSubModel()) { if (Piece->IsFocused()) - UpdateTrainTrackConnections(Piece.get()); + UpdateTrainTrackConnections(Piece.get(), false); Piece->AddSubModelRenderMeshes(Scene, WorldMatrix, DefaultColorIndex, RenderMeshState, ParentActive); } @@ -2508,7 +2508,7 @@ void lcModel::RotateFocusedTrainTrack(int Direction) SaveCheckpoint(tr("Rotating")); } -void lcModel::UpdateTrainTrackConnections(lcPiece* TrackPiece) const +void lcModel::UpdateTrainTrackConnections(lcPiece* TrackPiece, bool IgnoreSelected) const { if (!TrackPiece) return; @@ -2523,7 +2523,7 @@ void lcModel::UpdateTrainTrackConnections(lcPiece* TrackPiece) const for (const std::unique_ptr& Piece : mPieces) { - if (Piece.get() == TrackPiece || !Piece->mPieceInfo->GetTrainTrackInfo()) + if (Piece.get() == TrackPiece || !Piece->mPieceInfo->GetTrainTrackInfo() || (IgnoreSelected && Piece->IsSelected())) continue; for (int ConnectionIndex = 0; ConnectionIndex < ConnectionCount; ConnectionIndex++) @@ -4461,7 +4461,7 @@ void lcModel::InsertPieceToolClicked(const std::vector& Pi gMainWindow->UpdateTimeline(false, false); ClearSelectionAndSetFocus(Piece, LC_PIECE_SECTION_POSITION, false); - UpdateTrainTrackConnections(Piece); + UpdateTrainTrackConnections(Piece, false); SaveCheckpoint(tr("Insert")); } diff --git a/common/lc_model.h b/common/lc_model.h index e2d9c937..643413b9 100644 --- a/common/lc_model.h +++ b/common/lc_model.h @@ -267,7 +267,7 @@ public: void Paste(bool PasteToCurrentStep); void DuplicateSelectedPieces(); void PaintSelectedPieces(); - void UpdateTrainTrackConnections(lcPiece* TrackPiece) const; + void UpdateTrainTrackConnections(lcPiece* TrackPiece, bool IgnoreSelected) const; void GetScene(lcScene* Scene, const lcCamera* ViewCamera, bool AllowHighlight, bool AllowFade) const; void AddSubModelRenderMeshes(lcScene* Scene, const lcMatrix44& WorldMatrix, int DefaultColorIndex, lcRenderMeshState RenderMeshState, bool ParentActive) const; diff --git a/common/lc_traintrack.cpp b/common/lc_traintrack.cpp index 4975d5ec..631f4e7e 100644 --- a/common/lc_traintrack.cpp +++ b/common/lc_traintrack.cpp @@ -7,7 +7,7 @@ #include "lc_application.h" // todo: -// add 4.5v tracks +// when moving existing pieces, lcView::OnMouseMove calls UpdateMoveTool which only takes a position and can't rotate curves // hide some of the 12v tracks to avoid bloat // better insert gizmo mouse detection // part picker preview should use the json colors diff --git a/common/lc_view.cpp b/common/lc_view.cpp index 3a83f353..94190b25 100644 --- a/common/lc_view.cpp +++ b/common/lc_view.cpp @@ -338,7 +338,7 @@ void lcView::ShowTrainTrackPopup() Piece = ActiveModel->AddPiece(Info, mTrackToolSection); if (Piece) - ActiveModel->UpdateTrainTrackConnections(Piece); + ActiveModel->UpdateTrainTrackConnections(Piece, false); } mWidget->UpdateMousePosition(); @@ -500,7 +500,7 @@ std::vector lcView::GetPieceInsertTransform(bool IgnoreSel if (RayTrackInfo && InfoTrackInfo) { - ActiveModel->UpdateTrainTrackConnections(MousePiece); + ActiveModel->UpdateTrainTrackConnections(MousePiece, IgnoreSelected); quint32 FocusSection = MousePiece->GetFocusSection(); std::vector TrainTracks = lcTrainTrackInfo::GetPieceInsertTransforms(MousePiece, Info, FocusSection);