コード例 #1
0
ファイル: RegionMoveForm.cs プロジェクト: atom-chen/project-3
        private void OnTimer(object sender, EventArgs e)
        {
            lastKeyDT = DateTime.Now;
            if (curMouseSelect_regionIndex < 0 || curMouseSelect_regionIndex >= ryData.regionParams.Count)
            {
                curMouseSelect_regionIndex = -1;
                return;
            }
            if (this.curKeyDown == Keys.None)
            {
                return;
            }

            DateTime curDT = DateTime.Now;
            int      delta = Math.Max((int)curDT.Subtract(lastKeyDT).TotalMilliseconds / 10, 1);

            Console.WriteLine("delta: " + delta);
            RegionParam rp = ryData.regionParams[curMouseSelect_regionIndex];

            if (this.curKeyDown == Keys.W)
            {
                rp.radius.y += delta;
            }
            else if (this.curKeyDown == Keys.A)
            {
                rp.radius.x -= delta;
            }
            else if (this.curKeyDown == Keys.S)
            {
                rp.radius.y -= delta;
            }
            else if (this.curKeyDown == Keys.D)
            {
                rp.radius.x += delta;
            }
            else if (this.curKeyDown == Keys.D1)
            {
                rp.dir = (rp.dir + delta * 15) % 360;
            }
            else if (this.curKeyDown == Keys.D2)
            {
                rp.dir = Math.Max((rp.dir - delta * 15), 0) % 360;
            }
            else if (this.curKeyDown == Keys.D3)
            {
                rp.amplitude += delta * 2;
            }
            else if (this.curKeyDown == Keys.D4)
            {
                rp.amplitude = Math.Max(0, rp.amplitude - delta * 2);
            }

            UpdateStatus(true);
            Refresh();

            lastKeyDT = curDT;
        }
コード例 #2
0
ファイル: RegionMoveForm.cs プロジェクト: atom-chen/project-3
        private void OnParamChanged(object sender, EventArgs e)
        {
            RegionParam param = (RegionParam)sender;

            if (!ryData.regionParams.Contains(param))
            {
                ryData.regionParams.Add(param);
            }
            UpdateStatus(true);
        }
コード例 #3
0
ファイル: RegionMoveForm.cs プロジェクト: atom-chen/project-3
 private void OpenRegionParamDialog(RegionParam param)
 {
     if (param != null)
     {
         paramDialog.Init(param);
     }
     else
     {
         paramDialog.Init(new RegionParam());
     }
     paramDialog.ShowDialog(this);
 }
コード例 #4
0
ファイル: RegionMoveForm.cs プロジェクト: atom-chen/project-3
        private void OnPaint(Object sender, PaintEventArgs e)
        {
            BufferedGraphicsContext currentContext = BufferedGraphicsManager.Current;
            BufferedGraphics        myBuffer       = currentContext.Allocate(e.Graphics, e.ClipRectangle);
            Graphics g = myBuffer.Graphics;

            g.SmoothingMode   = SmoothingMode.HighQuality;
            g.PixelOffsetMode = PixelOffsetMode.HighSpeed;

            if (ryData.testBackGround != "")
            {
                String path = ActionParamTemplate.FindResPath(ryData.testBackGround);
                if (path != null)
                {
                    Image image = Image.FromFile(path);
                    g.DrawImage(image, new Rectangle(0, 0, (int)(image.Width * scaleFactor), (int)(image.Height * scaleFactor)), 0, 0, image.Width, image.Height, GraphicsUnit.Pixel);
                }

                for (int i = 0; i < ryData.regionParams.Count; ++i)
                {
                    RegionParam param = ryData.regionParams[i];

                    Color color = curMouseSelect_regionIndex == i && !curMouseSelect_isCenter ? Color.Red : Color.Black;
                    g.DrawEllipse(new Pen(color, 2),
                                  (int)((param.center.x - param.radius.x) * scaleFactor),
                                  (int)((ryData.originalSize.y - param.center.y - param.radius.y) * scaleFactor),
                                  (int)(param.radius.x * 2 * scaleFactor),
                                  (int)(param.radius.y * 2 * scaleFactor));
                    color = curMouseSelect_regionIndex == i ? Color.Red : Color.Black;
                    g.DrawEllipse(new Pen(color, 2),
                                  ((param.moveCenter.x - 2) * scaleFactor),
                                  ((ryData.originalSize.y - param.moveCenter.y - 2) * scaleFactor),
                                  4,
                                  4);

                    if (param.dir >= 0)
                    {
                        float lineX = param.amplitude * (float)Math.Cos(param.dir / 180 * Math.PI);
                        float lineY = param.amplitude * (float)Math.Sin(param.dir / 180 * Math.PI);

                        g.DrawLine(new Pen(color, 2),
                                   new Point((int)(param.moveCenter.x * scaleFactor), (int)((ryData.originalSize.y - param.moveCenter.y) * scaleFactor)),
                                   new Point((int)((param.moveCenter.x + lineX) * scaleFactor), (int)((ryData.originalSize.y - param.moveCenter.y - lineY) * scaleFactor)));
                    }
                }
            }

            myBuffer.Render();
            myBuffer.Dispose();//释放资源
        }
