Exemple #1
0
        private void PanelPreView_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            //previewKey
            //部品選択中か確認

            //GetElement
            if (mNowSelectIndex == null)
            {
                return;
            }
            ELEMENTS nowEle = TimeLine.EditFrame.GetElement((int)mNowSelectIndex);

            //カーソル
            if (e.KeyData == Keys.Shift)
            {
                //Scaling
                //shift+
                if (e.KeyData == Keys.Up)
                {
                }
                if (e.KeyData == Keys.Down)
                {
                }
                if (e.KeyData == Keys.PageUp)
                {
                }

                if (e.KeyData == Keys.PageDown)
                {
                }
            }
            if (e.KeyData == Keys.Control)
            {
            }
        }
Exemple #2
0
        private void panel_Control_MouseClick(object sender, MouseEventArgs e)
        {
            //Item選択
            var work = e.Y / TIME_CELL_HEIGHT;

            //Item最大数を確認
            if (work < mTimeLine.EditFrame.ElementsCount)
            {
                ELEMENTS ele = mTimeLine.EditFrame.GetElement(work);
                ele.Select      = !ele.Select;
                mSelectElements = work;

                if (e.X < 32)
                {
                    //Click Eye
                    if (e.X < 16)
                    {
                        ele.Atr.Visible = !ele.Atr.Visible;
                    }
                    //Click Locked
                    if (e.X > 16)
                    {
                        ele.Atr.Enable = !ele.Atr.Enable;
                    }
                }

                panel_Control.Refresh();
                panel_Time.Refresh();
                mFormMain.Refresh();
            }
        }
Exemple #3
0
        private void PanelPreView_MouseWheel(object sender, MouseEventArgs e)
        {
            mWheelDelta = (e.Delta > 0)? +1:-1;  //+/-に適正化
            if (mNowSelectIndex != null)
            {
                ELEMENTS nowEle = TimeLine.EditFrame.GetElement((int)mNowSelectIndex);
                //アイテム選択中のホイール操作
                if (mKeysSP == Keys.Shift)
                {
                    //Shift+Wheel 部品の拡縮 0.1単位 最小0.1に制限
                    mDragState          = DragState.Scale;
                    nowEle.Atr.Scale.X += ((nowEle.Atr.Scale.X + mWheelDelta / 10f) > 0.1f) ? mWheelDelta / 10f : 0.1f;
                    nowEle.Atr.Scale.Y += ((nowEle.Atr.Scale.Y + mWheelDelta / 10f) > 0.1f) ? mWheelDelta / 10f : 0.1f;
                    //nowEle.Atr.Scale.Z += ((nowEle.Atr.Scale.Z + mWheelDelta / 10f) > 0.1f) ? mWheelDelta / 10f : 0.1f;
                }
                if (mKeysSP == Keys.Control)
                {
                    //Ctrl+Wheel 回転 1度単位
                    mDragState = DragState.Angle;

                    float w = nowEle.Atr.Radius.X + mWheelDelta;
                    if (w >= 360)
                    {
                        nowEle.Atr.Radius.X = w % 360;
                    }
                    else if (w < 0)
                    {
                        nowEle.Atr.Radius.X = 360 - (float)Math.Acos(w % 360);
                    }
                    else
                    {
                        nowEle.Atr.Radius.X += mWheelDelta;
                    }
                }
                mFormAttribute.SetAllParam(nowEle.Atr);
                panel_PreView.Refresh();
            }
            else
            {
                //画面の拡大縮小
                if (mWheelDelta > 0)
                {
                    if (HScrollBar_ZoomLevel.Value > HScrollBar_ZoomLevel.Minimum)
                    {
                        HScrollBar_ZoomLevel.Value -= mWheelDelta;
                    }
                }
                else
                {
                    if (HScrollBar_ZoomLevel.Value < HScrollBar_ZoomLevel.Maximum)
                    {
                        HScrollBar_ZoomLevel.Value -= mWheelDelta;
                    }
                }

                mWheelDelta = 0;
            }
            StatusLabel2.Text = $"{mWheelDelta}";
        }
