增加padding和margin参数
This commit is contained in:
@@ -31,7 +31,7 @@ namespace SpineViewer.Extensions
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取适合指定画布参数下能够覆盖包围盒的视区包围盒
|
/// 获取适合指定画布参数下能够覆盖包围盒的视区包围盒
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static RectangleF GetResolutionBounds(this RectangleF bounds, Size resolution, Padding padding, Padding margin)
|
public static RectangleF GetResolutionBounds(this RectangleF bounds, Size resolution, Padding margin, Padding padding)
|
||||||
{
|
{
|
||||||
float sizeW = bounds.Width;
|
float sizeW = bounds.Width;
|
||||||
float sizeH = bounds.Height;
|
float sizeH = bounds.Height;
|
||||||
@@ -40,12 +40,15 @@ namespace SpineViewer.Extensions
|
|||||||
float scale = Math.Max(Math.Abs(sizeW / innerW), Math.Abs(sizeH / innerH)); // 取两方向上较大的缩放比, 以此让画布可以覆盖内容
|
float scale = Math.Max(Math.Abs(sizeW / innerW), Math.Abs(sizeH / innerH)); // 取两方向上较大的缩放比, 以此让画布可以覆盖内容
|
||||||
float scaleW = scale * Math.Sign(sizeW);
|
float scaleW = scale * Math.Sign(sizeW);
|
||||||
float scaleH = scale * Math.Sign(sizeH);
|
float scaleH = scale * Math.Sign(sizeH);
|
||||||
return new(
|
|
||||||
bounds.X - (padding.Left + margin.Left - padding.Right - margin.Right) * scaleW,
|
innerW *= scaleW;
|
||||||
bounds.Y - (padding.Top + margin.Top - padding.Bottom - margin.Bottom) * scaleH,
|
innerH *= scaleH;
|
||||||
(resolution.Width + margin.Horizontal) * scaleW,
|
|
||||||
(resolution.Height + margin.Vertical) * scaleH
|
var x = bounds.X - (innerW - sizeW) / 2 - (margin.Left + padding.Left) * scaleW;
|
||||||
);
|
var y = bounds.Y - (innerH - sizeH) / 2 - (margin.Top + padding.Top) * scaleH;
|
||||||
|
var w = (resolution.Width + margin.Horizontal) * scaleW;
|
||||||
|
var h = (resolution.Height + margin.Vertical) * scaleH;
|
||||||
|
return new(x, y, w, h);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,23 +86,6 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public SFML.Graphics.Color BackgroundColorPma { get; private set; } = SFML.Graphics.Color.Transparent;
|
public SFML.Graphics.Color BackgroundColorPma { get; private set; } = SFML.Graphics.Color.Transparent;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 四周填充距离, 单位为像素
|
|
||||||
/// </summary>
|
|
||||||
public Padding Padding
|
|
||||||
{
|
|
||||||
get => padding;
|
|
||||||
set
|
|
||||||
{
|
|
||||||
if (value.Left < 0) value.Left = 0;
|
|
||||||
if (value.Right < 0) value.Right = 0;
|
|
||||||
if (value.Top < 0) value.Top = 0;
|
|
||||||
if (value.Bottom < 0) value.Bottom = 0;
|
|
||||||
padding = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private Padding padding = new(0);
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 四周边缘距离, 单位为像素
|
/// 四周边缘距离, 单位为像素
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -120,6 +103,23 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
}
|
}
|
||||||
private Padding margin = new(0);
|
private Padding margin = new(0);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 四周填充距离, 单位为像素
|
||||||
|
/// </summary>
|
||||||
|
public Padding Padding
|
||||||
|
{
|
||||||
|
get => padding;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value.Left < 0) value.Left = 0;
|
||||||
|
if (value.Right < 0) value.Right = 0;
|
||||||
|
if (value.Top < 0) value.Top = 0;
|
||||||
|
if (value.Bottom < 0) value.Bottom = 0;
|
||||||
|
padding = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private Padding padding = new(0);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 自动分辨率, 将会忽略预览画面的分辨率和视图, 使用模型自身的包围盒
|
/// 自动分辨率, 将会忽略预览画面的分辨率和视图, 使用模型自身的包围盒
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -135,7 +135,7 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
var w = View.Size.X;
|
var w = View.Size.X;
|
||||||
var h = View.Size.Y;
|
var h = View.Size.Y;
|
||||||
var currentBounds = new RectangleF(x, y, w, h);
|
var currentBounds = new RectangleF(x, y, w, h);
|
||||||
var bounds = currentBounds.GetResolutionBounds(Resolution, new(0), Margin);
|
var bounds = currentBounds.GetResolutionBounds(Resolution, Margin, Padding);
|
||||||
|
|
||||||
using var view = new SFML.Graphics.View(View);
|
using var view = new SFML.Graphics.View(View);
|
||||||
view.Center = new(bounds.X + bounds.Width / 2, bounds.Y + bounds.Height / 2);
|
view.Center = new(bounds.X + bounds.Width / 2, bounds.Y + bounds.Height / 2);
|
||||||
@@ -247,8 +247,11 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
boundsCache.Clear();
|
boundsCache.Clear();
|
||||||
|
|
||||||
var spinesToRender = spines.Where(sp => !RenderSelectedOnly || sp.IsSelected).Reverse().ToArray();
|
var spinesToRender = spines.Where(sp => !RenderSelectedOnly || sp.IsSelected).Reverse().ToArray();
|
||||||
if (IsExportSingle) ExportSingle(spinesToRender, worker);
|
if (spinesToRender.Length > 0)
|
||||||
else ExportIndividual(spinesToRender, worker);
|
{
|
||||||
|
if (IsExportSingle) ExportSingle(spinesToRender, worker);
|
||||||
|
else ExportIndividual(spinesToRender, worker);
|
||||||
|
}
|
||||||
|
|
||||||
logger.LogCurrentProcessMemoryUsage();
|
logger.LogCurrentProcessMemoryUsage();
|
||||||
}
|
}
|
||||||
@@ -302,18 +305,18 @@ namespace SpineViewer.Spine.SpineExporter
|
|||||||
[Category("[0] 导出"), DisplayName("背景颜色"), Description("要使用的背景色, 格式为 #RRGGBBAA")]
|
[Category("[0] 导出"), DisplayName("背景颜色"), Description("要使用的背景色, 格式为 #RRGGBBAA")]
|
||||||
public SFML.Graphics.Color BackgroundColor { get => Exporter.BackgroundColor; set => Exporter.BackgroundColor = value; }
|
public SFML.Graphics.Color BackgroundColor { get => Exporter.BackgroundColor; set => Exporter.BackgroundColor = value; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 四周填充距离
|
|
||||||
/// </summary>
|
|
||||||
[TypeConverter(typeof(PaddingConverter))]
|
|
||||||
[Category("[0] 导出"), DisplayName("四周填充距离"), Description("画布内部的填充距离 (Padding), 导出的分辨率大小不会发生变化, 但是会留有四周空间")]
|
|
||||||
public Padding Padding { get => Exporter.Padding; set => Exporter.Padding = value; }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 四周边缘距离
|
/// 四周边缘距离
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[TypeConverter(typeof(PaddingConverter))]
|
[TypeConverter(typeof(PaddingConverter))]
|
||||||
[Category("[0] 导出"), DisplayName("四周边缘距离"), Description("画布外部的边缘距离 (Margin), 最终导出的分辨率需要加上这个边距")]
|
[Category("[0] 导出"), DisplayName("四周边缘距离"), Description("画布外部的边缘距离 (Margin), 最终导出的分辨率需要加上这个边距")]
|
||||||
public Padding Margin { get => Exporter.Margin; set => Exporter.Margin = value; }
|
public Padding Margin { get => Exporter.Margin; set => Exporter.Margin = value; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 四周填充距离
|
||||||
|
/// </summary>
|
||||||
|
[TypeConverter(typeof(PaddingConverter))]
|
||||||
|
[Category("[0] 导出"), DisplayName("四周填充距离"), Description("画布内部的填充距离 (Padding), 导出的分辨率大小不会发生变化, 但是会留有四周空间")]
|
||||||
|
public Padding Padding { get => Exporter.Padding; set => Exporter.Padding = value; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user