コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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;
            }
        }