public void drawSingleBox(int index, Resourse demand, Resourse historyHave, Resourse Max, Resourse available, int flag)//按照运行给出的数据动态展示算法运行到的当前进程的变化情况 { // float angleA = Allocation.A * 360 / (Max.A == 0 ? 1 : Max.A); //listBox1.Items.Add("myDrawPie被调用"); Console.WriteLine(pictureBoxes[index].AccessibilityObject); Graphics g = this.pictureBoxes[index].CreateGraphics(); Rectangle rectangle1 = new Rectangle(10, 10, 100, 100); Rectangle rectangle2 = new Rectangle(150, 10, 100, 100); Rectangle rectangle3 = new Rectangle(290, 10, 100, 100); float angleA = historyHave.A * 360 / (Max.A == 0 ? 1 : Max.A); float angleB = historyHave.B * 360 / (Max.B == 0 ? 1 : Max.B); float angleC = historyHave.C * 360 / (Max.C == 0 ? 1 : Max.C); Resourse after_add = new Resourse(historyHave.A + demand.A > Max.A ? Max.A : historyHave.A + demand.A, historyHave.B + demand.B > Max.B ? Max.B : historyHave.B + demand.B, historyHave.C + demand.C > Max.C ? Max.C : historyHave.C + demand.C); g.FillRectangle(new SolidBrush(Color.White), rectangle1.X, 115, 100, 20); g.DrawString(after_add.A.ToString() + "/" + Max.A.ToString(), new Font("等线", 14), new SolidBrush(Color.Black), rectangle1.X + 30, 115); g.FillRectangle(new SolidBrush(Color.White), rectangle2.X, 115, 100, 20); g.DrawString(after_add.B.ToString() + "/" + Max.B.ToString(), new Font("等线", 14), new SolidBrush(Color.Black), rectangle2.X + 30, 115); g.FillRectangle(new SolidBrush(Color.White), rectangle3.X, 115, 100, 20); g.DrawString(after_add.C.ToString() + "/" + Max.C.ToString(), new Font("等线", 14), new SolidBrush(Color.Black), rectangle3.X + 30, 115); MyDrawParam param1 = new MyDrawParam(g); param1.positionRectangle = new Rectangle(10, 10, 100, 100); param1.angleBegin = angleA - 90; param1.angleIncrease = demand.A * 360 / (Max.A == 0 ? 1 : Max.A); param1.interval = DataBus.FormOperatingActiveInterval; MyDrawParam param2 = new MyDrawParam(g); param2.positionRectangle = new Rectangle(150, 10, 100, 100); param2.angleBegin = angleB - 90; param2.angleIncrease = demand.B * 360 / (Max.B == 0 ? 1 : Max.B); param2.interval = DataBus.FormOperatingActiveInterval; MyDrawParam param3 = new MyDrawParam(g); param3.positionRectangle = new Rectangle(290, 10, 100, 100); param3.angleBegin = angleC - 90; param3.angleIncrease = demand.C * 360 / (Max.C == 0 ? 1 : Max.C); param3.interval = DataBus.FormOperatingActiveInterval; if (flag == 1) { MyAnimation.SyncPreDrawPie(param1); MyAnimation.SyncPreDrawPie(param2); MyAnimation.SyncPreDrawPie(param3); } else { MyAnimation.SyncActiveDrawPie(param1); MyAnimation.SyncActiveDrawPie(param2); MyAnimation.SyncActiveDrawPie(param3); } }
private void update_draw(object sender, EventArgs e)//动态的绘制更新 { myOperator.printPro(myOperator.ProcessList, myOperator.available); Rectangle rectangle1 = new Rectangle(10, 10, 100, 100); Rectangle rectangle2 = new Rectangle(150, 10, 100, 100); Rectangle rectangle3 = new Rectangle(290, 10, 100, 100); for (int i = 0; i < 5; i++) { AngleCollection history = historys[i]; Resourse Max=myOperator.ProcessList[i].Max; Resourse Allocation = myOperator.ProcessList[i].Allocation; float angleA = Allocation.A * 360 / (Max.A == 0 ? 1 : Max.A); float angleB = Allocation.B * 360 / (Max.B == 0 ? 1 : Max.B); float angleC = Allocation.C * 360 / (Max.C == 0 ? 1 : Max.C); Graphics g=pictureBoxes[i].CreateGraphics(); MyDrawParam param1 = new MyDrawParam(g); param1.positionRectangle = rectangle1; param1.angleBegin = -90 + history.A; param1.angleIncrease = angleA - history.A; param1.interval = DataBus.FormMainActiveInterval; MyAnimation.AsyncActiveDrawPie(param1); g.FillRectangle(new SolidBrush(Color.White), rectangle1.X, 115, 100, 20); g.DrawString(Allocation.A.ToString() + "/" + Max.A.ToString(), new Font("等线", 14), new SolidBrush(Color.Black), rectangle1.X + 30, 115); MyDrawParam param2 = new MyDrawParam(g); param2.positionRectangle = rectangle2; param2.angleBegin = -90 + history.B; param2.angleIncrease = angleB - history.B; param2.interval = DataBus.FormMainActiveInterval; MyAnimation.AsyncActiveDrawPie(param2); g.FillRectangle(new SolidBrush(Color.White), rectangle2.X, 115, 100, 20); g.DrawString(Allocation.B.ToString() + "/" + Max.B.ToString(), new Font("等线", 14), new SolidBrush(Color.Black), rectangle2.X + 30, 115); MyDrawParam param3 = new MyDrawParam(g); param3.positionRectangle = rectangle2; param3.angleBegin = -90 + history.B; param3.angleIncrease = angleB - history.B; param3.interval = DataBus.FormMainActiveInterval; MyAnimation.AsyncActiveDrawPie(param3); //activeDrawPie(g, change_brush, warn_brush, rectangle3, -90+history.C, angleC - history.C,100); g.FillRectangle(new SolidBrush(Color.White), rectangle3.X, 115, 100, 20); g.DrawString(Allocation.C.ToString() + "/" + Max.C.ToString(), new Font("等线", 14), new SolidBrush(Color.Black), rectangle3.X + 30, 115); history.A = angleA; history.B = angleB; history.C = angleC; } }