Exemple #4
0
        private void PanelPreView_MouseMove(object sender, MouseEventArgs e)
        {
            float zoom = HScrollBar_ZoomLevel.Value / mParZOOM;
            //e.X,Yからステージ上の座標にする
            float stPosX = (e.X - (panel_PreView.Width / 2)) / zoom;
            float stPosY = (e.Y - (panel_PreView.Height / 2)) / zoom;

            if (mNowSelectIndex != null)
            {
                ELEMENTS nowEle = TimeLine.EditFrame.GetElement((int)mNowSelectIndex);
                //移動処理
                if (mMouseLDown)
                {
                    if (nowEle != null)
                    {
                        //+CTRL マウスでの回転 左周りにしかなってない
                        if (mKeysSP == Keys.Control)
                        {
                            float w = nowEle.Atr.Radius.X + mMouseDownShift.X;
                            if (w > 360)
                            {
                                nowEle.Atr.Radius.X = w % 360;
                            }
                            else if (w < 0)
                            {
                                nowEle.Atr.Radius.X = 360 - (w % 360);
                            }
                            else
                            {
                                nowEle.Atr.Radius.X += mMouseDownShift.X;
                            }

                            //w = nowEle.Atr.Radius.Y + mMouseDownShift.Y;
                            //nowEle.Atr.Radius.Y = (w > 360) ? w - 360 : 360 - w;
                            //シフトキーも押されていればZ回転 等(将来)
                        }
                        //if( mKeysSP==Keys.Alt) //将来用
                        else
                        {
                            //差分加算
                            mDragState            = DragState.Move;
                            nowEle.Atr.Position.X = stPosX + mMouseDownShift.X;
                            nowEle.Atr.Position.Y = stPosY + mMouseDownShift.Y;
                            mFormAttribute.SetAllParam(nowEle.Atr);
                        }
                    }
                    else
                    {
                        //アイテム選択が無い場合のLドラッグはステージのXYスクロール
                        mDragState      = DragState.Scroll;
                        mScreenScroll.X = (e.X - (panel_PreView.Width / 2)) - mMouseDownPoint.X;
                        mScreenScroll.Y = (e.Y - (panel_PreView.Height / 2)) - mMouseDownPoint.Y;
                    }
                    panel_PreView.Refresh();
                }
            }
            StatusLabel.Text  = $"[X:{stPosX:####}/Y:{stPosY:####}] [Px:{mMouseDownPoint.X:####}/Py:{mMouseDownPoint.Y:####}]";
            StatusLabel2.Text = $" [Select:{mNowSelectIndex}][ScX{mScreenScroll.X:###}/ScY{mScreenScroll.Y:###}] [Zoom:{zoom}]{mDragState.ToString()}:{mWheelDelta}";
        }
Exemple #5
0
        public ELEMENTS Clone()
        {
            ELEMENTS retEle = new ELEMENTS();

            retEle.Atr = new AttributeBase(this.Atr);
            retEle.Tag = this.Tag;
            return(retEle);
        }
Exemple #6
0
        public void RenameElements(object hash, string newName)
        {
            if (hash == null)
            {
                return;
            }
            int?hashB = (int)hash;

            ELEMENTS ret = mFrame.Find((ELEMENTS e) => e.GetHashCode() == hashB);

            ret.Name = newName;
        }
Exemple #7
0
 public ELEMENTS(ELEMENTS elm)
 {
     Select = false;
     Name   = elm.Name;
     Tag    = elm.Tag;
     Value  = elm.Value;
     Atr    = new AttributeBase(elm.Atr);
     Parent = elm.Parent;
     Child  = elm.Child;
     Next   = elm.Next;
     Prev   = elm.Prev;
 }
