public void AddMetaObject(MetaObject obj)
 {
     for (int k = 0; k < MetaObjects.Count; ++k) {
         if (MetaObjects[k] == null) {
             MetaObjects[k] = obj;
             return;
         }
     }
     MetaObjects.Add(obj);
 }
        public void SelectMetaObject(int index, PdfContentByte cb)
        {
            MetaObject obj = (MetaObject)MetaObjects[index];

            if (obj == null)
            {
                return;
            }
            int style;

            switch (obj.Type)
            {
            case MetaObject.META_BRUSH:
                currentBrush = (MetaBrush)obj;
                style        = currentBrush.Style;
                if (style == MetaBrush.BS_SOLID)
                {
                    Color color = currentBrush.Color;
                    cb.SetColorFill(color);
                }
                else if (style == MetaBrush.BS_HATCHED)
                {
                    Color color = currentBackgroundColor;
                    cb.SetColorFill(color);
                }
                break;

            case MetaObject.META_PEN: {
                currentPen = (MetaPen)obj;
                style      = currentPen.Style;
                if (style != MetaPen.PS_NULL)
                {
                    Color color = currentPen.Color;
                    cb.SetColorStroke(color);
                    cb.SetLineWidth(Math.Abs((float)currentPen.PenWidth * scalingX / extentWx));
                    switch (style)
                    {
                    case MetaPen.PS_DASH:
                        cb.SetLineDash(18, 6, 0);
                        break;

                    case MetaPen.PS_DASHDOT:
                        cb.SetLiteral("[9 6 3 6]0 d\n");
                        break;

                    case MetaPen.PS_DASHDOTDOT:
                        cb.SetLiteral("[9 3 3 3 3 3]0 d\n");
                        break;

                    case MetaPen.PS_DOT:
                        cb.SetLineDash(3, 0);
                        break;

                    default:
                        cb.SetLineDash(0);
                        break;
                    }
                }
                break;
            }

            case MetaObject.META_FONT: {
                currentFont = (MetaFont)obj;
                break;
            }
            }
        }