Files
UVtools/UVtools.Core/Operations/OperationMove.cs
T
Tiago Conceição b2bd1c41f1 v0.6.2.0
* (Add) PrusaSlicer Printer: Elegoo Mars 2 Pro
* (Add) PrusaSlicer Printer: Creality LD-002H
* (Add) PrusaSlicer Printer: Voxelab Polaris
* (Add) File Format: UVJ (#8)
* (Add) Mutataor: Pixel Dimming
* (Add) Pixel Editor tab with new drawing functions
* (Add) Pixel Editor: Bursh area and shape
* (Add) Pixel Editor: Supports
* (Add) Pixel Editor: Drain holes
* (Add) Settings for pixel editor
* (Add) Setting: File open default directory
* (Add) Setting: File save default directory
* (Add) Setting: File extract default directory
* (Add) Setting: File convert default directory
* (Add) Setting: File save prompt for overwrite (#10)
* (Add) Setting: File save preffix and suffix name
* (Add) Setting: UVtools version to the title bar
* (Improvement) Force same directory as input file on dialogs
* (Improvement) Pattern: Better positioning when not using an anchor, now it's more center friendly
* (Change) Setting: Start maximized defaults to true
* (Fix) Pattern: Calculated volume was appending one margin width/height more
* (Fix) When cancel a file load, some shortcuts can crash the program as it assume file is loaded
* (Fix) pws: Encode using the same count-of-threshold method as CBDDLP (ezrec/uv3dp#79)
2020-07-14 02:55:37 +01:00

100 lines
3.4 KiB
C#

/*
* GNU AFFERO GENERAL PUBLIC LICENSE
* Version 3, 19 November 2007
* Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
* Everyone is permitted to copy and distribute verbatim copies
* of this license document, but changing it is not allowed.
*/
using System;
using System.Drawing;
namespace UVtools.Core.Operations
{
public enum Anchor : byte
{
TopLeft, TopCenter, TopRight,
MiddleLeft, MiddleCenter, MiddleRight,
BottomLeft, BottomCenter, BottomRight,
None
}
public class OperationMove
{
public Rectangle SrcRoi { get; set; }
private Rectangle _dstRoi = Rectangle.Empty;
public Rectangle DstRoi
{
get
{
if(!_dstRoi.IsEmpty) return _dstRoi;
CalculateDstRoi();
return _dstRoi;
}
}
public void CalculateDstRoi()
{
_dstRoi.Size = SrcRoi.Size;
switch (Anchor)
{
case Anchor.TopLeft:
_dstRoi.Location = new Point(0, 0);
break;
case Anchor.TopCenter:
_dstRoi.Location = new Point((int)(ImageWidth / 2 - SrcRoi.Width / 2), 0);
break;
case Anchor.TopRight:
_dstRoi.Location = new Point((int)(ImageWidth - SrcRoi.Width), 0);
break;
case Anchor.MiddleLeft:
_dstRoi.Location = new Point(0, (int)(ImageHeight / 2 - SrcRoi.Height / 2));
break;
case Anchor.MiddleCenter:
_dstRoi.Location = new Point((int)(ImageWidth / 2 - SrcRoi.Width / 2), (int)(ImageHeight / 2 - SrcRoi.Height / 2));
break;
case Anchor.MiddleRight:
_dstRoi.Location = new Point((int)(ImageWidth - SrcRoi.Width), (int)(ImageHeight / 2 - SrcRoi.Height / 2));
break;
case Anchor.BottomLeft:
_dstRoi.Location = new Point(0, (int)(ImageHeight - SrcRoi.Height));
break;
case Anchor.BottomCenter:
_dstRoi.Location = new Point((int)(ImageWidth / 2 - SrcRoi.Width / 2), (int)(ImageHeight - SrcRoi.Height));
break;
case Anchor.BottomRight:
_dstRoi.Location = new Point((int)(ImageWidth - SrcRoi.Width), (int)(ImageHeight - SrcRoi.Height));
break;
default:
throw new ArgumentOutOfRangeException();
}
_dstRoi.X += MarginLeft;
_dstRoi.X -= MarginRight;
_dstRoi.Y += MarginTop;
_dstRoi.Y -= MarginBottom;
}
public uint ImageWidth { get; set; }
public uint ImageHeight { get; set; }
public Anchor Anchor { get; set; }
public int MarginLeft { get; set; } = 0;
public int MarginTop { get; set; } = 0;
public int MarginRight { get; set; } = 0;
public int MarginBottom { get; set; } = 0;
public OperationMove(Rectangle srcRoi, uint imageWidth = 0, uint imageHeight = 0, Anchor anchor = Anchor.MiddleCenter)
{
SrcRoi = srcRoi;
ImageWidth = imageWidth;
ImageHeight = imageHeight;
Anchor = anchor;
}
}
}