Exemple #8
0
        /// <summary>
        /// フレームLinear補完
        /// </summary>
        /// <param name="rate">重み</param>
        /// <param name="Index1">対象1</param>
        /// <param name="Index2">対象2</param>
        /// <returns></returns>
        public FRAME FrameCompLinier(int Index1, int Index2, float rate)
        {
            //座標差分を取る?
            FRAME ret = gmTimeLine[Index1].Clone();

            for (int cnt = 0; cnt < gmTimeLine[Index1].ElementsCount; cnt++)
            {
                ELEMENTS ele1 = gmTimeLine[Index1].GetElement(cnt);
                ELEMENTS ele2 = gmTimeLine[Index2].GetElement(cnt);
                ELEMENTS rest = ret.GetElement(cnt);
                rest.Atr.Position = Vector3.Linear(ele1.Atr.Position, ele2.Atr.Position, rate);
            }
            return(ret);
        }
Exemple #9
0
        public void AddElementsFromCEll(CELL work, int x, int y)
        {
            //アイテムの登録
            ELEMENTS elem = new ELEMENTS();

            elem.Atr        = new AttributeBase();
            elem.Atr.CellID = work.GetHashCode();
            elem.Atr.Width  = work.Img.Width;
            elem.Atr.Height = work.Img.Height;

            //画像サイズ半分シフトして画像中心をセンターに
            x -= elem.Atr.Width / 2;
            y -= elem.Atr.Height / 2;

            elem.Atr.Position = new Vector3(x, y, 0);
        }
Exemple #10
0
 public bool SetElements(int index, ELEMENTS e)
 {
     if (mFrame == null)
     {
         return(false);
     }
     if (index < 0)
     {
         return(false);
     }
     if (index > mFrame.Count)
     {
         return(false);
     }
     mFrame[index] = e;
     return(true);
 }
Exemple #11
0
        /// <summary>
        /// CellからElementを作成し追加
        /// </summary>
        /// <param name="work"></param>
        /// <param name="x">クリック座標(Cliant)</param>
        /// <param name="y">クリック座標(Cliant)</param>
        private void AddElements(CELL work, int x, int y)
        {
            //アイテムの登録
            ELEMENTS elem = new ELEMENTS();

            elem.Atr        = new AttributeBase();
            elem.Atr.CellID = work.GetHashCode();
            elem.Atr.Width  = work.Img.Width;
            elem.Atr.Height = work.Img.Height;
            elem.Tag        = elem.GetHashCode();

            //センターからの距離に変換
            x -= panel_PreView.Width / 2;
            y -= panel_PreView.Height / 2;
            //さらに画像サイズ半分シフトして画像中心をセンターに
            x -= elem.Atr.Width / 2;
            y -= elem.Atr.Height / 2;

            elem.Atr.Position = new Vector3(x, y, 0);
            elem.Name         = elem.GetHashCode().ToString("X8");//仮名

            //Show - Attribute
            mFormAttribute.SetAllParam(elem.Atr);

            TimeLine.EditFrame.AddElements(elem); //Elements登録
            TimeLine.Store();                     //
            // "Motion"固定決め打ちしてるのはあとでモーション名管理変数に置き換え

            //TreeNode selNode = treeView_Project.Nodes[mNowMotionName];
            TreeNode selNode = treeView_Project.Nodes["Motion"];

            selNode.Nodes.Add(elem.Name, elem.Name);
            selNode.Expand();
            selNode.Nodes[elem.Name].Tag                = elem.GetHashCode();
            selNode.Nodes[elem.Name].ImageIndex         = 4;
            selNode.Nodes[elem.Name].SelectedImageIndex = 3;

            //Control更新
            mFormControl.Refresh();
        }
