void drawChip() { if (null == mCanvas) { return; } double scalew = mG.Width / (double)(mChip.BoundingBox.Width + mChip.BoundingBox.X * 2); double scaleh = mG.Height / (double)(mChip.BoundingBox.Height + mChip.BoundingBox.Y * 2); mScale = 1 / Math.Min(scalew, scaleh); mG.Clear(Color.Blue); mG.SetTransform(new Matrix((float)(1 / mScale), 0, 0, (float)(1 / mScale), 0, 0)); mChip.Draw(mG); if (null != mCanvas.Image) { mCanvas.Image.Dispose(); mCanvas.Image = null; } var tmp = new Bitmap(mBmp.Width, mBmp.Height); var g = Graphics.FromImage(tmp); g.DrawImage(mBmp, 0, 0); mCanvas.Image = tmp; }
void _drawSettingsWheel(CustomGraphics g) { const int outR = 6 * 18 / 16; const int inR = 4 * 18 / 16; const int inR45 = 3 * 18 / 16; const int outR45 = 4 * 18 / 16; if (mShowSettingsWheel) { if (CursorInSettingsWheel) { g.LineColor = Color.Cyan; } else { g.LineColor = Color.DarkGray; } g.SetTransform(new Matrix(1, 0, 0, 1, BoundingBox.X + 12, BoundingBox.Y + BoundingBox.Height - 16)); g.DrawCircle(new Point(), inR); g.DrawLine(-outR, 0, -inR, 0); g.DrawLine(outR, 0, inR, 0); g.DrawLine(0, -outR, 0, -inR); g.DrawLine(0, outR, 0, inR); g.DrawLine(-outR45, -outR45, -inR45, -inR45); g.DrawLine(outR45, -outR45, inR45, -inR45); g.DrawLine(-outR45, outR45, -inR45, inR45); g.DrawLine(outR45, outR45, inR45, inR45); g.ClearTransform(); } }
public void Draw(CustomGraphics g) { if (mPlots.Count == 0) { return; } /* reset if timestep changed */ if (mScopeTimeStep != ControlPanel.TimeStep) { mScopeTimeStep = ControlPanel.TimeStep; ResetGraph(); } _drawSettingsWheel(g); g.LineColor = Color.Red; g.SetTransform(new Matrix(1, 0, 0, 1, BoundingBox.X, BoundingBox.Y)); if (ShowFFT) { _drawFFTVerticalGridLines(g); _drawFFT(g); } if (mMaxScale) { mScale = 1e-4; } mReduceRange = false; mSomethingSelected = false; /* is one of our plots selected? */ for (int si = 0; si != mVisiblePlots.Count; si++) { var plot = mVisiblePlots[si]; _calcPlotScale(plot); if (CirSim.Sim.ScopeSelected == -1 && plot.Elm != null && plot.Elm.IsMouseElm) { mSomethingSelected = true; } mReduceRange = true; } _checkForSelection(); if (SelectedPlot >= 0) { mSomethingSelected = true; } mDrawGridLines = true; if ((ShowMax || ShowMin) && mVisiblePlots.Count > 0) { _calcMaxAndMin(); } if (ShowV) { /* draw volts on top (last), then current underneath, then everything else */ for (int i = 0; i != mVisiblePlots.Count; i++) { if (i != SelectedPlot) { _drawPlot(g, mVisiblePlots[i], false); } } /* draw selection on top. only works if selection chosen from scope */ if (SelectedPlot >= 0 && SelectedPlot < mVisiblePlots.Count) { _drawPlot(g, mVisiblePlots[SelectedPlot], true); } } if (mVisiblePlots.Count > 0) { _drawInfoTexts(g); } g.ClearTransform(); _drawCrosshairs(g); g.SetTransform(new Matrix( CirSim.Sim.Transform[0], CirSim.Sim.Transform[1], CirSim.Sim.Transform[2], CirSim.Sim.Transform[3], CirSim.Sim.Transform[4], CirSim.Sim.Transform[5] )); if (5 < mPlots[0].Pointer && !LockScale) { if (1e-4 < mScale && mReduceRange) { mScale /= 2; } } }