增加包围盒显示

This commit is contained in:
ww-rm
2025-03-02 23:03:17 +08:00
parent 5a0c0de509
commit 49c84a3254
2 changed files with 67 additions and 49 deletions

View File

@@ -176,7 +176,7 @@
rtbLog.Margin = new Padding(3, 2, 3, 2); rtbLog.Margin = new Padding(3, 2, 3, 2);
rtbLog.Name = "rtbLog"; rtbLog.Name = "rtbLog";
rtbLog.ReadOnly = true; rtbLog.ReadOnly = true;
rtbLog.Size = new Size(1721, 159); rtbLog.Size = new Size(1721, 131);
rtbLog.TabIndex = 0; rtbLog.TabIndex = 0;
rtbLog.Text = ""; rtbLog.Text = "";
rtbLog.WordWrap = false; rtbLog.WordWrap = false;
@@ -199,7 +199,7 @@
splitContainer_MainForm.Panel2.Controls.Add(rtbLog); splitContainer_MainForm.Panel2.Controls.Add(rtbLog);
splitContainer_MainForm.Panel2.Cursor = Cursors.Default; splitContainer_MainForm.Panel2.Cursor = Cursors.Default;
splitContainer_MainForm.Size = new Size(1721, 958); splitContainer_MainForm.Size = new Size(1721, 958);
splitContainer_MainForm.SplitterDistance = 795; splitContainer_MainForm.SplitterDistance = 823;
splitContainer_MainForm.TabIndex = 3; splitContainer_MainForm.TabIndex = 3;
splitContainer_MainForm.TabStop = false; splitContainer_MainForm.TabStop = false;
splitContainer_MainForm.SplitterMoved += splitContainer_SplitterMoved; splitContainer_MainForm.SplitterMoved += splitContainer_SplitterMoved;
@@ -221,7 +221,7 @@
// //
splitContainer_Functional.Panel2.Controls.Add(groupBox_Preview); splitContainer_Functional.Panel2.Controls.Add(groupBox_Preview);
splitContainer_Functional.Panel2.Cursor = Cursors.Default; splitContainer_Functional.Panel2.Cursor = Cursors.Default;
splitContainer_Functional.Size = new Size(1721, 795); splitContainer_Functional.Size = new Size(1721, 823);
splitContainer_Functional.SplitterDistance = 725; splitContainer_Functional.SplitterDistance = 725;
splitContainer_Functional.TabIndex = 2; splitContainer_Functional.TabIndex = 2;
splitContainer_Functional.TabStop = false; splitContainer_Functional.TabStop = false;
@@ -244,7 +244,7 @@
// //
splitContainer_Information.Panel2.Controls.Add(splitContainer_Config); splitContainer_Information.Panel2.Controls.Add(splitContainer_Config);
splitContainer_Information.Panel2.Cursor = Cursors.Default; splitContainer_Information.Panel2.Cursor = Cursors.Default;
splitContainer_Information.Size = new Size(725, 795); splitContainer_Information.Size = new Size(725, 823);
splitContainer_Information.SplitterDistance = 346; splitContainer_Information.SplitterDistance = 346;
splitContainer_Information.TabIndex = 1; splitContainer_Information.TabIndex = 1;
splitContainer_Information.TabStop = false; splitContainer_Information.TabStop = false;
@@ -257,7 +257,7 @@
groupBox_SkelList.Dock = DockStyle.Fill; groupBox_SkelList.Dock = DockStyle.Fill;
groupBox_SkelList.Location = new Point(0, 0); groupBox_SkelList.Location = new Point(0, 0);
groupBox_SkelList.Name = "groupBox_SkelList"; groupBox_SkelList.Name = "groupBox_SkelList";
groupBox_SkelList.Size = new Size(346, 795); groupBox_SkelList.Size = new Size(346, 823);
groupBox_SkelList.TabIndex = 0; groupBox_SkelList.TabIndex = 0;
groupBox_SkelList.TabStop = false; groupBox_SkelList.TabStop = false;
groupBox_SkelList.Text = "模型列表"; groupBox_SkelList.Text = "模型列表";
@@ -268,7 +268,7 @@
spineListView.Location = new Point(3, 26); spineListView.Location = new Point(3, 26);
spineListView.Name = "spineListView"; spineListView.Name = "spineListView";
spineListView.PropertyGrid = propertyGrid_Spine; spineListView.PropertyGrid = propertyGrid_Spine;
spineListView.Size = new Size(340, 766); spineListView.Size = new Size(340, 794);
spineListView.TabIndex = 0; spineListView.TabIndex = 0;
// //
// propertyGrid_Spine // propertyGrid_Spine
@@ -277,7 +277,7 @@
propertyGrid_Spine.HelpVisible = false; propertyGrid_Spine.HelpVisible = false;
propertyGrid_Spine.Location = new Point(3, 26); propertyGrid_Spine.Location = new Point(3, 26);
propertyGrid_Spine.Name = "propertyGrid_Spine"; propertyGrid_Spine.Name = "propertyGrid_Spine";
propertyGrid_Spine.Size = new Size(369, 506); propertyGrid_Spine.Size = new Size(369, 457);
propertyGrid_Spine.TabIndex = 0; propertyGrid_Spine.TabIndex = 0;
propertyGrid_Spine.ToolbarVisible = false; propertyGrid_Spine.ToolbarVisible = false;
propertyGrid_Spine.PropertyValueChanged += propertyGrid_PropertyValueChanged; propertyGrid_Spine.PropertyValueChanged += propertyGrid_PropertyValueChanged;
@@ -299,8 +299,8 @@
// //
splitContainer_Config.Panel2.Controls.Add(groupBox_PreviewConfig); splitContainer_Config.Panel2.Controls.Add(groupBox_PreviewConfig);
splitContainer_Config.Panel2.Cursor = Cursors.Default; splitContainer_Config.Panel2.Cursor = Cursors.Default;
splitContainer_Config.Size = new Size(375, 795); splitContainer_Config.Size = new Size(375, 823);
splitContainer_Config.SplitterDistance = 535; splitContainer_Config.SplitterDistance = 486;
splitContainer_Config.TabIndex = 0; splitContainer_Config.TabIndex = 0;
splitContainer_Config.TabStop = false; splitContainer_Config.TabStop = false;
splitContainer_Config.SplitterMoved += splitContainer_SplitterMoved; splitContainer_Config.SplitterMoved += splitContainer_SplitterMoved;
@@ -312,7 +312,7 @@
groupBox_SkelConfig.Dock = DockStyle.Fill; groupBox_SkelConfig.Dock = DockStyle.Fill;
groupBox_SkelConfig.Location = new Point(0, 0); groupBox_SkelConfig.Location = new Point(0, 0);
groupBox_SkelConfig.Name = "groupBox_SkelConfig"; groupBox_SkelConfig.Name = "groupBox_SkelConfig";
groupBox_SkelConfig.Size = new Size(375, 535); groupBox_SkelConfig.Size = new Size(375, 486);
groupBox_SkelConfig.TabIndex = 0; groupBox_SkelConfig.TabIndex = 0;
groupBox_SkelConfig.TabStop = false; groupBox_SkelConfig.TabStop = false;
groupBox_SkelConfig.Text = "模型参数"; groupBox_SkelConfig.Text = "模型参数";
@@ -323,7 +323,7 @@
groupBox_PreviewConfig.Dock = DockStyle.Fill; groupBox_PreviewConfig.Dock = DockStyle.Fill;
groupBox_PreviewConfig.Location = new Point(0, 0); groupBox_PreviewConfig.Location = new Point(0, 0);
groupBox_PreviewConfig.Name = "groupBox_PreviewConfig"; groupBox_PreviewConfig.Name = "groupBox_PreviewConfig";
groupBox_PreviewConfig.Size = new Size(375, 256); groupBox_PreviewConfig.Size = new Size(375, 333);
groupBox_PreviewConfig.TabIndex = 1; groupBox_PreviewConfig.TabIndex = 1;
groupBox_PreviewConfig.TabStop = false; groupBox_PreviewConfig.TabStop = false;
groupBox_PreviewConfig.Text = "画面参数"; groupBox_PreviewConfig.Text = "画面参数";
@@ -334,7 +334,7 @@
propertyGrid_Previewer.HelpVisible = false; propertyGrid_Previewer.HelpVisible = false;
propertyGrid_Previewer.Location = new Point(3, 26); propertyGrid_Previewer.Location = new Point(3, 26);
propertyGrid_Previewer.Name = "propertyGrid_Previewer"; propertyGrid_Previewer.Name = "propertyGrid_Previewer";
propertyGrid_Previewer.Size = new Size(369, 227); propertyGrid_Previewer.Size = new Size(369, 304);
propertyGrid_Previewer.TabIndex = 1; propertyGrid_Previewer.TabIndex = 1;
propertyGrid_Previewer.ToolbarVisible = false; propertyGrid_Previewer.ToolbarVisible = false;
propertyGrid_Previewer.PropertyValueChanged += propertyGrid_PropertyValueChanged; propertyGrid_Previewer.PropertyValueChanged += propertyGrid_PropertyValueChanged;
@@ -345,7 +345,7 @@
groupBox_Preview.Dock = DockStyle.Fill; groupBox_Preview.Dock = DockStyle.Fill;
groupBox_Preview.Location = new Point(0, 0); groupBox_Preview.Location = new Point(0, 0);
groupBox_Preview.Name = "groupBox_Preview"; groupBox_Preview.Name = "groupBox_Preview";
groupBox_Preview.Size = new Size(992, 795); groupBox_Preview.Size = new Size(992, 823);
groupBox_Preview.TabIndex = 1; groupBox_Preview.TabIndex = 1;
groupBox_Preview.TabStop = false; groupBox_Preview.TabStop = false;
groupBox_Preview.Text = "预览画面"; groupBox_Preview.Text = "预览画面";
@@ -357,7 +357,7 @@
spinePreviewer.Location = new Point(3, 26); spinePreviewer.Location = new Point(3, 26);
spinePreviewer.Name = "spinePreviewer"; spinePreviewer.Name = "spinePreviewer";
spinePreviewer.PropertyGrid = propertyGrid_Previewer; spinePreviewer.PropertyGrid = propertyGrid_Previewer;
spinePreviewer.Size = new Size(986, 766); spinePreviewer.Size = new Size(986, 794);
spinePreviewer.SpineListView = spineListView; spinePreviewer.SpineListView = spineListView;
spinePreviewer.TabIndex = 0; spinePreviewer.TabIndex = 0;
spinePreviewer.MouseUp += spinePreviewer_MouseUp; spinePreviewer.MouseUp += spinePreviewer_MouseUp;

