public override AuxiliaryLineParameter ExecuteCore(object operation) { System.Windows.Point mouseUpCoordinateRelatedAuxiliaryLine = (System.Windows.Point)operation; int changeSizeWidth = (int)mouseUpCoordinateRelatedAuxiliaryLine.X - (int)MouseDownRelatedAuxiliaryLine.X; int changeSizeHeight = (int)mouseUpCoordinateRelatedAuxiliaryLine.Y - (int)MouseDownRelatedAuxiliaryLine.Y; Mouse.KindMouseDownAuxiliaryLineArea mouseDownArea = Mouse.GetKindMouseDownAuxiliaryLineArea(AC, MouseDownRelatedAuxiliaryLine); // 拡大を意図しているなら正に、縮小を意図しているなら負になるよう符号を合わせてから処理実行 AuxiliaryLineChangeSizeTemplate changeSizeLogic = null; if (mouseDownArea == Mouse.KindMouseDownAuxiliaryLineArea.RightBottom) { changeSizeLogic = new AuxiliaryLineChangeSizeBottomRight(AC); } else if (mouseDownArea == Mouse.KindMouseDownAuxiliaryLineArea.LeftBottom) { changeSizeWidth = -changeSizeWidth; changeSizeLogic = new AuxiliaryLineChangeSizeBottomLeft(AC); } else if (mouseDownArea == Mouse.KindMouseDownAuxiliaryLineArea.RightTop) { changeSizeHeight = -changeSizeHeight; changeSizeLogic = new AuxiliaryLineChangeSizeTopRight(AC); } else if (mouseDownArea == Mouse.KindMouseDownAuxiliaryLineArea.LeftTop) { changeSizeWidth = -changeSizeWidth; changeSizeHeight = -changeSizeHeight; changeSizeLogic = new AuxiliaryLineChangeSizeTopLeft(AC); } return(changeSizeLogic.Execute(changeSizeWidth, changeSizeHeight)); }
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)); } }