converter

This commit is contained in:
iAmAsval 2021-07-31 17:30:23 +02:00
parent d949bc5fb1
commit 6672c9f10a
7 changed files with 39 additions and 18 deletions

@ -1 +1 @@
Subproject commit db405ca009b440244e7c55e9cc0f626d93c468e3
Subproject commit 071e458907750c5af253079e2e91ddf54b824220

View File

@ -549,18 +549,13 @@ namespace FModel.ViewModels
ExportData(fullPath);
}
private bool CheckExport(UObject export) // return if this loads an image
private bool CheckExport(UObject export) // return true once you wanna stop searching for exports
{
switch (export)
{
case UTexture2D texture:
{
var bNearest = false;
if (texture.TryGetValue(out FName trigger, "LODGroup", "Filter") && !trigger.IsNone)
bNearest = trigger.Text.EndsWith("TEXTUREGROUP_Pixels2D", StringComparison.OrdinalIgnoreCase) ||
trigger.Text.EndsWith("TF_Nearest", StringComparison.OrdinalIgnoreCase);
TabControl.SelectedTab.ImageRender = bNearest ? BitmapScalingMode.NearestNeighbor : BitmapScalingMode.Linear;
TabControl.SelectedTab.RenderNearestNeighbor = texture.bRenderNearestNeighbor;
TabControl.SelectedTab.SetImage(texture.Decode());
return true;
}
@ -604,7 +599,7 @@ namespace FModel.ViewModels
modelViewer.Load(export);
});
}
return false;
return true;
}
default:
{

View File

@ -5,6 +5,7 @@ using FModel.Views.Resources.Controls;
using System.IO;
using System.Windows;
using System.Windows.Media;
using FModel.Views.Resources.Converters;
namespace FModel.ViewModels.Commands
{
@ -32,7 +33,7 @@ namespace FModel.ViewModels.Commands
WindowState = contextViewModel.Image.Height > 1000 ? WindowState.Maximized : WindowState.Normal,
ImageCtrl = {Source = contextViewModel.Image}
};
RenderOptions.SetBitmapScalingMode(popout.ImageCtrl, contextViewModel.ImageRender);
RenderOptions.SetBitmapScalingMode(popout.ImageCtrl, BoolToRenderModeConverter.Instance.Convert(contextViewModel.RenderNearestNeighbor));
popout.Show();
});
break;

View File

@ -165,12 +165,10 @@ namespace FModel.ViewModels
var builder = new MeshBuilder {TextureCoordinates = new Vector2Collection()};
for (var i = 0; i < verts.Length; i++)
{
var u = BitConverter.ToSingle(BitConverter.GetBytes((int) verts[i].UV.U));
var v = BitConverter.ToSingle(BitConverter.GetBytes((int) verts[i].UV.V));
builder.AddNode(
new Vector3(verts[i].Position.X, -verts[i].Position.Y, verts[i].Position.Z),
new Vector3(verts[i].Normal.X, verts[i].Normal.Y, verts[i].Normal.Z),
new Vector2(u, v));
new Vector2(verts[i].UV.U, verts[i].UV.V));
}
for (var i = 0; i < indices.Length; i++)

View File

@ -145,11 +145,11 @@ namespace FModel.ViewModels
}
}
private BitmapScalingMode _imageRender = BitmapScalingMode.Linear;
public BitmapScalingMode ImageRender
private bool _renderNearestNeighbor;
public bool RenderNearestNeighbor
{
get => _imageRender;
set => SetProperty(ref _imageRender, value);
get => _renderNearestNeighbor;
set => SetProperty(ref _renderNearestNeighbor, value);
}
public bool HasImage => Image != null;

View File

@ -0,0 +1,27 @@
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
namespace FModel.Views.Resources.Converters
{
public class BoolToRenderModeConverter : IValueConverter
{
public static readonly BoolToRenderModeConverter Instance = new();
public BitmapScalingMode Convert(bool value) => (BitmapScalingMode) Convert(value, null, null, null);
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value switch
{
true => BitmapScalingMode.NearestNeighbor,
_ => BitmapScalingMode.Linear
};
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@ -648,7 +648,7 @@
<controls:AvalonEditor x:Name="DynamicArea" Grid.Column="0" Grid.ColumnSpan="3" DataContext="{Binding SelectedItem, ElementName=TabControlName}" />
<Image Grid.Column="3" Grid.ColumnSpan="2" VerticalAlignment="Center" HorizontalAlignment="Center" Stretch="Uniform"
Visibility="{Binding SelectedItem.HasImage, ElementName=TabControlName, Converter={StaticResource BoolToVisibilityConverter}}"
Source="{Binding SelectedItem.Image, ElementName=TabControlName}" RenderOptions.BitmapScalingMode="{Binding SelectedItem.ImageRender, ElementName=TabControlName}">
Source="{Binding SelectedItem.Image, ElementName=TabControlName}" RenderOptions.BitmapScalingMode="{Binding SelectedItem.RenderNearestNeighbor, ElementName=TabControlName, Converter={x:Static converters:BoolToRenderModeConverter.Instance}}">
<Image.InputBindings>
<MouseBinding MouseAction="LeftDoubleClick" Command="{Binding SelectedItem.ImageCommand, ElementName=TabControlName}" CommandParameter="Open"/>
</Image.InputBindings>