fpvectorial: Fixes SVG input/output

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1914 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2011-09-07 12:15:43 +00:00
parent 628c2fe4ab
commit d295c567f9
2 changed files with 19 additions and 15 deletions

View File

@ -348,6 +348,8 @@ begin
lFirstLayer := Doc.DocumentElement.FirstChild; lFirstLayer := Doc.DocumentElement.FirstChild;
lCurNode := lFirstLayer.FirstChild; lCurNode := lFirstLayer.FirstChild;
lPage := AData.AddPage(); lPage := AData.AddPage();
lPage.Width := AData.Width;
lPage.Height := AData.Height;
while Assigned(lCurNode) do while Assigned(lCurNode) do
begin begin
ReadPathFromNode(lCurNode, lPage, AData); ReadPathFromNode(lCurNode, lPage, AData);

View File

@ -23,11 +23,11 @@ type
FPointSeparator, FCommaSeparator: TFormatSettings; FPointSeparator, FCommaSeparator: TFormatSettings;
procedure WriteDocumentSize(AStrings: TStrings; AData: TvVectorialDocument); procedure WriteDocumentSize(AStrings: TStrings; AData: TvVectorialDocument);
procedure WriteDocumentName(AStrings: TStrings; AData: TvVectorialDocument); procedure WriteDocumentName(AStrings: TStrings; AData: TvVectorialDocument);
procedure WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings; AData: TvVectorialDocument); procedure WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings; AData: TvVectorialPage; ADoc: TvVectorialDocument);
procedure WriteText(AStrings: TStrings; lText: TvText; AData: TvVectorialDocument); procedure WriteText(AStrings: TStrings; lText: TvText; AData: TvVectorialPage; ADoc: TvVectorialDocument);
procedure WriteEntities(AStrings: TStrings; AData: TvVectorialDocument); procedure WriteEntities(AStrings: TStrings; AData: TvVectorialPage; ADoc: TvVectorialDocument);
procedure ConvertFPVCoordinatesToSVGCoordinates( procedure ConvertFPVCoordinatesToSVGCoordinates(
const AData: TvVectorialDocument; const AData: TvVectorialPage;
const ASrcX, ASrcY: Double; var ADestX, ADestY: double); const ASrcX, ASrcY: Double; var ADestX, ADestY: double);
public public
{ General reading methods } { General reading methods }
@ -76,7 +76,7 @@ end;
"." as decimal separators and uses no thousand separators "." as decimal separators and uses no thousand separators
} }
procedure TvSVGVectorialWriter.WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings; procedure TvSVGVectorialWriter.WritePath(AIndex: Integer; APath: TPath; AStrings: TStrings;
AData: TvVectorialDocument); AData: TvVectorialPage; ADoc: TvVectorialDocument);
var var
j: Integer; j: Integer;
PathStr: string; PathStr: string;
@ -178,7 +178,7 @@ begin
end; end;
procedure TvSVGVectorialWriter.ConvertFPVCoordinatesToSVGCoordinates( procedure TvSVGVectorialWriter.ConvertFPVCoordinatesToSVGCoordinates(
const AData: TvVectorialDocument; const ASrcX, ASrcY: Double; var ADestX, const AData: TvVectorialPage; const ASrcX, ASrcY: Double; var ADestX,
ADestY: double); ADestY: double);
begin begin
ADestX := ASrcX / FLOAT_MILIMETERS_PER_PIXEL; ADestX := ASrcX / FLOAT_MILIMETERS_PER_PIXEL;
@ -187,6 +187,8 @@ end;
procedure TvSVGVectorialWriter.WriteToStrings(AStrings: TStrings; procedure TvSVGVectorialWriter.WriteToStrings(AStrings: TStrings;
AData: TvVectorialDocument); AData: TvVectorialDocument);
var
lPage: TvVectorialPage;
begin begin
// Format seetings to convert a string to a float // Format seetings to convert a string to a float
FPointSeparator := DefaultFormatSettings; FPointSeparator := DefaultFormatSettings;
@ -214,14 +216,16 @@ begin
// Now data // Now data
AStrings.Add(' <g id="layer1">'); AStrings.Add(' <g id="layer1">');
WriteEntities(AStrings, AData); lPage := AData.GetPage(0);
WriteEntities(AStrings, lPage, AData);
AStrings.Add(' </g>'); AStrings.Add(' </g>');
// finalization // finalization
AStrings.Add('</svg>'); AStrings.Add('</svg>');
end; end;
procedure TvSVGVectorialWriter.WriteText(AStrings: TStrings; lText: TvText; AData: TvVectorialDocument); procedure TvSVGVectorialWriter.WriteText(AStrings: TStrings; lText: TvText;
AData: TvVectorialPage; ADoc: TvVectorialDocument);
var var
i, j, FontSize: Integer; i, j, FontSize: Integer;
TextStr, FontName, SVGFontFamily: string; TextStr, FontName, SVGFontFamily: string;
@ -249,19 +253,17 @@ begin
end; end;
procedure TvSVGVectorialWriter.WriteEntities(AStrings: TStrings; procedure TvSVGVectorialWriter.WriteEntities(AStrings: TStrings;
AData: TvVectorialDocument); AData: TvVectorialPage; ADoc: TvVectorialDocument);
var var
lEntity: TvEntity; lEntity: TvEntity;
i, j: Integer; i, j: Integer;
CurPage: TvVectorialPage;
begin begin
CurPage := AData.GetPage(0); for i := 0 to AData.GetEntitiesCount() - 1 do
for i := 0 to CurPage.GetEntitiesCount() - 1 do
begin begin
lEntity := CurPage.GetEntity(i); lEntity := AData.GetEntity(i);
if lEntity is TPath then WritePath(i, TPath(lEntity), AStrings, AData) if lEntity is TPath then WritePath(i, TPath(lEntity), AStrings, AData, ADoc)
else if lEntity is TvText then WriteText(AStrings, TvText(lEntity), AData); else if lEntity is TvText then WriteText(AStrings, TvText(lEntity), AData, ADoc);
end; end;
end; end;