Exemple #12
0
        private void PanelPreView_MouseDown(object sender, MouseEventArgs e)
        {
            //e.X,Yからステージ上の座標にする
            float zoom   = HScrollBar_ZoomLevel.Value / mParZOOM;
            float stPosX = ((e.X - (panel_PreView.Width / 2)) / zoom);
            float stPosY = ((e.Y - (panel_PreView.Height / 2)) / zoom);

            //Item選択中なら移動変形処理等の準備
            if (e.Button == MouseButtons.Left)
            {
                mMouseDownPoint = new Point(e.X - (panel_PreView.Width / 2), e.Y - (panel_PreView.Height / 2));

                //アイテム検索
                mNowSelectIndex = TimeLine.EditFrame.SelectElement((int)stPosX, (int)stPosY, true);
                if (mNowSelectIndex != null)
                {
                    ELEMENTS nowEle = TimeLine.EditFrame.GetElement((int)mNowSelectIndex);
                    mMouseDownShift.X = (int)(nowEle.Atr.Position.X - stPosX);
                    mMouseDownShift.Y = (int)(nowEle.Atr.Position.Y - stPosY);
                }
                mMouseLDown = true;
                panel_PreView.Refresh();
            }
        }
Exemple #13
0
        private void panel_Time_Paint(object sender, PaintEventArgs e)
        {
            //TimeLine
            int inWidth = this.panel_Time.Width;
            int inHeight = this.panel_Time.Height;
            int inFrame = (int)this.numericUpDown_MaxFrame.Value;
            int CellWidth = TIME_CELL_WIDTH;
            int CellHeight = TIME_CELL_HEIGHT;
            int inCnt, inMax = 5;

            //全消去
            e.Graphics.Clear(Color.Black);

            //以下、横ライン描画処理

            //e.Graphics.DrawLine(Pens.Black, 0, CellHeight, inWidth - 1, CellHeight);

            if (mTimeLine == null)
            {
                return;
            }
            inMax = mTimeLine.EditFrame.ElementsCount;//現在フレームのElements数
            for (inCnt = 0; inCnt < inMax; inCnt++)
            {
                SolidBrush sb = new SolidBrush(Color.FromArgb(64, Color.Gray));
                //e.Graphics.DrawLine(Pens.Black, 0, inY, inWidth, inY);
                //選択中Elementsの背景強調
                ELEMENTS ele = mTimeLine.EditFrame.GetElement(inCnt);

                if ((inCnt % 2) != 0)
                {
                    e.Graphics.FillRectangle(sb, 0, inCnt * CellHeight, panel_Time.Width, CellHeight - 1);
                }
                if (ele.Select)
                {
                    sb = new SolidBrush(Color.FromArgb(64, Color.Green));
                    e.Graphics.FillRectangle(sb, 0, inCnt * CellHeight, panel_Time.Width, CellHeight - 1);
                }
            }

            //以下、縦ライン描画処理

            for (inCnt = 0; inCnt < inFrame; inCnt++)
            {
                var pen = Pens.CadetBlue;

                //5の倍数の時(グレイ)
                if (inCnt % 5 == 0)
                {
                    pen = Pens.DarkGreen;
                }
                //現在のフレームの時(赤)
                if (inCnt == numericUpDown_NowFlame.Value)
                {
                    SolidBrush sb = new SolidBrush(Color.FromArgb(64, Color.Red));
                    e.Graphics.FillRectangle(sb, inCnt * CellWidth, 0, CellWidth, inHeight - 1);
                }
                //標準(黒)
                e.Graphics.DrawLine(pen, inCnt * CellWidth, 0, inCnt * CellWidth, inHeight);

                //Draw FRAMEtype
                FRAME frm = mTimeLine.GetFrame(inCnt);
                if (frm != null)
                {
                    if (frm.Type == FRAME.TYPE.KeyFrame)
                    {
                        SolidBrush sb = new SolidBrush(Color.FromArgb(64, Color.Aquamarine));
                        e.Graphics.FillRectangle(sb, inCnt * CellWidth, 0, CellWidth, inHeight - 1);
                    }
                    if (frm.Type == FRAME.TYPE.Control)
                    {
                    }
                }
            }


            //DrawDragArea
            if (!mSelect_Pos_End.IsEmpty)
            {
                //選択範囲の網掛け
                SolidBrush sb = new SolidBrush(Color.FromArgb(128, 0, 0, 128));
                e.Graphics.FillRectangle(sb, mSelect_Pos_Start.X * TIME_CELL_WIDTH, 0, (mSelect_Pos_End.X - mSelect_Pos_Start.X) * TIME_CELL_WIDTH, inHeight - 1);
            }
        }
