Skip to content

Commit

Permalink
Merge pull request #1369 from ergoxiv/feature/updated-2d-pose-panels
Browse files Browse the repository at this point in the history
Update GUI Pose Views for Dawntrail
  • Loading branch information
StoiaCode authored Aug 24, 2024
2 parents c101046 + 1839367 commit 50ac5ea
Show file tree
Hide file tree
Showing 46 changed files with 1,597 additions and 556 deletions.
55 changes: 27 additions & 28 deletions Anamnesis/Actor/Pages/PosePage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
mc:Ignorable="d">

<Grid x:Name="ContentArea">

<Grid IsEnabled="{Binding Skeleton, Converter={StaticResource NotNullToBoolConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition />
Expand All @@ -33,7 +32,7 @@
</Grid.RowDefinitions>

<!-- Sidebar -->
<Grid Grid.RowSpan="2" Grid.Column="2">
<Grid Grid.RowSpan="2" Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
Expand All @@ -60,12 +59,12 @@
<TextBox
Text="{Binding Skeleton.CurrentBone.Tooltip, UpdateSourceTrigger=PropertyChanged}"
Margin="0"
Padding="1"
FontSize="10"
FontWeight="Bold"
Padding="1"
FontSize="10"
FontWeight="Bold"
BorderBrush="Transparent"
Visibility="{Binding Skeleton.CurrentBone, Converter={StaticResource NotNullToVisibilityConverter}}"
Style="{StaticResource MaterialDesignTextBox}"/>
Style="{StaticResource MaterialDesignTextBox}"/>

<XivToolsWpf:TextBlock Style="{StaticResource Header}"
Text="{Binding Skeleton.CurrentBone.BoneName}"
Expand Down Expand Up @@ -381,7 +380,6 @@
<Grid Grid.Row="1"
Margin="3"
IsEnabled="{Binding PoseService.IsEnabled}">

<Grid
x:Name="MouseCanvas"
Grid.Row="1"
Expand All @@ -391,7 +389,8 @@
MouseUp="OnCanvasMouseUp">
<Grid DataContext="{Binding Skeleton}">
<views:Pose3DView x:Name="ThreeDView" Visibility="Collapsed" />
<views:PoseGuiView x:Name="GuiView" Visibility="Visible" />
<views:PoseBodyGuiView x:Name="BodyGuiView" Visibility="Visible" />
<views:PoseFaceGuiView x:Name="FaceGuiView" Visibility="Collapsed" />
<views:PoseMatrixView x:Name="MatrixView" Visibility="Collapsed" Margin="3, 28, 0, 3"/>
</Grid>
</Grid>
Expand All @@ -417,28 +416,29 @@
SelectedIndex="0"
SelectionChanged="OnViewChanged"
Style="{StaticResource MaterialDesignToolToggleListBox}">
<ListBoxItem
Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="GUI View"
Visibility="{Binding Skeleton.File.AllowPoseGui, Converter={StaticResource B2V}}">
<XivToolsWpf:IconBlock Icon="ProjectDiagram" FontSize="10"/>
<ListBoxItem Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="Body GUI View">
<XivToolsWpf:IconBlock Icon="StreetView" FontSize="10"/>
</ListBoxItem>
<ListBoxItem
Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="Matrix View"
Visibility="{Binding Skeleton.File.AllowPoseMatrix, Converter={StaticResource B2V}}">
<ListBoxItem Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="Face GUI View">
<XivToolsWpf:IconBlock Icon="GrinAlt" FontSize="10"/>
</ListBoxItem>
<ListBoxItem Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="Matrix View">
<XivToolsWpf:IconBlock Icon="BorderAll" FontSize="10"/>
</ListBoxItem>
<ListBoxItem
x:Name="View3dButton"
Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="3D View">
<ListBoxItem x:Name="View3dButton"
Margin="1"
Padding="8,5"
Cursor="Hand"
ToolTip="3D View">
<XivToolsWpf:IconBlock Icon="Cube" FontSize="10"/>
</ListBoxItem>
</ListBox>
Expand Down Expand Up @@ -470,6 +470,5 @@
<XivToolsWpf:InfoControl IsError="True" Key="Pose_NoModel" VerticalAlignment="Bottom" Margin="12"/>
</Grid>
</Grid>

