From a757f22b4115fabd80ce2386132274fea3948259 Mon Sep 17 00:00:00 2001 From: miku-666 <74728189+NessieHax@users.noreply.github.com> Date: Tue, 27 May 2025 21:44:07 +0200 Subject: [PATCH] ModelEditor - Add highlighting of sinfgle model boxes --- PCK-Studio/Extensions/ModelBoxExtension.cs | 29 ++++++++++++++++++++++ PCK-Studio/Forms/Editor/ModelEditor.cs | 9 ++++--- PCK-Studio/PckStudio.csproj | 1 + PCK-Studio/Rendering/ModelRenderer.cs | 9 ++++++- 4 files changed, 44 insertions(+), 4 deletions(-) create mode 100644 PCK-Studio/Extensions/ModelBoxExtension.cs diff --git a/PCK-Studio/Extensions/ModelBoxExtension.cs b/PCK-Studio/Extensions/ModelBoxExtension.cs new file mode 100644 index 00000000..46c66ceb --- /dev/null +++ b/PCK-Studio/Extensions/ModelBoxExtension.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using ICSharpCode.SharpZipLib.Zip.Compression; +using System.Windows.Media; +using System.Windows; +using OMI.Formats.Model; +using PckStudio.Rendering; +using System.Numerics; + +namespace PckStudio.Extensions +{ + static class ModelBoxExtension + { + + public static BoundingBox GetBoundingBox(this ModelBox modelBox) + { + Vector3 halfSize = modelBox.Size / 2f; + Vector3 halfSizeInflated = new Vector3(modelBox.Inflate) + halfSize; + Vector3 transformedCenter = modelBox.Position + halfSize; + Vector3 start = transformedCenter - halfSizeInflated; + Vector3 end = transformedCenter + halfSizeInflated; + return new BoundingBox(start, end); + } + + } +} diff --git a/PCK-Studio/Forms/Editor/ModelEditor.cs b/PCK-Studio/Forms/Editor/ModelEditor.cs index fe459e26..16a13790 100644 --- a/PCK-Studio/Forms/Editor/ModelEditor.cs +++ b/PCK-Studio/Forms/Editor/ModelEditor.cs @@ -163,6 +163,7 @@ namespace PckStudio.Forms.Editor private class ModelBoxNode : TreeNode { private ModelBox _modelBox; + public ModelBox Box => _modelBox; private ModelBoxNode(ModelBox modelBox) : base($"Box: pos:{modelBox.Position} size:{modelBox.Size}") { @@ -260,10 +261,12 @@ namespace PckStudio.Forms.Editor { modelViewport.Highlight(modelPartNode.Part); } - //if (e.Node is ModelBoxNode modelBoxNode) - //{ - //} + if (e.Node is ModelBoxNode modelBoxNode && modelBoxNode.Parent is ModelPartNode parentPartNode && parentPartNode.Parent is ModelNode parentNode1 && + modelViewport.CurrentModelName == parentNode1.Model.Name) + { + modelViewport.Highlight(modelBoxNode.Box, parentPartNode.Part); + } } private IEnumerable GetModelTextures(string modelName) diff --git a/PCK-Studio/PckStudio.csproj b/PCK-Studio/PckStudio.csproj index 3ed7f5c0..873c1814 100644 --- a/PCK-Studio/PckStudio.csproj +++ b/PCK-Studio/PckStudio.csproj @@ -149,6 +149,7 @@ + diff --git a/PCK-Studio/Rendering/ModelRenderer.cs b/PCK-Studio/Rendering/ModelRenderer.cs index 420f45d4..97987052 100644 --- a/PCK-Studio/Rendering/ModelRenderer.cs +++ b/PCK-Studio/Rendering/ModelRenderer.cs @@ -282,12 +282,19 @@ namespace PckStudio.Rendering DrawBoundingBox(renderTransform, _maxBounds, Color.Red); } } + internal void Highlight(ModelPart part) { - BoundingBox bb = part.GetBoxes().Select(b => new BoundingBox(b.Position, b.Position + b.Size)).GetEnclosingBoundingBox(); + BoundingBox bb = part.GetBoxes().Select(b => b.GetBoundingBox()).GetEnclosingBoundingBox(); _highlightingInfo = new HighlightInfo(part.Translation, part.Rotation + part.AdditionalRotation, bb); } + internal void Highlight(ModelBox box, ModelPart parent) + { + BoundingBox bb = box.GetBoundingBox(); + _highlightingInfo = new HighlightInfo(parent.Translation, parent.Rotation + parent.AdditionalRotation, bb); + } + internal void ResetHighlight() { _highlightingInfo = HighlightInfo.Empty;