Exemple #14
0
        private void panel_Control_Paint(object sender, PaintEventArgs e)
        {
            int inWidth  = this.panel_Control.Width;
            int inHeight = this.panel_Control.Height;

            //以下、イメージリスト描画処理
            e.Graphics.Clear(Color.Black);

            //以下、横ライン描画処理
            int inY = TIME_CELL_HEIGHT;
            //e.Graphics.DrawLine(Pens.Black, 0, inY, inWidth, inY);

            int inMax = mTimeLine.EditFrame.ElementsCount;

            for (int inCnt = 0; inCnt < inMax; inCnt++)
            {
                ELEMENTS   ele = mTimeLine.EditFrame.GetElement(inCnt);
                SolidBrush sb  = new SolidBrush(Color.Black);
                if (ele == null)
                {
                    continue;
                }
                //背景塗り
                if (inCnt % 2 != 0)
                {
                    sb = new SolidBrush(Color.FromArgb(0xff, 30, 30, 40));
                    e.Graphics.FillRectangle(sb, 0, inCnt * TIME_CELL_HEIGHT, panel_Control.Width, TIME_CELL_HEIGHT - 1);
                }
                if (ele.Select)
                {
                    //選択中Elementsの背景強調
                    sb = new SolidBrush(Color.FromArgb(64, Color.Green));
                    e.Graphics.FillRectangle(sb, 0, inCnt * TIME_CELL_HEIGHT, panel_Control.Width, TIME_CELL_HEIGHT - 1);
                }
                //ステートマーク 目,鍵
                if (ele.Atr.Visible)
                {
                    e.Graphics.DrawImage(Properties.Resources.see, 2, inCnt * TIME_CELL_HEIGHT);
                }
                else
                {
                    e.Graphics.DrawImage(Properties.Resources.unSee, 2, inCnt * TIME_CELL_HEIGHT);
                }
                //ステートマーク 目,鍵
                if (ele.Atr.Enable)
                {
                    e.Graphics.DrawImage(Properties.Resources.locked, 18, inCnt * TIME_CELL_HEIGHT);
                }
                else
                {
                    e.Graphics.DrawImage(Properties.Resources.unLock, 18, inCnt * TIME_CELL_HEIGHT);
                }
                //以下、名前描画処理
                if (!string.IsNullOrEmpty(ele.Name))
                {
                    e.Graphics.DrawString(ele.Name, mFont, Brushes.White, 48, inCnt * TIME_CELL_HEIGHT);
                }
            }

            //e.Graphics.FillRectangle(Brushes.Lime, new Rectangle(0, 0, 500, 500));
        }
Exemple #15
0
        public ELEMENTS GetElementsFromHash(int hash)
        {
            ELEMENTS ret = mFrame.Find((ELEMENTS e) => e.GetHashCode() == hash);

            return(ret);
        }
Exemple #16
0
 public void AddElements(ELEMENTS e)
 {
     mFrame.Add(e);
 }
