Пример #1
0
 /// <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);
     }
 }
Пример #2
0
        /// <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);
        }
Пример #3
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);
        }
Пример #4
0
        /// <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;
        }
Пример #5
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;
            }
        }
Пример #6
0
 public CodeRect()
 {
     _lt = new CodePos();
     _rb = new CodePos();
 }
Пример #7
0
 /// <summary>
 /// 初期化コンストラクタ
 /// </summary>
 /// <param name="pos"></param>
 /// <param name="stepN"></param>
 public TargetPosition(CodePos pos, int stepN)
 {
     Pos   = pos;
     StepN = stepN;
 }