コード例 #5
0
        public void Init(RegionParam _param)
        {
            this.param = _param;

            this.tbCenter.Text     = param.center.ToString();
            this.tbRadius.Text     = param.radius.ToString();
            this.tbMoveCenter.Text = param.moveCenter.ToString();
            this.tbDir.Text        = param.dir.ToString();
            this.tbAmplitude.Text  = "" + param.amplitude;
            this.tbPeriod.Text     = "" + param.period;
            this.rbSin.Checked     = (param.eType == ERegionMoveType.Sin);

            this.tbCenter.KeyUp     += onKeyUp;
            this.tbRadius.KeyUp     += onKeyUp;
            this.tbMoveCenter.KeyUp += onKeyUp;
            this.tbDir.KeyUp        += onKeyUp;
            this.tbAmplitude.KeyUp  += onKeyUp;
            this.tbPeriod.KeyUp     += onKeyUp;
        }
コード例 #6
0
ファイル: RegionMoveForm.cs プロジェクト: atom-chen/project-3
        private void UpdateButtons()
        {
            foreach (Button btn in paramButtons)
            {
                this.Controls.Remove(btn);
            }
            paramButtons.Clear();
            foreach (Button btn in delButtons)
            {
                this.Controls.Remove(btn);
            }
            delButtons.Clear();

            for (int i = 0; i < ryData.regionParams.Count; ++i)
            {
                RegionParam param = ryData.regionParams[i];
                {
                    Button btnParam = new Button();
                    btnParam.RightToLeft = RightToLeft.No;
                    btnParam.Size        = new System.Drawing.Size(330, 30);
                    btnParam.Location    = new Point(420, 100 + 40 * paramButtons.Count);
                    btnParam.Text        = "" + (i + 1) + ". c=" + param.center + ",r=" + param.radius + ",mc=" + param.moveCenter + ",dir=" + param.dir;
                    paramButtons.Add(btnParam);
                    this.Controls.Add(btnParam);

                    btnParam.Click += onClickBtnParam;
                }

                {
                    Button btnDel = new Button();
                    btnDel.RightToLeft = RightToLeft.No;
                    btnDel.Size        = new System.Drawing.Size(40, 30);
                    btnDel.Location    = new Point(760, 100 + 40 * delButtons.Count);
                    btnDel.Text        = "删除";
                    delButtons.Add(btnDel);
                    this.Controls.Add(btnDel);

                    btnDel.Click += onClickBtnDel;
                }
            }
        }
コード例 #7
0
ファイル: RegionMoveForm.cs プロジェクト: atom-chen/project-3
        private void OnMouseMove(Object sender, MouseEventArgs e)
        {
            if (!isInMouseDrag)
            {
                return;
            }

            int deltaX = (int)((e.Location.X - mouseLastMoved.X) / scaleFactor);
            int deltaY = -(int)((e.Location.Y - mouseLastMoved.Y) / scaleFactor);

            if (deltaX == 0 && deltaY == 0)
            {
                return;
            }
            mouseLastMoved = e.Location;

            if (curMouseSelect_regionIndex >= 0 && curMouseSelect_regionIndex < ryData.regionParams.Count)
            {
                RegionParam rp = ryData.regionParams[curMouseSelect_regionIndex];
                if (curMouseSelect_isCenter)
                {
                    rp.moveCenter.x += deltaX;
                    rp.moveCenter.y += deltaY;
                }
                else
                {
                    rp.moveCenter.x += deltaX;
                    rp.moveCenter.y += deltaY;
                    rp.center.x     += deltaX;
                    rp.center.y     += deltaY;
                }
            }
            else
            {
                curMouseSelect_regionIndex = -1;
            }

            UpdateStatus(true);
            Refresh();
        }