mirror of
https://github.com/leozide/leocad.git
synced 2026-07-27 19:56:49 +00:00
Fix drag and drop pieces into inline edit models.
This commit is contained in:
+14
-9
@@ -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<lcMatrix44> Transform)
|
||||
bool lcModel::InsertPieceToolClicked()
|
||||
{
|
||||
if (mPreviewInsertPieceInfo.empty())
|
||||
return false;
|
||||
@@ -4979,14 +4991,7 @@ bool lcModel::InsertPieceToolClicked(std::optional<lcMatrix44> 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);
|
||||
|
||||
|
||||
+1
-1
@@ -351,7 +351,7 @@ public:
|
||||
|
||||
void BeginMouseTool(lcTool Tool, lcView* View);
|
||||
void EndMouseTool(lcTool Tool, lcView* View, bool Accept);
|
||||
bool InsertPieceToolClicked(std::optional<lcMatrix44> Transform);
|
||||
bool InsertPieceToolClicked();
|
||||
void InsertCameraToolClicked(const lcVector3& Position);
|
||||
void InsertLightToolClicked(const lcVector3& Position, lcLightType LightType);
|
||||
void UpdateMoveTool(const lcVector3& Distance, bool AllowRelative, bool AlternateButtonDrag);
|
||||
|
||||
@@ -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)
|
||||
|
||||
+17
-6
@@ -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<void()> mPreTranslucentCallback;
|
||||
std::function<void()> mPreTranslucentCallback = nullptr;
|
||||
std::vector<lcRenderMesh> mRenderMeshes;
|
||||
std::vector<int> mOpaqueMeshes;
|
||||
std::vector<lcTranslucentMeshInstance> mTranslucentMeshes;
|
||||
|
||||
+5
-21
@@ -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<std::vector<lcInsertPieceInfo>, bool> lcView::GetMouseInsertPieceInfo(bool IgnoreSelected, bool AllowNewPieces, PieceInfo* Info, lcPiece* MovingPiece) const
|
||||
@@ -878,15 +872,10 @@ 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; });
|
||||
mScene->SetDrawInsertPreview(DrawInsertPreview);
|
||||
|
||||
if (DrawInsertPreview)
|
||||
{
|
||||
for (const lcInsertPieceInfo& PreviewPieceInfoTransform : mModel->GetPreviewInsertPieceInfo())
|
||||
PreviewPieceInfoTransform.Info->AddRenderMeshes(mScene.get(), PreviewPieceInfoTransform.Transform, PreviewPieceInfoTransform.ColorIndex, lcRenderMeshState::Focused, false);
|
||||
}
|
||||
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<lcMatrix44> Transform;
|
||||
|
||||
if (GetActiveModel() != mModel)
|
||||
Transform = lcMatrix44AffineInverse(mActiveSubmodelTransform);
|
||||
|
||||
if (!ActiveModel->InsertPieceToolClicked(Transform))
|
||||
if (!ActiveModel->InsertPieceToolClicked())
|
||||
break;
|
||||
|
||||
if ((mMouseModifiers & Qt::ControlModifier) == 0)
|
||||
|
||||
Reference in New Issue
Block a user