public void TestRedoSizeChangeOperationWhereTopRight() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); List <AuxiliaryLineParameter> list = new List <AuxiliaryLineParameter>(); list.Add(ac.CloneParameter()); // Width基準でHeightを変更するよう、Width >> height となる値を設定 ChangeAuxiliaryLineSizeWhereTopRight(ac, -100, -5, true); list.Add(ac.CloneParameter()); // Height基準でWidthを変更するよう、Height >> Width となる値を設定 ChangeAuxiliaryLineSizeWhereTopRight(ac, -5, -100, false); list.Add(ac.CloneParameter()); ac.CancelEvent(); AreParameterEqual(list[1], ac); ac.CancelEvent(); AreParameterEqual(list[0], ac); ac.RedoEvent(); AreParameterEqual(list[1], ac); ac.RedoEvent(); AreParameterEqual(list[2], ac); }
private void RotateAuxiliaryLine(AuxiliaryController ac, int degree) { AuxiliaryLineTestData testData = new AuxiliaryLineRotate().Execute(ac, degree); AreParameterEqual(testData, ac); }
public AuxiliaryLineRectangleObserver(Polyline polyline, AuxiliaryController ac) { Polyline = polyline; AC = ac; AC.Attach(this); Draw(AC); }
public void TestUndoAndRedo() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); List <AuxiliaryLineParameter> list = new List <AuxiliaryLineParameter>(); list.Add(ac.CloneParameter()); ac.SetEvent(); ac.PublishEvent(Keys.EnableKeys.Down); list.Add(ac.CloneParameter()); ChangeAuxiliaryLineSizeWhereTopRight(ac, -100, -5, true); list.Add(ac.CloneParameter()); ChangeAuxiliaryLineSizeWhereTopRight(ac, -5, -100, false); list.Add(ac.CloneParameter()); ac.CancelEvent(); AreParameterEqual(list[2], ac); ac.CancelEvent(); AreParameterEqual(list[1], ac); ac.RedoEvent(); AreParameterEqual(list[2], ac); ChangeAuxiliaryLineSizeWhereTopRight(ac, 50, 5, true); list.Add(ac.CloneParameter()); ac.CancelEvent(); AreParameterEqual(list[2], ac); ac.RedoEvent(); AreParameterEqual(list[4], ac); }
public AuxiliaryLineTestData Execute(AuxiliaryController ac, int degree) { Point leftTop = ac.AuxiliaryLeftTop; Point leftBottom = ac.AuxiliaryLeftBottom; Point rightTop = ac.AuxiliaryRightTop; Point rightBottom = ac.AuxiliaryRightBottom; int centerX = CalcCenterX(leftTop, rightBottom); int centerY = CalcCenterY(leftBottom, rightTop); // テストデータ作成 Point newLeftTop = CalcRotatePoint(leftTop, centerX, centerY, degree); Point newLeftBottom = CalcRotatePoint(leftBottom, centerX, centerY, degree); Point newRightTop = CalcRotatePoint(rightTop, centerX, centerY, degree); Point newRightBottom = CalcRotatePoint(rightBottom, centerX, centerY, degree); AuxiliaryLineParameter before = ac.CloneParameter(); AuxiliaryLineTestData testData = new AuxiliaryLineTestData(newLeftTop, newLeftBottom, newRightTop, newRightBottom, degree); if (IsOutOfRangeImagePoint(newLeftTop, ac) || IsOutOfRangeImagePoint(newLeftBottom, ac) || IsOutOfRangeImagePoint(newRightTop, ac) || IsOutOfRangeImagePoint(newRightBottom, ac)) { testData = new AuxiliaryLineTestData(before); } // 回転実施 ac.SetEvent(degree); ac.PublishEvent(null); return(testData); }
public AuxiliaryLineCommand Create(AuxiliaryController ac, Point coordinateRelatedAuxiliaryLine) { // マウス操作を想定 Mouse.KindMouseDownAuxiliaryLineArea area = Mouse.GetKindMouseDownAuxiliaryLineArea(ac, coordinateRelatedAuxiliaryLine); if (area == Mouse.KindMouseDownAuxiliaryLineArea.Else) { return(new AuxiliaryLineNoneOperation(ac)); } else if (area == Mouse.KindMouseDownAuxiliaryLineArea.Inside) { return(new AuxiliaryLineMove(ac, coordinateRelatedAuxiliaryLine)); } else if (ac.AuxiliaryDegree != 0) { // TODO: 回転時は拡大縮小を無効にする(回転時の拡大縮小後パラメーターの計算が難しいため) return(new AuxiliaryLineNoneOperation(ac)); } else { return(new AuxiliaryLineChangeSize(ac, coordinateRelatedAuxiliaryLine)); } }
public void TestCorrectAuxiliaryLineOriginAfterInputCursorKeyUpIfAuxiliaryLineOriginTopIsZero() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); ac.SetEvent(); ac.PublishEvent(Keys.EnableKeys.Up); Assert.AreEqual(0, ac.AuxiliaryTop); }
private void AreParameterEqual(AuxiliaryLineTestData expected, AuxiliaryController actual) { Assert.AreEqual(expected.ExpectLeftTop, actual.AuxiliaryLeftTop); Assert.AreEqual(expected.ExpectLeftBottom, actual.AuxiliaryLeftBottom); Assert.AreEqual(expected.ExpectRightTop, actual.AuxiliaryRightTop); Assert.AreEqual(expected.ExpectRightBottom, actual.AuxiliaryRightBottom); Assert.AreEqual(expected.ExpectDegree, actual.AuxiliaryDegree); }
public TrimmingImageLengthObserver(ContentControl cc, ImageController ic, AuxiliaryController ac) { CC = cc; IC = ic; AC = ac; AC.Attach(this); Draw(AC); }
private void Draw(AuxiliaryController ac) { string width = GetWillTrimmingWidth(ac); string height = GetWillTrimmingHeight(ac); string length = "大まかなトリム領域サイズ: (横 " + width + ", 縦 " + height + ") ※厳密な値にするのはTODO"; CC.Content = length; }
private void Draw(AuxiliaryController ac) { Polyline.Points[0] = Common.ToWindowsPoint(AC.AuxiliaryLeftTop); Polyline.Points[1] = Common.ToWindowsPoint(AC.AuxiliaryRightTop); Polyline.Points[2] = Common.ToWindowsPoint(AC.AuxiliaryRightBottom); Polyline.Points[3] = Common.ToWindowsPoint(AC.AuxiliaryLeftBottom); Polyline.Points[4] = Common.ToWindowsPoint(AC.AuxiliaryLeftTop); // 長方形として閉じる }
public void Update(object o) { AuxiliaryController ac = (AuxiliaryController)o; if (ac == AC) { Draw(ac); } }
public void TestNoChangeAuxiliaryLineSizeIfTooLongWhereTopLeft() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // 原点が変わるような操作の場合(= 左上点を思いっきり右や上に引っ張る操作)、サイズを変更しない // TODO: 対応する? ChangeAuxiliaryLineSizeWhereTopLeft(ac, -1200, -10, true); ChangeAuxiliaryLineSizeWhereTopLeft(ac, -10, -1200, false); }
public void TestAuxiliaryLineRotateMinus() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // 縮小&移動して回転できるスペースを作る ChangeAuxiliaryLineSizeWhereBottomRight(ac, -400, -5, true); MoveAuxiliaryLine(ac, 200, 200); RotateAuxiliaryLine(ac, -20); }
public void TestCorrectAuxiliaryLineParameterAfterOperationThatDecreaseWidthOfAuxiliaryLineWhereTopLeft() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // Width基準でHeightを変更するよう、Width >> height となる値を設定 ChangeAuxiliaryLineSizeWhereTopLeft(ac, -100, -5, true); // Height基準でWidthを変更するよう、Height >> Width となる値を設定 ChangeAuxiliaryLineSizeWhereTopLeft(ac, -5, -100, false); }
public AuxiliaryLineParameter UnExecute(AuxiliaryController ac) { if (CommandListIndex <= 0) { return(ac.CloneParameter()); } CommandListIndex--; return(CommandList[CommandListIndex].BeforeParameter); }
private void MoveAuxiliaryLine(AuxiliaryController ac, System.Windows.Point startPoint, System.Windows.Point finishPoint, int correctLeftAfterMove, int correctTopAfterMove) { ac.SetEvent(startPoint); ac.PublishEvent(finishPoint); Assert.AreEqual(ac.AuxiliaryLeft, correctLeftAfterMove); Assert.AreEqual(ac.AuxiliaryTop, correctTopAfterMove); }
public void TestNoCrashAuxiliaryLineWhenCallPublishEventBeforeAnySetEvent() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // 何もEventを設定していない状態でクラッシュしないことを確認する double mouseUpX = ac.DisplayImageWidth / 2; double mouseUpY = ac.DisplayImageHeight + 30; System.Windows.Point mouseUp = new System.Windows.Point(mouseUpX, mouseUpY); ac.PublishEvent(mouseUp); }
public void TestCorrectAuxiliaryLineSizeIfNoDefineRatio() { RatioType ratioType = RatioType.NoDefined; AuxiliaryController ac = Common.GetAuxiliaryController(Common.TestResourceImage001Path, ratioType); // 縮小 ChangeAuxiliaryLineSizeWhereBottomRight(ac, -100, -5, true); // 拡大 ChangeAuxiliaryLineSizeWhereBottomRight(ac, 50, 1, true); }
public void TestAuxiliaryLineChangeSizeTopLeftAfterRotate() { // 回転後に拡大縮小する AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // 縮小&移動&回転 ChangeAuxiliaryLineSizeWhereBottomRight(ac, -400, -5, true); MoveAuxiliaryLine(ac, 200, 200); RotateAuxiliaryLine(ac, -20); ChangeAuxiliaryLineSizeWhereTopLeft(ac, 50, 5, true); }
public void TestCorrectWidthAndHeightOfInitAuxiliaryLineRatioW4H3IfImageWidthLongerThanImageHeight() { RatioType ratioType = RatioType.W4H3; AuxiliaryController ac = Common.GetAuxiliaryController(Common.TestResourceImage001Path, ratioType); double ratio = (double)WidthRatio(ratioType) / (double)HeightRatio(ratioType); int fittedHeight = ac.DisplayImageHeight; int fittedWidth = (int)((double)fittedHeight * ratio); Assert.AreEqual(fittedWidth, ac.AuxiliaryRight); Assert.AreEqual(fittedHeight, ac.AuxiliaryBottom); }
private void ChangeAuxiliaryLineSizeWhereTopLeft(AuxiliaryController ac, int changeSizeWidth, int changeSizeHeight, bool isWidthMuchLongerThanHeight) { AuxiliaryLineTestData testData = new AuxiliaryLineChangeSizeTopLeft(ac).ChangeSize(changeSizeWidth, changeSizeHeight, isWidthMuchLongerThanHeight); AreParameterEqual(testData, ac); }
public void TestAuxiliaryLineFitImageWhenChangeAuxiliaryLineSizeTooLongerThanImageSizeTopLeft() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // 補助線矩形が画像からはみ出るような操作の場合、矩形サイズが画像一杯のサイズになるよう制御する // ユーザー操作としてあり得るのは画像より小さい補助線矩形を画像一杯に合わせる操作 // -> まず補助線矩形を画像より小さくする ChangeAuxiliaryLineSizeWhereTopLeft(ac, -100, -5, true); // 実際に画像からはみ出るような操作をする ChangeAuxiliaryLineSizeWhereTopLeft(ac, 200, 10, true); }
public AuxiliaryLineParameter ReExecute(AuxiliaryController ac) { if (CommandListIndex >= CommandList.Count) { return(ac.CloneParameter()); } AuxiliaryLineParameter redo = CommandList[CommandListIndex].AfterParameter; CommandListIndex++; return(redo); }
public void TestRedoNoProcessBeforeAtLeastOneOperation() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); int beforeRight = ac.AuxiliaryRight; int beforeBottom = ac.AuxiliaryBottom; ac.RedoEvent(); Assert.AreEqual(beforeRight, ac.AuxiliaryRight); Assert.AreEqual(beforeBottom, ac.AuxiliaryBottom); Assert.AreEqual(0, ac.AuxiliaryTop); Assert.AreEqual(0, ac.AuxiliaryLeft); }
public void TestUndoInputCursorKeyLeft() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); ac.SetEvent(); ac.PublishEvent(Keys.EnableKeys.Left); Assert.AreEqual(0, ac.AuxiliaryTop); Assert.AreEqual(0, ac.AuxiliaryLeft); ac.CancelEvent(); Assert.AreEqual(0, ac.AuxiliaryTop); Assert.AreEqual(0, ac.AuxiliaryLeft); }
private bool IsOutOfRangeImagePoint(Point p, AuxiliaryController ac) { if (p.X < 0 || ac.DisplayImageWidth < p.X) { return(true); } if (p.Y < 0 || ac.DisplayImageHeight < p.Y) { return(true); } return(false); }
public void TestAuxiliaryLineNoRotateIfAuxiliaryLineOutOfRangeAfterRotate() { // 回転すると画像からはみ出る場合は回転しない AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); // 縮小&移動して回転できそうなスペースを作る(実際には回転させたくない) ChangeAuxiliaryLineSizeWhereBottomRight(ac, -100, -5, true); MoveAuxiliaryLine(ac, 100, 80); AuxiliaryLineParameter before = ac.CloneParameter(); AuxiliaryLineTestData testData = new AuxiliaryLineRotate().Execute(ac, 20); AreParameterEqual(before, ac); }
public void TestCorrectWidthAndHeightOfInitAuxiliaryLineIfImageHeightLongerThanImageWidth() { RatioType ratioType = RatioType.W9H16; AuxiliaryController ac = Common.GetAuxiliaryController(Common.TestResourceImage002Path, ratioType); double ratio = (double)WidthRatio(ratioType) / (double)HeightRatio(ratioType); int fittedHeight = ac.DisplayImageHeight; int fittedWidth = (int)((double)fittedHeight * ratio); int actualWidth = Common.GetAuxiliaryWidth(ac); int actualHeight = Common.GetAuxiliaryHeight(ac); Assert.AreEqual(fittedWidth, actualWidth); Assert.AreEqual(fittedHeight, actualHeight); }
public void TestAuxiliaryLineFitImageIfMoveByMouseTooFarMoveDistanceToRightBottom() { AuxiliaryController ac = Common.GetAuxiliaryControllerImage001RatioTypeW16H9(); System.Windows.Point startMovePoint = new System.Windows.Point(ac.AuxiliaryRight / 2, ac.AuxiliaryBottom / 2); int tooMoveX = 3000; int tooMoveY = 3000; // 右下方向テスト System.Windows.Point finishMovePoint = new System.Windows.Point(tooMoveX, tooMoveY); int correctLeft = ac.DisplayImageWidth - ac.AuxiliaryRight; int correctTop = ac.DisplayImageHeight - ac.AuxiliaryBottom; MoveAuxiliaryLine(ac, startMovePoint, finishMovePoint, correctLeft, correctTop); }