From d295c567f935c31b47ed3c47277ffcd8dd0547a3 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Wed, 7 Sep 2011 12:15:43 +0000 Subject: [PATCH] fpvectorial: Fixes SVG input/output git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1914 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../fpvectorialsrc/svgvectorialreader.pas | 2 ++ .../fpvectorialsrc/svgvectorialwriter.pas | 32 ++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/applications/fpvviewer/fpvectorialsrc/svgvectorialreader.pas b/applications/fpvviewer/fpvectorialsrc/svgvectorialreader.pas index 4f766309a..a36f956ef 100644 --- a/applications/fpvviewer/fpvectorialsrc/svgvectorialreader.pas +++ b/applications/fpvviewer/fpvectorialsrc/svgvectorialreader.pas @@ -348,6 +348,8 @@ begin lFirstLayer := Doc.DocumentElement.FirstChild; lCurNode := lFirstLayer.FirstChild; lPage := AData.AddPage(); + lPage.Width := AData.Width; + lPage.Height := AData.Height; while Assigned(lCurNode) do begin ReadPathFromNode(lCurNode, lPage, AData); diff --git a/applications/fpvviewer/fpvectorialsrc/svgvectorialwriter.pas b/applications/fpvviewer/fpvectorialsrc/svgvectorialwriter.pas index d51188813..811a4914b 100644 --- a/applications/fpvviewer/fpvectorialsrc/svgvectorialwriter.pas +++ b/applications/fpvviewer/fpvectorialsrc/svgvectorialwriter.pas @@ -23,11 +23,11 @@ type FPointSeparator, FCommaSeparator: TFormatSettings; procedure WriteDocumentSize(AStrings: TStrings; AData: TvVectorialDocument); procedure WriteDocumentName(AStrings: TStrings; AData: TvVectorialDocument); - procedure WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings; AData: TvVectorialDocument); - procedure WriteText(AStrings: TStrings; lText: TvText; AData: TvVectorialDocument); - procedure WriteEntities(AStrings: TStrings; AData: TvVectorialDocument); + procedure WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings; AData: TvVectorialPage; ADoc: TvVectorialDocument); + procedure WriteText(AStrings: TStrings; lText: TvText; AData: TvVectorialPage; ADoc: TvVectorialDocument); + procedure WriteEntities(AStrings: TStrings; AData: TvVectorialPage; ADoc: TvVectorialDocument); procedure ConvertFPVCoordinatesToSVGCoordinates( - const AData: TvVectorialDocument; + const AData: TvVectorialPage; const ASrcX, ASrcY: Double; var ADestX, ADestY: double); public { General reading methods } @@ -76,7 +76,7 @@ end; "." as decimal separators and uses no thousand separators } procedure TvSVGVectorialWriter.WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings; - AData: TvVectorialDocument); + AData: TvVectorialPage; ADoc: TvVectorialDocument); var j: Integer; PathStr: string; @@ -178,7 +178,7 @@ begin end; procedure TvSVGVectorialWriter.ConvertFPVCoordinatesToSVGCoordinates( - const AData: TvVectorialDocument; const ASrcX, ASrcY: Double; var ADestX, + const AData: TvVectorialPage; const ASrcX, ASrcY: Double; var ADestX, ADestY: double); begin ADestX := ASrcX / FLOAT_MILIMETERS_PER_PIXEL; @@ -187,6 +187,8 @@ end; procedure TvSVGVectorialWriter.WriteToStrings(AStrings: TStrings; AData: TvVectorialDocument); +var + lPage: TvVectorialPage; begin // Format seetings to convert a string to a float FPointSeparator := DefaultFormatSettings; @@ -214,14 +216,16 @@ begin // Now data AStrings.Add(' '); - WriteEntities(AStrings, AData); + lPage := AData.GetPage(0); + WriteEntities(AStrings, lPage, AData); AStrings.Add(' '); // finalization AStrings.Add(''); end; -procedure TvSVGVectorialWriter.WriteText(AStrings: TStrings; lText: TvText; AData: TvVectorialDocument); +procedure TvSVGVectorialWriter.WriteText(AStrings: TStrings; lText: TvText; + AData: TvVectorialPage; ADoc: TvVectorialDocument); var i, j, FontSize: Integer; TextStr, FontName, SVGFontFamily: string; @@ -249,19 +253,17 @@ begin end; procedure TvSVGVectorialWriter.WriteEntities(AStrings: TStrings; - AData: TvVectorialDocument); + AData: TvVectorialPage; ADoc: TvVectorialDocument); var lEntity: TvEntity; i, j: Integer; - CurPage: TvVectorialPage; begin - CurPage := AData.GetPage(0); - for i := 0 to CurPage.GetEntitiesCount() - 1 do + for i := 0 to AData.GetEntitiesCount() - 1 do begin - lEntity := CurPage.GetEntity(i); + lEntity := AData.GetEntity(i); - if lEntity is TPath then WritePath(i, TPath(lEntity), AStrings, AData) - else if lEntity is TvText then WriteText(AStrings, TvText(lEntity), AData); + if lEntity is TPath then WritePath(i, TPath(lEntity), AStrings, AData, ADoc) + else if lEntity is TvText then WriteText(AStrings, TvText(lEntity), AData, ADoc); end; end;