Пример #1
0
 static void FormatToXml(Figure f, XmlTextWriter wr, Dictionary<string, byte[]> images)
 {
     wr.WriteStartElement(FIGURE_ELE);
     wr.WriteAttributeString(TYPE_ATTR, f.GetType().FullName);
     // UserAttrs
     wr.WriteStartElement(USERATTRS_ELE);
     string ua = "";
     foreach (string k in f.UserAttrs.Keys)
     {
         string key = k.Replace("&", USERATTRS_AMP_ENT).
             Replace(",", USERATTRS_COMMA_ENT).Replace(" ", USERATTRS_SPACE_ENT);
         string value = f.UserAttrs[k].Replace("&", USERATTRS_AMP_ENT).
             Replace(",", USERATTRS_COMMA_ENT).Replace(" ", USERATTRS_SPACE_ENT);
         ua += string.Format("{0}{1}{2}{3}", key, USERATTRS_PART_SEP, value, USERATTRS_SEP);
     }
     wr.WriteValue(ua);
     wr.WriteEndElement();
     // the rest
     if (f is IDimension)
     {
         wr.WriteStartElement(DIMENSION_ELE);
         IDimension fd = (IDimension)f;
         wr.WriteAttributeString(X_ATTR, fd.X.ToString());
         wr.WriteAttributeString(Y_ATTR, fd.Y.ToString());
         wr.WriteAttributeString(WIDTH_ATTR, fd.Width.ToString());
         wr.WriteAttributeString(HEIGHT_ATTR, fd.Height.ToString());
         wr.WriteAttributeString(ROTATION_ATTR, fd.Rotation.ToString());
         wr.WriteAttributeString(FLIPX_ATTR, fd.FlipX.ToString());
         wr.WriteAttributeString(FLIPY_ATTR, fd.FlipY.ToString());
         wr.WriteAttributeString(LOCKASPECTRATIO_ATTR, fd.LockAspectRatio.ToString());
         wr.WriteAttributeString(LOCKED_ATTR, fd.Locked.ToString());
         wr.WriteEndElement();
     }
     if (f is IFillable)
     {
         wr.WriteStartElement(FILL_ELE);
         wr.WriteAttributeString(COLOR_ATTR, DColor.FormatToString(((IFillable)f).Fill));
         wr.WriteEndElement();
     }
     if (f is IStrokeable)
     {
         wr.WriteStartElement(STROKE_ELE);
         IStrokeable fs = (IStrokeable)f;
         wr.WriteAttributeString(COLOR_ATTR, DColor.FormatToString(fs.Stroke));
         wr.WriteAttributeString(STROKEWIDTH_ATTR, fs.StrokeWidth.ToString());
         wr.WriteAttributeString(STROKESTYLE_ATTR, fs.StrokeStyle.ToString());
         wr.WriteAttributeString(STROKECAP_ATTR, fs.StrokeCap.ToString());
         wr.WriteAttributeString(STROKEJOIN_ATTR, fs.StrokeJoin.ToString());
         wr.WriteEndElement();
     }
     if (f is IAlphaBlendable)
     {
         wr.WriteStartElement(ALPHA_ELE);
         wr.WriteAttributeString(VALUE_ATTR, ((IAlphaBlendable)f).Alpha.ToString());
         wr.WriteEndElement();
     }
     if (f is IImage)
     {
         wr.WriteStartElement(IMAGE_ELE);
         IImage img = (IImage)f;
         if (img.ImageData != null)
         {
             if (images != null && img.FileName != null)
             {
                 string fileName = FindUniqueFileName(images, Path.GetFileName(img.FileName), img.ImageData);
                 images[fileName] = img.ImageData;
                 wr.WriteAttributeString(FILENAME_ATTR, fileName);
             }
             else
             {
                 if (img.FileName != null)
                     wr.WriteAttributeString(FILENAME_ATTR, Path.GetFileName(img.FileName));
                 wr.WriteAttributeString(TYPE_ATTR, BASE64_VAL);
                 wr.WriteString(Convert.ToBase64String(img.ImageData));
             }
         }
         wr.WriteEndElement();
     }
     if (f is IBitmap)
     {
         wr.WriteStartElement(BITMAP_ELE);
         wr.WriteAttributeString(BITMAPPOSITION_ATTR, ((IBitmap)f).BitmapPosition.ToString());
         wr.WriteEndElement();
     }
     if (f is IMetafile)
     {
         wr.WriteStartElement(METAFILE_ELE);
         wr.WriteAttributeString(METAFILETYPE_ATTR, ((IMetafile)f).MetafileType.ToString());
         wr.WriteEndElement();
     }
     if (f is ITextable)
     {
         wr.WriteStartElement(TEXT_ELE);
         ITextable ft = (ITextable)f;
         wr.WriteAttributeString(FONTNAME_ATTR, ft.FontName);
         wr.WriteAttributeString(FONTSIZE_ATTR, ft.FontSize.ToString());
         wr.WriteAttributeString(BOLD_ATTR, ft.Bold.ToString());
         wr.WriteAttributeString(ITALICS_ATTR, ft.Italics.ToString());
         wr.WriteAttributeString(UNDERLINE_ATTR, ft.Underline.ToString());
         wr.WriteAttributeString(STRIKETHROUGH_ATTR, ft.Strikethrough.ToString());
         wr.WriteAttributeString(WRAPTEXT_ATTR, ft.WrapText.ToString());
         wr.WriteAttributeString(WRAPTHRESHOLD_ATTR, ft.WrapThreshold.ToString());
         wr.WriteAttributeString(WRAPFONTSIZE_ATTR, ft.WrapFontSize.ToString());
         wr.WriteString(ft.Text);
         wr.WriteEndElement();
     }
     if (f is IChildFigureable)
     {
         wr.WriteStartElement(CHILDFIGURES_ELE);
         foreach (Figure childFigure in ((IChildFigureable)f).ChildFigures)
             FormatToXml(childFigure, wr, images);
         wr.WriteEndElement();
     }
     if (f is IPolyline)
     {
         wr.WriteStartElement(POLYLINE_ELE);
         wr.WriteString(DPoints.FormatToString(((IPolyline)f).Points));
         wr.WriteEndElement();
     }
     if (f is IMarkable)
     {
         wr.WriteStartElement(MARKER_ELE);
         wr.WriteAttributeString(STARTMARKER_ATTR, ((IMarkable)f).StartMarker.ToString());
         wr.WriteAttributeString(ENDMARKER_ATTR, ((IMarkable)f).EndMarker.ToString());
         wr.WriteEndElement();
     }
     if (f is IEditable)
     {
         wr.WriteStartElement(EDITABLEATTRIBUTES_ELE);
         wr.WriteString(((IEditable)f).EditAttrsToString());
         wr.WriteEndElement();
     }
     if (f is PolygonFigure)
     {
         wr.WriteStartElement(POLYGON_ELE);
         wr.WriteString(DPoints.FormatToString(((PolygonFigure)f).Points));
         wr.WriteEndElement();
     }
     wr.WriteEndElement();
 }