</Grid>
</UserControl>
29 changes: 16 additions & 13 deletions Anamnesis/Actor/Pages/PosePage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,13 @@

namespace Anamnesis.Actor.Pages;

using Anamnesis.Actor.Views;
using Anamnesis.Files;
using Anamnesis.GUI.Dialogs;
using Anamnesis.Memory;
using Anamnesis.Services;
using PropertyChanged;
using Serilog;
using System;
using System.Collections.Generic;
using System.IO;
Expand All @@ -12,13 +19,6 @@ namespace Anamnesis.Actor.Pages;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media.Media3D;
using Anamnesis.Files;
using Anamnesis.GUI.Dialogs;
using Anamnesis.Memory;
using Anamnesis.Actor.Views;
using Anamnesis.Services;
using PropertyChanged;
using Serilog;
using XivToolsWpf;
using CmQuaternion = Anamnesis.Memory.Quaternion;

Expand Down Expand Up @@ -214,7 +214,8 @@ private async Task Refresh()
await Dispatch.MainThread();

this.ThreeDView.DataContext = null;
this.GuiView.DataContext = null;
this.BodyGuiView.DataContext = null;
this.FaceGuiView.DataContext = null;
this.MatrixView.DataContext = null;

this.BoneViews.Clear();
Expand All @@ -234,7 +235,8 @@ private async Task Refresh()
await this.Skeleton.SetActor(this.Actor);

this.ThreeDView.DataContext = this.Skeleton;
this.GuiView.DataContext = this.Skeleton;
this.BodyGuiView.DataContext = this.Skeleton;
this.FaceGuiView.DataContext = this.Skeleton;
this.MatrixView.DataContext = this.Skeleton;

if (this.writeSkeletonTask == null || this.writeSkeletonTask.IsCompleted)
Expand Down Expand Up @@ -390,12 +392,13 @@ private void OnViewChanged(object sender, SelectionChangedEventArgs e)
{
int selected = this.ViewSelector.SelectedIndex;

if (this.GuiView == null)
if (this.BodyGuiView == null)
return;

this.GuiView.Visibility = selected == 0 ? Visibility.Visible : Visibility.Collapsed;
this.MatrixView.Visibility = selected == 1 ? Visibility.Visible : Visibility.Collapsed;
this.ThreeDView.Visibility = selected == 2 ? Visibility.Visible : Visibility.Collapsed;
this.BodyGuiView.Visibility = selected == 0 ? Visibility.Visible : Visibility.Collapsed;
this.FaceGuiView.Visibility = selected == 1 ? Visibility.Visible : Visibility.Collapsed;
this.MatrixView.Visibility = selected == 2 ? Visibility.Visible : Visibility.Collapsed;
this.ThreeDView.Visibility = selected == 3 ? Visibility.Visible : Visibility.Collapsed;
}

private void OnClearClicked(object? sender, RoutedEventArgs? e)
Expand Down
51 changes: 38 additions & 13 deletions Anamnesis/Actor/Posing/Views/BoneView.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@

namespace Anamnesis.Actor.Views;

using Anamnesis.Actor.Pages;
using MaterialDesignThemes.Wpf;
using Serilog;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
Expand All @@ -11,9 +14,6 @@ namespace Anamnesis.Actor.Views;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shapes;
using Anamnesis.Actor.Pages;
using MaterialDesignThemes.Wpf;
using Serilog;
using XivToolsWpf.DependencyProperties;

public partial class BoneView : UserControl, IBone
Expand Down Expand Up @@ -116,7 +116,7 @@ private void BindDataContext()

