public static Drawing.Bitmap BuildImage(string tag, int width, int height, Drawing.Color color) { var bitmap = new Drawing.Bitmap(width, height); using (var g = Drawing.Graphics.FromImage(bitmap)) { g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias; g.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality; var rect = new Drawing.RectangleF(0.5f, 1.0f, width, height); var format = new Drawing.StringFormat() { Alignment = Drawing.StringAlignment.Center, LineAlignment = Drawing.StringAlignment.Center }; if (color.IsEmpty) { g.FillEllipse(Drawing.Brushes.Black, 1.0f, 1.0f, width - 2.0f, height - 2.0f); } else { using (var brush = new Drawing.SolidBrush(color)) g.FillEllipse(brush, 1.0f, 1.0f, width - 2.0f, height - 2.0f); } float emSize = ((float)(width) / ((float)tag.Length)); if (width == 24) { switch (tag.Length) { case 1: emSize = 20.0f; break; case 2: emSize = 13.0f; break; case 3: emSize = 11.0f; break; case 4: emSize = 8.0f; break; } } // Avoid using ClearType rendering on icons that the user can zoom in like icons on Grashopper components. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; using (var Calibri = new System.Drawing.Font("Calibri", emSize, Drawing.GraphicsUnit.Pixel)) g.DrawString(tag, Calibri, Drawing.Brushes.White, rect, format); } return(bitmap); }
public static Drawing.Bitmap BuildIcon(string tag, int width = 24, int height = 24) { var bitmap = new Drawing.Bitmap(width, height); using (var g = Drawing.Graphics.FromImage(bitmap)) { var iconBounds = new Drawing.RectangleF(0, 0, width, height); iconBounds.Inflate(-0.5f, -0.5f); using (var capsule = Grasshopper.GUI.Canvas.GH_Capsule.CreateCapsule(iconBounds, Grasshopper.GUI.Canvas.GH_Palette.Transparent)) capsule.Render(g, false, false, false); g.SmoothingMode = Drawing.Drawing2D.SmoothingMode.AntiAlias; g.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = Drawing.Drawing2D.PixelOffsetMode.HighQuality; var rect = new Drawing.RectangleF(0.5f, 1.0f, width, height); var format = new Drawing.StringFormat() { Alignment = Drawing.StringAlignment.Center, LineAlignment = Drawing.StringAlignment.Center, Trimming = Drawing.StringTrimming.Character, FormatFlags = Drawing.StringFormatFlags.NoWrap }; float emSize = ((float)(width) / ((float)tag.Length)); if (width == 24) { switch (tag.Length) { case 1: emSize = 20.0f; break; case 2: emSize = 13.0f; break; case 3: emSize = 11.0f; break; case 4: emSize = 8.0f; break; default: emSize = 7.0f; break; } } // Avoid using ClearType rendering on icons that the user can zoom in like icons on Grashopper components. g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; using (var Calibri = new System.Drawing.Font("Calibri", emSize, Drawing.GraphicsUnit.Pixel)) g.DrawString(tag, Calibri, Drawing.Brushes.Black, rect, format); } return(bitmap); }