public override void Draw(ref Bitmap bitmap, PlotProperties plotprops) { double theta_degree = theta * 180 / Math.PI; double SF = ImageUtil.CalculateScaleFactor(bitmap, plotprops); int _b1 = (int)(b1 * SF); int _t1 = (int)(t1 * SF); int _b2 = (int)(b2 * SF); int _t2 = (int)(t2 * SF); int _r1 = (int)(r1 * SF); int _r2 = (int)(r2 * SF); int _h = (int)(h * SF); int _tw = (int)(tw * SF); int wdth = bitmap.Width; int hght = bitmap.Height; if (_r1 < 1) { _r1 = 1; } if (_r2 < 1) { _r2 = 1; } Graphics g = Graphics.FromImage(bitmap); GraphicsPath path = new GraphicsPath(); path.AddLine(0, 0, 0, _h - _t2 - _r2); path.AddArc(new System.Drawing.Rectangle(-_r2 * 2, _h - _t2 - _r2 * 2, _r2 * 2, _r2 * 2), 0, 90); path.AddLine(-_r2, _h - _t2, -_b2 + _tw, _h - _t2); path.AddLine(-_b2 + _tw, _h - _t2, -_b2 + _tw, _h); path.AddLine(-_b2 + _tw, _h, _tw, _h); path.AddLine(_tw, _h, _tw, _t1 + _r1); path.AddArc(new System.Drawing.Rectangle(_tw, _t1, _r1 * 2, _r1 * 2), 180, 90); path.AddLine(_tw + _r1, _t1, _b1, _t1); path.AddLine(_b1, _t1, _b1, 0); path.AddLine(_b1, 0, 0, 0); path.CloseFigure(); PointF pnt = CreateImagePoint(SF); Coordinate xy_min = ImageUtil.CalculateImageXYmin(bitmap, plotprops); double Xdel = xp - xy_min.x; double Ydel = yp - xy_min.y; Matrix mtrx = ImageUtil.ImageTransformationMatrix(bitmap, pnt, theta_degree, Xdel, Ydel, SF, mirrorX, mirrorY); path.Transform(mtrx); Color _fillColor = Material.ConvertFillColor(); Pen _pen = new Pen(borderColor, borderThickness); _pen.Alignment = PenAlignment.Inset; g.FillPath(new SolidBrush(_fillColor), path); g.DrawPath(_pen, path); _pen.Dispose(); g.Dispose(); }