/// <summary> /// get screen position /// </summary> /// <param name="pane"></param> /// <returns></returns> public virtual ScreenPos GetScreenPos(IDrawArea pane, CodePos <TCX, TCY> codepos) { var lpos = new LayoutPos { X = PositionerX(codepos.X, codepos.Y), Y = PositionerY(codepos.X, codepos.Y), }; return(ScreenPos.From(pane, lpos)); }
/// <summary> /// Calc Layout position /// </summary> /// <param name="codepos"></param> /// <returns></returns> public virtual LayoutPos GetLayoutPos(CodePos <TCX, TCY> codepos) { var lpos = new LayoutPos { X = PositionerX(codepos.X, codepos.Y), Y = PositionerY(codepos.X, codepos.Y), }; return(lpos); }
public void Move(IDrawArea pane, ScreenSize offset) { var s0 = GetScreenPos(pane, PositionBackup); var s1 = s0 + offset; var l1 = LayoutPos.From(pane, s1); var cl = CoderX(l1.X, l1.Y); var ca = CoderY(l1.X, l1.Y); Location = CodePos <Distance, Angle> .From(cl, ca); }
public void OnPointerPressed(PointerState po) { //Debug.WriteLine($"★OnPointerPressed {po.Position} finger={po.FingerCount} Scale={po.Scale}"); if (getTrigger(po) == PointerState.DeviceTypes.Mouse) { if (isZooming == false) { _sPosDown = po.Position; _lPosDown = LayoutPos.From(Pane.Target, po.Position); _sZoomDown = ScreenPos.From(Pane.Target.ZoomX, Pane.Target.ZoomY); _lScrollDown = LayoutPos.From(Pane.Target.ScrollX, Pane.Target.ScrollY); isZooming = true; } } }
public LayoutPos GetLayoutPos(Angle A) { var lw = TargetProcess.PositionerX(CodeX <Distance> .From(TargetProcess.Width / 2 + Width / 2), CodeY <Distance> .From(TargetProcess.Height / 2 + Height / 2)); var lh = TargetProcess.PositionerY(CodeX <Distance> .From(TargetProcess.Width / 2 + Width / 2), CodeY <Distance> .From(TargetProcess.Height / 2 + Height / 2)); var lpos = TargetProcess.GetLayoutPos(); // Parts Location var lois = GeoEu.GetLocationOfInscribedSquareInCircle(A); // Connector Location Unit (0.7 times) return(LayoutPos.From( lpos.X // Parts Location + lw * MathUtil.Root2 // R (Circle of the four vertices) * lois.X, // Location of inscribed square in circle lpos.Y // Parts Location + lh * MathUtil.Root2 // R (Circle of the four vertices) * lois.Y // Location of inscribed square in circle )); }
public Angle GetAngle(LayoutPos lpos) { var lpos0 = TargetProcess.GetLayoutPos(); // Parts Location return(GeoEu.Angle(0.0, 0.0, lpos.X.Lx - lpos0.X.Lx, -(lpos.Y.Ly - lpos0.Y.Ly))); }
/// <summary> /// Get code position Y /// </summary> /// <param name="pane"></param> /// <param name="spos"></param> /// <returns></returns> public CodeY <TCY> GetCodeY(IDrawArea pane, ScreenPos spos) { var lpos = LayoutPos.From(pane, spos); return(CoderY(lpos.X, lpos.Y)); }
/// <summary> /// Get code position X /// </summary> /// <param name="pane"></param> /// <param name="spos"></param> /// <returns></returns> public CodeX <TCX> GetCodeX(IDrawArea pane, ScreenPos spos) { var lpos = LayoutPos.From(pane, spos); return(CoderX(lpos.X, lpos.Y)); }
/// <summary> /// Get code position from screen position /// </summary> /// <param name="pane"></param> /// <param name="spos">screen position</param> /// <returns></returns> public CodePos <TCX, TCY> GetCodePos(IDrawArea pane, ScreenPos spos) { var lpos = LayoutPos.From(pane, spos); return(CodePos <TCX, TCY> .From(CoderX(lpos.X, lpos.Y), CoderY(lpos.X, lpos.Y))); }
public void OnPointerMoved(PointerState po) { //Debug.WriteLine($"★OnPointerMoved {po.Position} finger={po.FingerCount} Scale={po.Scale}"); if (po.Scale != 1.0f || isZooming) { if (isZooming == false) { _sPosDown = po.Position; _lPosDown = LayoutPos.From(Pane.Target, po.Position); _sZoomDown = ScreenPos.From(Pane.Target.ZoomX, Pane.Target.ZoomY); _lScrollDown = LayoutPos.From(Pane.Target.ScrollX, Pane.Target.ScrollY); isZooming = true; } ScreenPos sZoom; var lScroll = _lScrollDown; var sMove = po.Position - _sPosDown; // pointer move distance switch (getTrigger(po)) { case PointerState.DeviceTypes.Mouse: sZoom = _sZoomDown + sMove * (0.003 * SpeedX, 0.003 * SpeedY); // ズーム値の算出 速度変更(高解像度に伴い) 2016.11.15 Tono 2→3 break; case PointerState.DeviceTypes.Touch: sZoom = _sZoomDown * po.Scale; break; default: OnPointerReleased(po); return; } // sZoom.TrimMinimum(ScreenX.From(500), ScreenY.From(500)); sZoom.TrimMinimum(ScreenX.From(0.2), ScreenY.From(0.2)); // 小さい値に対応 sZoom.TrimMaximum(ScreenX.From(100000), ScreenY.From(100000)); var isChanged = false; if (Pane.Target.ZoomX != sZoom.X || Pane.Target.ZoomY != sZoom.Y) { Pane.Target.ZoomX = sZoom.X; Pane.Target.ZoomY = sZoom.Y; Token.Link(po, new EventTokenPaneChanged { TokenID = TokensGeneral.Zoomed, Sender = this, Remarks = "drag zoom", TargetPane = Pane.Target, }); isChanged = true; } //if (Pane.Target.ScrollX != lScroll.X.Lx || Pane.Target.ScrollY != lScroll.Y.Ly) //{ // Pane.Target.ScrollX = lScroll.X.Lx; // Pane.Target.ScrollY = lScroll.Y.Ly; // Token.Link(po, new EventTokenPaneChanged // { // TokenID = TokensGeneral.Scrolled, // Sender = this, // Remarks = "auto scroll when drag zoom", // TargetPane = Pane.Target, // }); // isChanged = true; //} if (isChanged) { onZoomed(); Redraw(); } } }