Exemple #17
0
        private void DrawParts(object sender, Graphics g)
        {
            //なんだか遅いなぁ・・ちらつくなぁ・・
            //表示の仕方も悩む 親もマーク表示するか 等
            //StageInfomation
            float zoom = HScrollBar_ZoomLevel.Value / mParZOOM;

            if (zoom < 0.2)
            {
                zoom = 0.2f;
            }
            int vcx = mScreenScroll.X + panel_PreView.Width / 2;  //ViewCenter X
            int vcy = mScreenScroll.Y + panel_PreView.Height / 2; //ViewCenter Y

            FRAME frm = TimeLine.EditFrame;

            for (int cnt = 0; cnt < frm.ElementsCount; cnt++)
            {
                ELEMENTS      e      = frm.GetElement(cnt);
                AttributeBase atr    = e.Atr;
                Matrix        Back   = g.Transform;
                Matrix        MatObj = new Matrix();

                float vsx = atr.Width * atr.Scale.X;  //* zoom;//SizeX
                float vsy = atr.Height * atr.Scale.Y; // * zoom;//SizeY

                CELL c = ImageMan.GetCellFromHash(atr.CellID);
                if (c == null)
                {
                    Console.WriteLine("Image:null"); return;
                }

                //原点を部品中心に
                //g.TranslateTransform(   vcx + (atr.Position.X + atr.Width/2)  * atr.Scale.X *zoom,
                //                        vcy + (atr.Position.Y + atr.Height/2) * atr.Scale.Y *zoom);//部品中心座標か?


                //平行移動
                g.TranslateTransform(vcx + (atr.Position.X * atr.Scale.X), vcy + (atr.Position.Y * atr.Scale.Y));
                //回転角指定
                g.RotateTransform(atr.Radius.X);
                //スケーリング調
                g.ScaleTransform(atr.Scale.X, atr.Scale.X);
                //g.TranslateTransform(vcx + (atr.Position.X * atr.Scale.X), vcy + (atr.Position.Y * atr.Scale.Y));

                //MatObj.Translate(-(vcx + atr.Position.X +(atr.Width /2))*atr.Scale.X,-(vcy + atr.Position.Y +(atr.Height/2))*atr.Scale.Y,MatrixOrder.Append);
                //MatObj.Translate(0, 0);
                //MatObj.Scale(atr.Scale.X,atr.Scale.Y,MatrixOrder.Append);
                //MatObj.Rotate(atr.Radius.X,MatrixOrder.Append);
                //MatObj.Translate((vcx + atr.Position.X + (atr.Width / 2)) * atr.Scale.Y, (vcy + atr.Position.Y + (atr.Height / 2)) * atr.Scale.Y,MatrixOrder.Append);

                //g.TranslateTransform(vcx, vcy);
                //描画

                /*
                 * g.DrawImage(c.Img,
                 *  -(atr.Width  * atr.Scale.X * zoom )/2,
                 *  -(atr.Height * atr.Scale.Y * zoom )/2,
                 *  vsx,vsy);*/
                //g.DrawImage(c.Img,vcx+ (now.Position.X*zoom)-(vsx/2),vcy+ (now.Position.Y*zoom)-(vsy/2),vsx,vsy);
                //g.Transform = MatObj;

                //Draw
                g.DrawImage(c.Img, -(atr.Width * atr.Scale.X) / 2, -(atr.Height * atr.Scale.Y) / 2, vsx, vsy);

                //Selected DrawBounds
                if (e.Select)
                {
                    g.DrawRectangle(Pens.DarkCyan, -(atr.Width * atr.Scale.X) / 2, -(atr.Height * atr.Scale.Y) / 2, vsx - 1, vsy - 1);
                }

                //test Hit範囲をボックス描画

                /*
                 * g.DrawRectangle(Pens.Aqua,  (-(atr.Width *atr.Scale.X)/2 * atr.Scale.X),
                 *                          (-(atr.Height *atr.Scale.Y)/2 * atr.Scale.Y),
                 *                          vsx - 1, vsy - 1);
                 */

                g.Transform = Back;//restore Matrix

                //Cuurent Draw Grip
            }
        }
Exemple #18
0
        public ELEMENTS GetElementsFromName(string name)
        {
            ELEMENTS ret = mFrame.Find((ELEMENTS e ) => e.Name == name);

            return(ret);
        }
Exemple #19
0
 public void Remove(ELEMENTS e)
 {
 }