View File

@@ -24,40 +24,31 @@ namespace SpineViewer
public PreviewerProperty(SpinePreviewer previewer) { this.previewer = previewer; } public PreviewerProperty(SpinePreviewer previewer) { this.previewer = previewer; }
/// <summary>
/// 导出画面分辨率
/// </summary>
[TypeConverter(typeof(SizeTypeConverter))] [TypeConverter(typeof(SizeTypeConverter))]
[Category("属性"), DisplayName("分辨率")] [Category("导出"), DisplayName("分辨率")]
public Size Resolution { get => previewer.Resolution; set => previewer.Resolution = value; } public Size Resolution { get => previewer.Resolution; set => previewer.Resolution = value; }
[TypeConverter(typeof(PointFTypeConverter))] [TypeConverter(typeof(PointFTypeConverter))]
[Category("属性"), DisplayName("画面中心点")] [Category("导出"), DisplayName("画面中心点")]
public PointF Center { get => previewer.Center; set => previewer.Center = value; } public PointF Center { get => previewer.Center; set => previewer.Center = value; }
/// <summary> [Category("导出"), DisplayName("缩放")]
/// 画面缩放
/// </summary>
[Category("属性"), DisplayName("缩放")]
public float Zoom { get => previewer.Zoom; set => previewer.Zoom = value; } public float Zoom { get => previewer.Zoom; set => previewer.Zoom = value; }
/// <summary> [Category("导出"), DisplayName("旋转")]
/// 画面旋转
/// </summary>
[Category("属性"), DisplayName("旋转")]
public float Rotation { get => previewer.Rotation; set => previewer.Rotation = value; } public float Rotation { get => previewer.Rotation; set => previewer.Rotation = value; }
/// <summary> [Category("导出"), DisplayName("水平翻转")]
/// 画面旋转
/// </summary>
[Category("属性"), DisplayName("水平翻转")]
public bool FlipX { get => previewer.FlipX; set => previewer.FlipX = value; } public bool FlipX { get => previewer.FlipX; set => previewer.FlipX = value; }
/// <summary> [Category("导出"), DisplayName("垂直翻转")]
/// 画面旋转
/// </summary>
[Category("属性"), DisplayName("垂直翻转")]
public bool FlipY { get => previewer.FlipY; set => previewer.FlipY = value; } public bool FlipY { get => previewer.FlipY; set => previewer.FlipY = value; }
[Category("预览"), DisplayName("显示坐标轴")]
public bool ShowAxis { get => previewer.ShowAxis; set => previewer.ShowAxis = value; }
[Category("预览"), DisplayName("显示包围盒")]
public bool ShowBounds { get => previewer.ShowBounds; set => previewer.ShowBounds = value; }
} }
[Category("自定义"), Description("相关联的 SpineListView")] [Category("自定义"), Description("相关联的 SpineListView")]
@@ -82,10 +73,12 @@ namespace SpineViewer
private static readonly SFML.Graphics.Color BackgroundColor = SFML.Graphics.Color.White; private static readonly SFML.Graphics.Color BackgroundColor = SFML.Graphics.Color.White;
private static readonly SFML.Graphics.Color AxisColor = SFML.Graphics.Color.Red; private static readonly SFML.Graphics.Color AxisColor = SFML.Graphics.Color.Red;
private static readonly SFML.Graphics.Color BoundsColor = SFML.Graphics.Color.Blue;
private readonly SFML.Graphics.RectangleShape BackgroundCell = new() { FillColor = new(220, 220, 220) }; private readonly SFML.Graphics.RectangleShape BackgroundCell = new() { FillColor = new(220, 220, 220) };
private readonly SFML.Graphics.VertexArray XAxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2); private readonly SFML.Graphics.VertexArray XAxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2);
private readonly SFML.Graphics.VertexArray YAxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2); private readonly SFML.Graphics.VertexArray YAxisVertex = new(SFML.Graphics.PrimitiveType.Lines, 2);
private readonly SFML.Graphics.VertexArray BoundsRect = new(SFML.Graphics.PrimitiveType.LineStrip, 5);
private readonly SFML.Graphics.RenderWindow RenderWindow; private readonly SFML.Graphics.RenderWindow RenderWindow;
private readonly SFML.System.Clock Clock = new(); private readonly SFML.System.Clock Clock = new();
@@ -251,6 +244,20 @@ namespace SpineViewer
} }
} }
/// <summary>
/// 显示坐标轴
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public bool ShowAxis { get; set; } = true;
/// <summary>
/// 显示包围盒
/// </summary>
[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
[Browsable(false)]
public bool ShowBounds { get; set; } = true;
/// <summary> /// <summary>
/// 开始预览 /// 开始预览
/// </summary> /// </summary>
@@ -410,21 +417,23 @@ namespace SpineViewer
hasOffset = !hasOffset; hasOffset = !hasOffset;
} }
// 绘制坐标轴 if (ShowAxis)
var origin = RenderWindow.MapCoordsToPixel(new(0, 0));
var clientRect = panel.ClientRectangle;
if (origin.X > clientRect.Left && origin.X < clientRect.Right ||
origin.Y > clientRect.Top && origin.Y < clientRect.Bottom)
{ {
var rightBottom = view.Center + size / 2; var origin = RenderWindow.MapCoordsToPixel(new(0, 0));
XAxisVertex[0] = new(new(leftTop.X, 0), AxisColor); var clientRect = panel.ClientRectangle;
XAxisVertex[1] = new(new(rightBottom.X, 0), AxisColor); if (origin.X > clientRect.Left && origin.X < clientRect.Right ||
YAxisVertex[0] = new(new(0, leftTop.Y), AxisColor); origin.Y > clientRect.Top && origin.Y < clientRect.Bottom)
YAxisVertex[1] = new(new(0, rightBottom.Y), AxisColor); {
var rightBottom = view.Center + size / 2;
XAxisVertex[0] = new(new(leftTop.X, 0), AxisColor);
XAxisVertex[1] = new(new(rightBottom.X, 0), AxisColor);
YAxisVertex[0] = new(new(0, leftTop.Y), AxisColor);
YAxisVertex[1] = new(new(0, rightBottom.Y), AxisColor);
// 绘制坐标轴 // 绘制坐标轴
RenderWindow.Draw(XAxisVertex); RenderWindow.Draw(XAxisVertex);
RenderWindow.Draw(YAxisVertex); RenderWindow.Draw(YAxisVertex);
}
} }
} }
@@ -454,7 +463,16 @@ namespace SpineViewer
{ {
spine.Update(delta); spine.Update(delta);
RenderWindow.Draw(spine); RenderWindow.Draw(spine);
// TODO: 渲染包围盒
if (ShowBounds)
{
var bounds = spine.Bounds;
BoundsRect[0] = BoundsRect[4] = new(new(bounds.Left, bounds.Top), BoundsColor);
BoundsRect[1] = new(new(bounds.Right, bounds.Top), BoundsColor);
BoundsRect[2] = new(new(bounds.Right, bounds.Bottom), BoundsColor);
BoundsRect[3] = new(new(bounds.Left, bounds.Bottom), BoundsColor);
RenderWindow.Draw(BoundsRect);
}
} }
} }
} }