/// <inheritdoc/> public override void Draw(object dc, TextShape text, double dx, double dy, object db, object r) { var dxf = dc as DxfDocument; var properties = (ImmutableArray <Property>)db; var record = (Record)r; var tbind = text.BindText(properties, record); if (string.IsNullOrEmpty(tbind)) { return; } var style = text.Style; var stroke = ToColor(style.Stroke); var strokeTansparency = ToTransparency(style.Stroke); var attachmentPoint = default(MTextAttachmentPoint); double x, y; var rect = Spatial.Rect2.FromPoints( text.TopLeft.X, text.TopLeft.Y, text.BottomRight.X, text.BottomRight.Y, dx, dy); switch (text.Style.TextStyle.TextHAlignment) { default: case TextHAlignment.Left: x = rect.X; break; case TextHAlignment.Center: x = rect.X + rect.Width / 2.0; break; case TextHAlignment.Right: x = rect.X + rect.Width; break; } switch (text.Style.TextStyle.TextVAlignment) { default: case TextVAlignment.Top: y = rect.Y; break; case TextVAlignment.Center: y = rect.Y + rect.Height / 2.0; break; case TextVAlignment.Bottom: y = rect.Y + rect.Height; break; } switch (text.Style.TextStyle.TextVAlignment) { default: case TextVAlignment.Top: switch (text.Style.TextStyle.TextHAlignment) { default: case TextHAlignment.Left: attachmentPoint = MTextAttachmentPoint.TopLeft; break; case TextHAlignment.Center: attachmentPoint = MTextAttachmentPoint.TopCenter; break; case TextHAlignment.Right: attachmentPoint = MTextAttachmentPoint.TopRight; break; } break; case TextVAlignment.Center: switch (text.Style.TextStyle.TextHAlignment) { default: case TextHAlignment.Left: attachmentPoint = MTextAttachmentPoint.MiddleLeft; break; case TextHAlignment.Center: attachmentPoint = MTextAttachmentPoint.MiddleCenter; break; case TextHAlignment.Right: attachmentPoint = MTextAttachmentPoint.MiddleRight; break; } break; case TextVAlignment.Bottom: switch (text.Style.TextStyle.TextHAlignment) { default: case TextHAlignment.Left: attachmentPoint = MTextAttachmentPoint.BottomLeft; break; case TextHAlignment.Center: attachmentPoint = MTextAttachmentPoint.BottomCenter; break; case TextHAlignment.Right: attachmentPoint = MTextAttachmentPoint.BottomRight; break; } break; } var ts = new netDxf.Tables.TextStyle(style.TextStyle.FontName, style.TextStyle.FontFile); var dxfMText = new MText( new Vector3(ToDxfX(x), ToDxfY(y), 0), text.Style.TextStyle.FontSize * _targetDpi / _sourceDpi, rect.Width, ts); dxfMText.AttachmentPoint = attachmentPoint; var options = new MTextFormattingOptions(dxfMText.Style); var fs = text.Style.TextStyle.FontStyle; if (fs != null) { options.Bold = fs.Flags.HasFlag(FontStyleFlags.Bold); options.Italic = fs.Flags.HasFlag(FontStyleFlags.Italic); options.Underline = fs.Flags.HasFlag(FontStyleFlags.Underline); options.StrikeThrough = fs.Flags.HasFlag(FontStyleFlags.Strikeout); } options.Aligment = MTextFormattingOptions.TextAligment.Default; options.Color = null; dxfMText.Write(tbind, options); dxfMText.Layer = _currentLayer; dxfMText.Transparency.Value = strokeTansparency; dxfMText.Color = stroke; dxf.AddEntity(dxfMText); }
/// <summary> /// /// </summary> /// <param name="doc"></param> /// <param name="text"></param> /// <param name="dx"></param> /// <param name="dy"></param> /// <param name="db"></param> /// <param name="r"></param> public void Draw(object doc, Core2D.XText text, double dx, double dy, ImmutableArray <Core2D.ShapeProperty> db, Core2D.Record r) { var _doc = doc as DxfDocument; var tbind = text.BindToTextProperty(db, r); if (string.IsNullOrEmpty(tbind)) { return; } var style = text.Style; var stroke = GetColor(style.Stroke); var strokeTansparency = GetTransparency(style.Stroke); var attachmentPoint = default(MTextAttachmentPoint); double x, y; var rect = Core2D.Rect2.Create(text.TopLeft, text.BottomRight, dx, dy); switch (text.Style.TextStyle.TextHAlignment) { default: case Core2D.TextHAlignment.Left: x = rect.X; break; case Core2D.TextHAlignment.Center: x = rect.X + rect.Width / 2.0; break; case Core2D.TextHAlignment.Right: x = rect.X + rect.Width; break; } switch (text.Style.TextStyle.TextVAlignment) { default: case Core2D.TextVAlignment.Top: y = rect.Y; break; case Core2D.TextVAlignment.Center: y = rect.Y + rect.Height / 2.0; break; case Core2D.TextVAlignment.Bottom: y = rect.Y + rect.Height; break; } switch (text.Style.TextStyle.TextVAlignment) { default: case Core2D.TextVAlignment.Top: switch (text.Style.TextStyle.TextHAlignment) { default: case Core2D.TextHAlignment.Left: attachmentPoint = MTextAttachmentPoint.TopLeft; break; case Core2D.TextHAlignment.Center: attachmentPoint = MTextAttachmentPoint.TopCenter; break; case Core2D.TextHAlignment.Right: attachmentPoint = MTextAttachmentPoint.TopRight; break; } break; case Core2D.TextVAlignment.Center: switch (text.Style.TextStyle.TextHAlignment) { default: case Core2D.TextHAlignment.Left: attachmentPoint = MTextAttachmentPoint.MiddleLeft; break; case Core2D.TextHAlignment.Center: attachmentPoint = MTextAttachmentPoint.MiddleCenter; break; case Core2D.TextHAlignment.Right: attachmentPoint = MTextAttachmentPoint.MiddleRight; break; } break; case Core2D.TextVAlignment.Bottom: switch (text.Style.TextStyle.TextHAlignment) { default: case Core2D.TextHAlignment.Left: attachmentPoint = MTextAttachmentPoint.BottomLeft; break; case Core2D.TextHAlignment.Center: attachmentPoint = MTextAttachmentPoint.BottomCenter; break; case Core2D.TextHAlignment.Right: attachmentPoint = MTextAttachmentPoint.BottomRight; break; } break; } var ts = new TextStyle(style.TextStyle.FontName, style.TextStyle.FontFile); var dxfMText = new MText( new Vector3(ToDxfX(x), ToDxfY(y), 0), text.Style.TextStyle.FontSize * 72.0 / 96.0, rect.Width, ts); dxfMText.AttachmentPoint = attachmentPoint; var fs = text.Style.TextStyle.FontStyle; var options = new MTextFormattingOptions(dxfMText.Style); options.Bold = fs.Flags.HasFlag(Core2D.FontStyleFlags.Bold); options.Italic = fs.Flags.HasFlag(Core2D.FontStyleFlags.Italic); options.Underline = fs.Flags.HasFlag(Core2D.FontStyleFlags.Underline); options.StrikeThrough = fs.Flags.HasFlag(Core2D.FontStyleFlags.Strikeout); options.Aligment = MTextFormattingOptions.TextAligment.Default; options.Color = null; dxfMText.Write(tbind, options); dxfMText.Layer = _currentLayer; dxfMText.Transparency.Value = strokeTansparency; dxfMText.Color = stroke; _doc.AddEntity(dxfMText); }