/// <summary> /// モーションして移動する先を指定する /// </summary> /// <param name="nStep"></param> /// <param name="pos"></param> public void SetMotionPosition(PartsBase part, CodePos pos, int nStep) { lock (_tarPos) { _tarPos[part] = new TargetPosition(pos, nStep); } }
/// <summary> /// 値を指定してインスタンスを作る /// </summary> /// <param name="v1">値1</param> /// <param name="v2">値2</param> /// <returns>インスタンス</returns> public static new CodePos FromInt(int v1, int v2) { var ret = new CodePos { _v1 = v1, _v2 = v2 }; return(ret); }
/// <summary> /// モーション移動対象パーツを1モーションステップ分 進める /// </summary> /// <returns>true=もう一度自己Invalidateでモーション継続が必要</returns> private bool move1step() { var dels = new List <PartsBase>(); var nDone = 0; var ret = false; lock (_tarPos) { foreach (var kv in _tarPos) { var part = kv.Key; var tar = kv.Value; if (part.Rect.LT.Equals(tar.Pos)) { dels.Add(part); tar.StepN = 0; } else { tar.StepN--; if (tar.StepN == 0) { part.Rect = CodeRect.FromLTWH(tar.Pos.X, tar.Pos.Y, part.Rect.Width, part.Rect.Height); dels.Add(part); } else { float dx = tar.Pos.X - part.Rect.LT.X; float dy = tar.Pos.Y - part.Rect.LT.Y; var div = (float)tar.StepN * 2; dx /= div; dy /= div; part.Rect += CodePos.FromInt((int)dx, (int)dy); } nDone++; } } } if (nDone > 0) { ret = true; } foreach (var del in dels) { _tarPos.Remove(del); } _isMoving |= _tarPos.Count > 0 ? Moving.Parts : Moving.None; return(ret); }
/// <summary> /// パーツを指定してインスタンスを初期化する /// </summary> /// <param name="parts"></param> /// <param name="pane"></param> public void AddParts(PartsBase parts, IRichPane pane, CodePos offset) { _lastDevelpType = DevelopType.Unknown; var p = new Pos3 { OrgPane = RichPaneBinder.CreateCopyComplete(pane), NowPane = pane, Org = (CodeRect)parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標) //p.Org = (uCdRect)parts.Rect.Clone() - parts.GetCdPos(pane, _prevShift); // 符号化の座標(符号しない場合、単なるパーツ座標) Pre = (CodeRect)parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標) Now = (CodeRect)parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標) Offset = (CodePos)offset.Clone() }; base[parts] = p; }
/// <summary> /// インスタンスを初期化する /// </summary> /// <param name="with">基準位置とパーツの種類の元情報</param> /// <param name="pane">基準位置のスクロールとズーム値を記憶するためのインプット</param> public void Initialize(PartsCollectionBase with) { Clear(); _lastDevelpType = DevelopType.Unknown; foreach (PartsCollectionBase.PartsEntry pe in with) { var p = new Pos3 { OrgPane = RichPaneBinder.CreateCopyComplete(pe.Pane), NowPane = pe.Pane, Org = (CodeRect)pe.Parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標) Pre = (CodeRect)pe.Parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標) Now = (CodeRect)pe.Parts.Rect.Clone(), // 符号化の座標(符号しない場合、単なるパーツ座標) Offset = CodePos.FromInt(0, 0) }; base[pe.Parts] = p; } }
public CodeRect() { _lt = new CodePos(); _rb = new CodePos(); }
/// <summary> /// 初期化コンストラクタ /// </summary> /// <param name="pos"></param> /// <param name="stepN"></param> public TargetPosition(CodePos pos, int stepN) { Pos = pos; StepN = stepN; }