mirror of
https://github.com/leozide/leocad
synced 2024-12-26 21:58:44 +01:00
Code cleanup.
This commit is contained in:
parent
dcfda1e22b
commit
f80b5c95e1
5 changed files with 48 additions and 28 deletions
|
@ -2289,7 +2289,20 @@ void lcModel::AddPiece()
|
||||||
|
|
||||||
if (Last)
|
if (Last)
|
||||||
{
|
{
|
||||||
if (!PieceInfo->GetTrainTrackInfo() || !Last->mPieceInfo->GetTrainTrackInfo())
|
bool TransformValid = false;
|
||||||
|
|
||||||
|
if (PieceInfo->GetTrainTrackInfo() && Last->mPieceInfo->GetTrainTrackInfo())
|
||||||
|
{
|
||||||
|
std::optional<lcMatrix44> TrainTrackTransform = lcTrainTrackInfo::GetPieceInsertTransform(Last, PieceInfo);
|
||||||
|
|
||||||
|
if (TrainTrackTransform)
|
||||||
|
{
|
||||||
|
TransformValid = true;
|
||||||
|
WorldMatrix = TrainTrackTransform.value();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!TransformValid)
|
||||||
{
|
{
|
||||||
const lcBoundingBox& LastBoundingBox = Last->GetBoundingBox();
|
const lcBoundingBox& LastBoundingBox = Last->GetBoundingBox();
|
||||||
lcVector3 Dist(0, 0, LastBoundingBox.Max.z - PieceInfoBoundingBox.Min.z);
|
lcVector3 Dist(0, 0, LastBoundingBox.Max.z - PieceInfoBoundingBox.Min.z);
|
||||||
|
@ -2298,14 +2311,6 @@ void lcModel::AddPiece()
|
||||||
WorldMatrix = Last->mModelWorld;
|
WorldMatrix = Last->mModelWorld;
|
||||||
WorldMatrix.SetTranslation(lcMul31(Dist, Last->mModelWorld));
|
WorldMatrix.SetTranslation(lcMul31(Dist, Last->mModelWorld));
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
lcTrainTrackInfo* CurrentTrackInfo = Last->mPieceInfo->GetTrainTrackInfo();
|
|
||||||
std::optional<lcMatrix44> TrainTrackTransform = CurrentTrackInfo->GetPieceInsertPosition(Last, PieceInfo);
|
|
||||||
|
|
||||||
if (TrainTrackTransform)
|
|
||||||
WorldMatrix = TrainTrackTransform.value();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -71,7 +71,7 @@ void lcTrainTrackInit(lcPiecesLibrary* Library)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::pair<PieceInfo*, lcMatrix44> lcTrainTrackInfo::GetPieceInsertPosition(lcPiece* Piece, quint32 ConnectionIndex, lcTrainTrackType TrainTrackType) const
|
std::pair<PieceInfo*, lcMatrix44> lcTrainTrackInfo::GetPieceInsertTransform(lcPiece* Piece, quint32 ConnectionIndex, lcTrainTrackType TrainTrackType) const
|
||||||
{
|
{
|
||||||
if (ConnectionIndex >= mConnections.size())
|
if (ConnectionIndex >= mConnections.size())
|
||||||
return { nullptr, lcMatrix44Identity() };
|
return { nullptr, lcMatrix44Identity() };
|
||||||
|
@ -111,36 +111,51 @@ std::pair<PieceInfo*, lcMatrix44> lcTrainTrackInfo::GetPieceInsertPosition(lcPie
|
||||||
return { Info, Transform };
|
return { Info, Transform };
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<lcMatrix44> lcTrainTrackInfo::GetPieceInsertPosition(lcPiece* Piece, PieceInfo* Info) const
|
std::optional<lcMatrix44> lcTrainTrackInfo::GetPieceInsertTransform(lcPiece* CurrentPiece, PieceInfo* Info)
|
||||||
{
|
{
|
||||||
quint32 FocusSection = Piece->GetFocusSection();
|
if (!CurrentPiece || !Info)
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
|
const lcTrainTrackInfo* CurrentTrackInfo = CurrentPiece->mPieceInfo->GetTrainTrackInfo();
|
||||||
|
|
||||||
|
if (!CurrentTrackInfo || CurrentTrackInfo->GetConnections().empty())
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
|
const quint32 FocusSection = CurrentPiece->GetFocusSection();
|
||||||
quint32 ConnectionIndex = 0;
|
quint32 ConnectionIndex = 0;
|
||||||
|
|
||||||
if (FocusSection > LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST)
|
if (FocusSection == LC_PIECE_SECTION_POSITION || FocusSection == LC_PIECE_SECTION_INVALID)
|
||||||
{
|
{
|
||||||
|
// todo: search model for open connection
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (FocusSection < LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST)
|
||||||
|
return std::nullopt;
|
||||||
|
|
||||||
ConnectionIndex = FocusSection - LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST;
|
ConnectionIndex = FocusSection - LC_PIECE_SECTION_TRAIN_TRACK_CONNECTION_FIRST;
|
||||||
|
|
||||||
if (ConnectionIndex >= mConnections.size())
|
if (ConnectionIndex >= CurrentTrackInfo->GetConnections().size())
|
||||||
ConnectionIndex = 0;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
lcTrainTrackInfo* TrainTrackInfo = Info->GetTrainTrackInfo();
|
lcTrainTrackInfo* NewTrackInfo = Info->GetTrainTrackInfo();
|
||||||
|
|
||||||
if (!TrainTrackInfo || TrainTrackInfo->mConnections.empty())
|
if (!NewTrackInfo || NewTrackInfo->mConnections.empty())
|
||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
|
|
||||||
lcMatrix44 Transform;
|
lcMatrix44 Transform;
|
||||||
|
|
||||||
// if (TrainTrackType != lcTrainTrackType::Left)
|
// if (TrainTrackType != lcTrainTrackType::Left)
|
||||||
Transform = TrainTrackInfo->mConnections[0].Transform;
|
Transform = NewTrackInfo->mConnections[0].Transform;
|
||||||
// else
|
// else
|
||||||
// {
|
// {
|
||||||
// Transform = lcMatrix44AffineInverse(TrainTrackInfo->mConnections[0].Transform);
|
// Transform = lcMatrix44AffineInverse(TrainTrackInfo->mConnections[0].Transform);
|
||||||
// Transform = lcMul(Transform, lcMatrix44RotationZ(LC_PI));
|
// Transform = lcMul(Transform, lcMatrix44RotationZ(LC_PI));
|
||||||
// }
|
// }
|
||||||
|
|
||||||
Transform = lcMul(Transform, mConnections[ConnectionIndex].Transform);
|
Transform = lcMul(Transform, CurrentTrackInfo->GetConnections()[ConnectionIndex].Transform);
|
||||||
Transform = lcMul(Transform, Piece->mModelWorld);
|
Transform = lcMul(Transform, CurrentPiece->mModelWorld);
|
||||||
|
|
||||||
return Transform;
|
return Transform;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,8 @@ class lcTrainTrackInfo
|
||||||
public:
|
public:
|
||||||
lcTrainTrackInfo() = default;
|
lcTrainTrackInfo() = default;
|
||||||
|
|
||||||
std::pair<PieceInfo*, lcMatrix44> GetPieceInsertPosition(lcPiece* Piece, quint32 ConnectionIndex, lcTrainTrackType TrainTrackType) const;
|
std::pair<PieceInfo*, lcMatrix44> GetPieceInsertTransform(lcPiece* Piece, quint32 ConnectionIndex, lcTrainTrackType TrainTrackType) const;
|
||||||
std::optional<lcMatrix44> GetPieceInsertPosition(lcPiece* Piece, PieceInfo* Info) const;
|
static std::optional<lcMatrix44> GetPieceInsertTransform(lcPiece* CurrentPiece, PieceInfo* Info);
|
||||||
|
|
||||||
void AddConnection(const lcTrainTrackConnection& TrainTrackConnection)
|
void AddConnection(const lcTrainTrackConnection& TrainTrackConnection)
|
||||||
{
|
{
|
||||||
|
|
|
@ -437,7 +437,7 @@ void lcView::UpdatePiecePreview()
|
||||||
quint32 ConnectionIndex = mTrackToolSection & 0xff;
|
quint32 ConnectionIndex = mTrackToolSection & 0xff;
|
||||||
lcTrainTrackType TrainTrackType = static_cast<lcTrainTrackType>((mTrackToolSection >> 8) & 0xff);
|
lcTrainTrackType TrainTrackType = static_cast<lcTrainTrackType>((mTrackToolSection >> 8) & 0xff);
|
||||||
|
|
||||||
std::tie(PreviewInfo, mPiecePreviewTransform) = TrainTrackInfo->GetPieceInsertPosition(Piece, ConnectionIndex, TrainTrackType);
|
std::tie(PreviewInfo, mPiecePreviewTransform) = TrainTrackInfo->GetPieceInsertTransform(Piece, ConnectionIndex, TrainTrackType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -447,7 +447,7 @@ void lcView::UpdatePiecePreview()
|
||||||
|
|
||||||
if (PreviewInfo)
|
if (PreviewInfo)
|
||||||
{
|
{
|
||||||
mPiecePreviewTransform = GetPieceInsertPosition(false, PreviewInfo);
|
mPiecePreviewTransform = GetPieceInsertTransform(false, PreviewInfo);
|
||||||
|
|
||||||
if (GetActiveModel() != mModel)
|
if (GetActiveModel() != mModel)
|
||||||
mPiecePreviewTransform = lcMul(mPiecePreviewTransform, mActiveSubmodelTransform);
|
mPiecePreviewTransform = lcMul(mPiecePreviewTransform, mActiveSubmodelTransform);
|
||||||
|
@ -468,7 +468,7 @@ void lcView::UpdatePiecePreview()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lcMatrix44 lcView::GetPieceInsertPosition(bool IgnoreSelected, PieceInfo* Info) const
|
lcMatrix44 lcView::GetPieceInsertTransform(bool IgnoreSelected, PieceInfo* Info) const
|
||||||
{
|
{
|
||||||
lcModel* ActiveModel = GetActiveModel();
|
lcModel* ActiveModel = GetActiveModel();
|
||||||
|
|
||||||
|
@ -1705,7 +1705,7 @@ void lcView::EndDrag(bool Accept)
|
||||||
PieceInfo* Info = gMainWindow->GetCurrentPieceInfo();
|
PieceInfo* Info = gMainWindow->GetCurrentPieceInfo();
|
||||||
|
|
||||||
if (Info)
|
if (Info)
|
||||||
ActiveModel->InsertPieceToolClicked(Info, GetPieceInsertPosition(false, Info));
|
ActiveModel->InsertPieceToolClicked(Info, GetPieceInsertTransform(false, Info));
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
case lcDragState::Color:
|
case lcDragState::Color:
|
||||||
|
@ -2855,7 +2855,7 @@ void lcView::OnMouseMove()
|
||||||
}
|
}
|
||||||
else if (mTrackTool == lcTrackTool::MoveXYZ && mMouseDownPiece)
|
else if (mTrackTool == lcTrackTool::MoveXYZ && mMouseDownPiece)
|
||||||
{
|
{
|
||||||
lcMatrix44 NewPosition = GetPieceInsertPosition(true, mMouseDownPiece);
|
lcMatrix44 NewPosition = GetPieceInsertTransform(true, mMouseDownPiece);
|
||||||
lcVector3 Distance = NewPosition.GetTranslation() - mMouseDownPosition;
|
lcVector3 Distance = NewPosition.GetTranslation() - mMouseDownPosition;
|
||||||
ActiveModel->UpdateMoveTool(Distance, false, mTrackButton != lcTrackButton::Left);
|
ActiveModel->UpdateMoveTool(Distance, false, mTrackButton != lcTrackButton::Left);
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,7 +260,7 @@ public:
|
||||||
float GetOverlayScale() const;
|
float GetOverlayScale() const;
|
||||||
lcVector3 GetMoveDirection(const lcVector3& Direction) const;
|
lcVector3 GetMoveDirection(const lcVector3& Direction) const;
|
||||||
void UpdatePiecePreview();
|
void UpdatePiecePreview();
|
||||||
lcMatrix44 GetPieceInsertPosition(bool IgnoreSelected, PieceInfo* Info) const;
|
lcMatrix44 GetPieceInsertTransform(bool IgnoreSelected, PieceInfo* Info) const;
|
||||||
lcVector3 GetCameraLightInsertPosition() const;
|
lcVector3 GetCameraLightInsertPosition() const;
|
||||||
void GetRayUnderPointer(lcVector3& Start, lcVector3& End) const;
|
void GetRayUnderPointer(lcVector3& Start, lcVector3& End) const;
|
||||||
lcObjectSection FindObjectUnderPointer(bool PiecesOnly, bool IgnoreSelected) const;
|
lcObjectSection FindObjectUnderPointer(bool PiecesOnly, bool IgnoreSelected) const;
|
||||||
|
|
Loading…
Reference in a new issue