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(); }
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; } } }