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; }
private void OnParamChanged(object sender, EventArgs e) { RegionParam param = (RegionParam)sender; if (!ryData.regionParams.Contains(param)) { ryData.regionParams.Add(param); } UpdateStatus(true); }
private void OpenRegionParamDialog(RegionParam param) { if (param != null) { paramDialog.Init(param); } else { paramDialog.Init(new RegionParam()); } paramDialog.ShowDialog(this); }
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();//释放资源 }
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; }
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; } } }
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(); }