public override void Draw(CustomGraphics g) { double vl = Volts[V_L]; double vr = Volts[V_R]; double vs = Volts[V_S]; setBbox(mPoint1, mPoint2, HS); draw2Leads(); int divide = (int)(SEGMENTS * mPosition); if (ControlPanel.ChkUseAnsiSymbols.Checked) { /* draw zigzag */ for (int i = 0; i != SEGMENTS; i++) { double v = vl + (vs - vl) * i / divide; if (i >= divide) { v = vs + (vr - vs) * (i - divide) / (SEGMENTS - divide); } drawLead(mPs1[i], mPs2[i]); } } else { /* draw rectangle */ drawLead(mRect1[0], mRect2[0]); for (int i = 0, j = 1; i != SEGMENTS; i++, j++) { double v = vl + (vs - vl) * i / divide; if (i >= divide) { v = vs + (vr - vs) * (i - divide) / (SEGMENTS - divide); } drawLead(mRect1[j], mRect3[j]); drawLead(mRect2[j], mRect4[j]); } drawLead(mRect1[SEGMENTS + 1], mRect2[SEGMENTS + 1]); } /* draw slider */ drawLead(mPost3, mCorner2); drawLead(mCorner2, mArrowPoint); drawLead(mArrow1, mArrowPoint); drawLead(mArrow2, mArrowPoint); /* draw dot */ mCurCount1 = updateDotCount(mCurrent1, mCurCount1); mCurCount2 = updateDotCount(mCurrent2, mCurCount2); mCurCount3 = updateDotCount(mCurrent3, mCurCount3); if (CirSim.Sim.DragElm != this) { drawDots(mPoint1, mMidPoint, mCurCount1); drawDots(mPoint2, mMidPoint, mCurCount2); drawDots(mPost3, mCorner2, mCurCount3); drawDots(mCorner2, mMidPoint, mCurCount3 + Utils.Distance(mPost3, mCorner2)); } drawPosts(); if (ControlPanel.ChkShowValues.Checked && mResistance1 > 0 && (mFlags & FLAG_SHOW_VALUES) != 0) { /* check for vertical pot with 3rd terminal on left */ bool reverseY = (mPost3.X < mLead1.X && mLead1.X == mLead2.X); /* check for horizontal pot with 3rd terminal on top */ bool reverseX = (mPost3.Y < mLead1.Y && mLead1.X != mLead2.X); /* check if we need to swap texts (if leads are reversed, e.g. drawn right to left) */ bool rev = (mLead1.X == mLead2.X && mLead1.Y < mLead2.Y) || (mLead1.Y == mLead2.Y && mLead1.X > mLead2.X); /* draw units */ string s1 = Utils.UnitText(rev ? mResistance2 : mResistance1, ""); string s2 = Utils.UnitText(rev ? mResistance1 : mResistance2, ""); int txtHeightH = CustomGraphics.FontText.Height / 2; int txtWidth1 = (int)g.GetTextSize(s1).Width; int txtWidth2 = (int)g.GetTextSize(s2).Width; /* vertical? */ if (mLead1.X == mLead2.X) { g.DrawLeftTopText(s1, !reverseY ? mArrowPoint.X : mArrowPoint.X - txtWidth1, Math.Min(mArrow1.Y, mArrow2.Y) + 4 * txtHeightH); g.DrawLeftTopText(s2, !reverseY ? mArrowPoint.X : mArrowPoint.X - txtWidth2, Math.Max(mArrow1.Y, mArrow2.Y) - txtHeightH); } else { g.DrawLeftTopText(s1, Math.Min(mArrow1.X, mArrow2.X) - txtWidth1, !reverseX ? (mArrowPoint.Y + txtHeightH + 10) : mArrowPoint.Y); g.DrawLeftTopText(s2, Math.Max(mArrow1.X, mArrow2.X), !reverseX ? (mArrowPoint.Y + txtHeightH + 10) : mArrowPoint.Y); } } if (ControlPanel.ChkShowName.Checked) { if (mNameV) { g.DrawCenteredVText(ReferenceName, mNamePos.X, mNamePos.Y); } else { g.DrawLeftText(ReferenceName, mNamePos.X, mNamePos.Y); } } }