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) { } }
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(); } }
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}"; }
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}"; }
public ELEMENTS Clone() { ELEMENTS retEle = new ELEMENTS(); retEle.Atr = new AttributeBase(this.Atr); retEle.Tag = this.Tag; return(retEle); }
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; }
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; }
/// <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); }
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); }
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); }
/// <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(); }
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(); } }
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); } }
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)); }
public ELEMENTS GetElementsFromHash(int hash) { ELEMENTS ret = mFrame.Find((ELEMENTS e) => e.GetHashCode() == hash); return(ret); }
public void AddElements(ELEMENTS e) { mFrame.Add(e); }
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 } }
public ELEMENTS GetElementsFromName(string name) { ELEMENTS ret = mFrame.Find((ELEMENTS e ) => e.Name == name); return(ret); }
public void Remove(ELEMENTS e) { }