Пример #2
0
 void ClonePolyProps(Figure from, Figure to, LineSegPos linepos)
 {
     to.Rotation = from.Rotation;
     DGeom.UpdateRotationPosition(to, from.Rect, to.Rect);
     if (from.GetType() == to.GetType())
     {
         if (from is IFillable)
             ((IFillable)to).Fill = ((IFillable)from).Fill;
         if (from is IStrokeable)
         {
             ((IStrokeable)to).Stroke = ((IStrokeable)from).Stroke;
             ((IStrokeable)to).StrokeWidth = ((IStrokeable)from).StrokeWidth;
             ((IStrokeable)to).StrokeStyle = ((IStrokeable)from).StrokeStyle;
         }
         if (from is IMarkable)
         {
             if (linepos == LineSegPos.Start || linepos == LineSegPos.All)
                 ((IMarkable)to).StartMarker = ((IMarkable)from).StartMarker;
             if (linepos == LineSegPos.End || linepos == LineSegPos.All)
                 ((IMarkable)to).EndMarker = ((IMarkable)from).EndMarker;
         }
         if (from is IAlphaBlendable)
             ((IAlphaBlendable)to).Alpha = ((IAlphaBlendable)from).Alpha;
         if (from is ITextable)
         {
             ((ITextable)to).FontName = ((ITextable)from).FontName;
             ((ITextable)to).Bold = ((ITextable)from).Bold;
             ((ITextable)to).Italics = ((ITextable)from).Italics;
             ((ITextable)to).Underline = ((ITextable)from).Underline;
             ((ITextable)to).Strikethrough = ((ITextable)from).Strikethrough;
         }
     }
 }