private void OnSkeletonPropertyChanged(object? sender, System.ComponentModel.PropertyChangedEventArgs e)
{
bool refreshBone = this.Bone == null || e.PropertyName == nameof(SkeletonVisual3d.FlipSides);
bool refreshBone = this.Bone == null || e.PropertyName == nameof(SkeletonVisual3d.FlipSides) || e.PropertyName == nameof(SkeletonVisual3d.AllBones);

if (refreshBone && this.DataContext is SkeletonVisual3d)
this.SetBone(this.CurrentBoneName);
Expand Down Expand Up @@ -160,18 +160,37 @@ private void DrawSkeleton()
if (childView.Visibility != Visibility.Visible)
continue;

var scale = 1.0;

// Determine line stroke thickness (if placed inside a Viewbox element)
if (this.Parent is Canvas cvs && cvs.Parent is Viewbox vbox)
{
scale = vbox.ActualWidth / cvs.ActualWidth;
}

if (this.Parent is Canvas c1 && childView.Parent is Canvas c2 && c1 == c2)
{
Line line = new Line();
line.SnapsToDevicePixels = true;
line.StrokeThickness = 1;
line.StrokeThickness = 1 / scale;
line.Stroke = Brushes.Gray;
line.IsHitTestVisible = false;

line.X1 = Canvas.GetLeft(this) + (this.Width / 2);
line.Y1 = Canvas.GetTop(this) + (this.Height / 2);
line.X2 = Canvas.GetLeft(childView) + (childView.Width / 2);
line.Y2 = Canvas.GetTop(childView) + (childView.Height / 2);
// Note: Canvas.GetLeft and Canvas.GetTop return the element corner, including margin, padding, and border.
// Adjust for these properties in coordinate calculations.
double parentWidth = this.ActualWidth + this.Margin.Left + this.Margin.Right + this.Padding.Left + this.Padding.Right +
this.BorderThickness.Right;
double parentHeight = this.ActualHeight + this.Margin.Top + this.Margin.Bottom + this.Padding.Top + this.Padding.Bottom +
this.BorderThickness.Bottom;
double childWidth = childView.ActualWidth + childView.Margin.Left + childView.Margin.Right + childView.Padding.Left + childView.Padding.Right +
childView.BorderThickness.Right;
double childHeight = childView.ActualHeight + childView.Margin.Top + childView.Margin.Bottom + childView.Padding.Top + childView.Padding.Bottom +
childView.BorderThickness.Bottom;

line.X1 = Canvas.GetLeft(this) + (parentWidth / 2);
line.Y1 = Canvas.GetTop(this) + (parentHeight / 2);
line.X2 = Canvas.GetLeft(childView) + (childWidth / 2);
line.Y2 = Canvas.GetTop(childView) + (childHeight / 2);

c1.Children.Insert(0, line);
this.linesToChildren.Add(line);
Expand All @@ -180,7 +199,6 @@ private void DrawSkeleton()
Line line2 = new Line();
line2.StrokeThickness = 25;
line2.Stroke = Brushes.Transparent;
////line2.Opacity = 0.1f;

line2.MouseEnter += childView.OnMouseEnter;
line2.MouseLeave += childView.OnMouseLeave;
Expand Down Expand Up @@ -289,14 +307,21 @@ private void UpdateState()
bool parentHovered = this.skeleton.GetIsBoneParentsHovered(this.Bone);

Color color = parentHovered ? theme.PrimaryMid.Color : theme.BodyLight;
int thickenss = parentSelected || selected || parentHovered ? 2 : 1;
double thickness = parentSelected || selected || parentHovered ? 2 : 1;

// Scale thickness based on viewbox scale (if applicable)
if (this.Parent is Canvas cvs && cvs.Parent is Viewbox vbox)
{
var scale = vbox.ActualWidth / cvs.ActualWidth;
thickness /= scale;
}

this.ForegroundElipse.Visibility = (selected || hovered) ? Visibility.Visible : Visibility.Hidden;
this.BackgroundElipse.Stroke = new SolidColorBrush(theme.PrimaryMid.Color);
this.SetState(new SolidColorBrush(color), thickenss);
this.SetState(new SolidColorBrush(color), thickness);
}

private void SetState(Brush stroke, int thickness)
private void SetState(Brush stroke, double thickness)
{
this.BackgroundElipse.StrokeThickness = thickness;

Expand Down
Loading

0 comments on commit 50ac5ea

Please sign in to comment.