fpvectorial: Improved visual test program (shows write/read test for both bottom/left and top/left coordinates)

git-svn-id: trunk@52902 -
This commit is contained in:
wp 2016-09-01 16:00:25 +00:00
parent 66bd6bf419
commit 3846e84b9a
2 changed files with 435 additions and 359 deletions

View File

@ -1,33 +1,33 @@
object MainForm: TMainForm object MainForm: TMainForm
Left = 335 Left = 307
Height = 659 Height = 694
Top = 155 Top = 164
Width = 847 Width = 852
Caption = 'Visual fpvectorial test' Caption = 'Visual fpvectorial test'
ClientHeight = 659 ClientHeight = 694
ClientWidth = 847 ClientWidth = 852
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
ShowHint = True ShowHint = True
LCLVersion = '1.7' LCLVersion = '1.7'
object GbTree: TGroupBox object GbTree: TGroupBox
Left = 4 Left = 4
Height = 651 Height = 686
Top = 4 Top = 4
Width = 299 Width = 296
Align = alClient Align = alClient
BorderSpacing.Around = 4 BorderSpacing.Around = 4
Caption = 'Test shapes and objects' Caption = 'Test shapes and objects'
ClientHeight = 631 ClientHeight = 666
ClientWidth = 295 ClientWidth = 292
Font.Style = [fsBold] Font.Style = [fsBold]
ParentFont = False ParentFont = False
TabOrder = 0 TabOrder = 0
object Tree: TTreeView object Tree: TTreeView
Left = 4 Left = 4
Height = 619 Height = 654
Top = 4 Top = 4
Width = 287 Width = 284
Align = alClient Align = alClient
BorderSpacing.Bottom = 4 BorderSpacing.Bottom = 4
BorderSpacing.Around = 4 BorderSpacing.Around = 4
@ -42,49 +42,49 @@ object MainForm: TMainForm
end end
end end
object ScrollBox1: TScrollBox object ScrollBox1: TScrollBox
Left = 307 Left = 304
Height = 659 Height = 694
Top = 0 Top = 0
Width = 540 Width = 548
HorzScrollBar.Increment = 53 HorzScrollBar.Increment = 54
HorzScrollBar.Page = 535 HorzScrollBar.Page = 543
HorzScrollBar.Smooth = True HorzScrollBar.Smooth = True
HorzScrollBar.Tracking = True HorzScrollBar.Tracking = True
VertScrollBar.Increment = 65 VertScrollBar.Increment = 62
VertScrollBar.Page = 652 VertScrollBar.Page = 627
VertScrollBar.Smooth = True VertScrollBar.Smooth = True
VertScrollBar.Tracking = True VertScrollBar.Tracking = True
Align = alRight Align = alRight
BorderStyle = bsNone BorderStyle = bsNone
ClientHeight = 659 ClientHeight = 694
ClientWidth = 540 ClientWidth = 548
TabOrder = 1 TabOrder = 1
object AllTestsPanel: TPanel object AllTestsPanel: TPanel
Left = 4 Left = 4
Height = 644 Height = 619
Top = 4 Top = 4
Width = 528 Width = 536
Align = alTop Align = alTop
AutoSize = True AutoSize = True
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Around = 4 BorderSpacing.Around = 4
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 644 ClientHeight = 619
ClientWidth = 528 ClientWidth = 536
TabOrder = 0 TabOrder = 0
object gbRenderTest: TGroupBox object gbRenderTest: TGroupBox
AnchorSideLeft.Control = AllTestsPanel AnchorSideLeft.Control = AllTestsPanel
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 0 Left = 0
Height = 283 Height = 282
Top = 0 Top = 0
Width = 247 Width = 255
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
AutoSize = True AutoSize = True
BorderSpacing.Right = 31 BorderSpacing.Right = 31
Caption = 'Render test' Caption = 'Render test'
ClientHeight = 263 ClientHeight = 262
ClientWidth = 243 ClientWidth = 251
Font.Style = [fsBold] Font.Style = [fsBold]
ParentFont = False ParentFont = False
TabOrder = 0 TabOrder = 0
@ -92,7 +92,7 @@ object MainForm: TMainForm
Left = 8 Left = 8
Height = 30 Height = 30
Top = 2 Top = 2
Width = 231 Width = 239
Align = alTop Align = alTop
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 2 BorderSpacing.Top = 2
@ -106,7 +106,7 @@ object MainForm: TMainForm
Left = 16 Left = 16
Height = 15 Height = 15
Top = 36 Top = 36
Width = 223 Width = 231
Align = alTop Align = alTop
BorderSpacing.Left = 16 BorderSpacing.Left = 16
BorderSpacing.Top = 4 BorderSpacing.Top = 4
@ -120,7 +120,7 @@ object MainForm: TMainForm
Left = 16 Left = 16
Height = 15 Height = 15
Top = 55 Top = 55
Width = 223 Width = 231
Align = alTop Align = alTop
BorderSpacing.Left = 16 BorderSpacing.Left = 16
BorderSpacing.Top = 4 BorderSpacing.Top = 4
@ -134,7 +134,7 @@ object MainForm: TMainForm
Left = 8 Left = 8
Height = 15 Height = 15
Top = 74 Top = 74
Width = 231 Width = 239
Align = alTop Align = alTop
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 4 BorderSpacing.Top = 4
@ -151,27 +151,28 @@ object MainForm: TMainForm
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 4 Left = 4
Height = 129 Height = 128
Top = 130 Top = 130
Width = 112 Width = 118
AutoSize = True AutoSize = True
BorderSpacing.Left = 4 BorderSpacing.Left = 4
BorderSpacing.Top = 6 BorderSpacing.Top = 6
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Bottom = 4 BorderSpacing.Bottom = 4
Caption = 'Origin at bottom' Caption = 'Origin at BOTTOM'
ClientHeight = 109 ClientHeight = 108
ClientWidth = 108 ClientWidth = 114
ParentFont = False ParentFont = False
TabOrder = 0 TabOrder = 0
object BottomLeftPaintbox: TPaintBox object BottomLeftPaintbox: TPaintBox
AnchorSideLeft.Control = gbBottomLeft
AnchorSideTop.Control = gbBottomLeft AnchorSideTop.Control = gbBottomLeft
Left = 4 Left = 6
Height = 100 Height = 100
Top = 3 Top = 2
Width = 100 Width = 100
BorderSpacing.Left = 4 BorderSpacing.Left = 6
BorderSpacing.Top = 3 BorderSpacing.Top = 2
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
OnPaint = PaintBoxPaint OnPaint = PaintBoxPaint
@ -183,28 +184,29 @@ object MainForm: TMainForm
AnchorSideTop.Control = gbBottomLeft AnchorSideTop.Control = gbBottomLeft
AnchorSideBottom.Control = gbRenderTest AnchorSideBottom.Control = gbRenderTest
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 124 Left = 130
Height = 129 Height = 128
Top = 130 Top = 130
Width = 112 Width = 114
Anchors = [akTop, akLeft, akBottom] Anchors = [akTop, akLeft, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Bottom = 4 BorderSpacing.Bottom = 4
Caption = 'Origin at top' Caption = 'Origin at TOP'
ClientHeight = 109 ClientHeight = 108
ClientWidth = 108 ClientWidth = 110
ParentFont = False ParentFont = False
TabOrder = 1 TabOrder = 1
object TopLeftPaintbox: TPaintBox object TopLeftPaintbox: TPaintBox
AnchorSideLeft.Control = gbTopLeft
AnchorSideTop.Control = gbTopLeft AnchorSideTop.Control = gbTopLeft
Left = 4 Left = 6
Height = 100 Height = 100
Top = 3 Top = 2
Width = 100 Width = 100
BorderSpacing.Left = 4 BorderSpacing.Left = 6
BorderSpacing.Top = 3 BorderSpacing.Top = 2
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
OnPaint = PaintBoxPaint OnPaint = PaintBoxPaint
@ -235,13 +237,13 @@ object MainForm: TMainForm
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
AnchorSideBottom.Control = gbRenderTest AnchorSideBottom.Control = gbRenderTest
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 278 Left = 286
Height = 283 Height = 282
Top = 0 Top = 0
Width = 250 Width = 250
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
Caption = 'Reference image test' Caption = 'Reference image test'
ClientHeight = 263 ClientHeight = 262
ClientWidth = 246 ClientWidth = 246
Font.Style = [fsBold] Font.Style = [fsBold]
ParentFont = False ParentFont = False
@ -295,28 +297,28 @@ object MainForm: TMainForm
AnchorSideBottom.Control = gbReferenceImageTest AnchorSideBottom.Control = gbReferenceImageTest
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 4 Left = 4
Height = 129 Height = 128
Top = 130 Top = 130
Width = 112 Width = 116
Anchors = [akLeft, akBottom] Anchors = [akLeft, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.Left = 4 BorderSpacing.Left = 4
BorderSpacing.Top = 8 BorderSpacing.Top = 8
BorderSpacing.Bottom = 4 BorderSpacing.Bottom = 4
Caption = 'Reference image' Caption = 'Reference image'
ClientHeight = 109 ClientHeight = 108
ClientWidth = 108 ClientWidth = 112
ParentFont = False ParentFont = False
TabOrder = 0 TabOrder = 0
object RefImage: TImage object RefImage: TImage
AnchorSideTop.Control = GroupBox1 AnchorSideTop.Control = GroupBox1
Left = 4 Left = 6
Height = 100 Height = 100
Top = 3 Top = 2
Width = 100 Width = 100
BorderSpacing.Left = 4 BorderSpacing.Left = 6
BorderSpacing.Top = 3 BorderSpacing.Top = 2
BorderSpacing.Right = 4 BorderSpacing.Right = 6
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
end end
end end
@ -328,15 +330,15 @@ object MainForm: TMainForm
AnchorSideRight.Control = AllTestsPanel AnchorSideRight.Control = AllTestsPanel
AnchorSideRight.Side = asrBottom AnchorSideRight.Side = asrBottom
Left = 0 Left = 0
Height = 337 Height = 313
Top = 307 Top = 306
Width = 528 Width = 536
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
AutoSize = True AutoSize = True
BorderSpacing.Top = 24 BorderSpacing.Top = 24
Caption = 'Read/write test' Caption = 'Read/write test'
ClientHeight = 317 ClientHeight = 293
ClientWidth = 524 ClientWidth = 532
Font.Style = [fsBold] Font.Style = [fsBold]
ParentFont = False ParentFont = False
TabOrder = 2 TabOrder = 2
@ -344,7 +346,7 @@ object MainForm: TMainForm
Left = 8 Left = 8
Height = 15 Height = 15
Top = 2 Top = 2
Width = 508 Width = 516
Align = alTop Align = alTop
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 2 BorderSpacing.Top = 2
@ -358,125 +360,60 @@ object MainForm: TMainForm
Left = 8 Left = 8
Height = 45 Height = 45
Top = 72 Top = 72
Width = 508 Width = 516
Align = alTop Align = alTop
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 4 BorderSpacing.Top = 4
BorderSpacing.Right = 8 BorderSpacing.Right = 8
Caption = 'If it does not click "View..." to open the image in an external viewer of the operating system. If the image is displayed correctly by the external viewer there is a bug in the file reader, otherwise the bug is in the writer.' Caption = 'If it does not click "Ext. viewer..." to open the image in an external viewer of the operating system. If the image is displayed correctly by the external viewer there is a bug in the file reader, otherwise the bug is in the writer.'
ParentColor = False ParentColor = False
ParentFont = False ParentFont = False
WordWrap = True WordWrap = True
end end
object gbWMF: TGroupBox object gbWRBottomLeft: TGroupBox
AnchorSideLeft.Control = gbSVG
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbSVG
Left = 182
Height = 157
Top = 152
Width = 169
AutoSize = True
BorderSpacing.Left = 9
BorderSpacing.Bottom = 8
Caption = 'wmf'
ClientHeight = 137
ClientWidth = 165
ParentFont = False
TabOrder = 0
object BtnSaveAsWMF: TButton
AnchorSideLeft.Control = gbWMF
Left = 8
Height = 25
Top = 0
Width = 89
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Bottom = 6
Caption = 'Save && load'
OnClick = BtnSaveToFileClick
TabOrder = 0
end
object BtnViewWMF: TButton
AnchorSideLeft.Control = BtnSaveAsWMF
AnchorSideLeft.Side = asrBottom
Left = 101
Height = 25
Top = 0
Width = 60
AutoSize = True
BorderSpacing.Left = 4
BorderSpacing.Right = 4
BorderSpacing.Bottom = 6
Caption = 'View...'
OnClick = BtnViewImageClick
TabOrder = 1
end
object WMFPaintBox: TPaintBox
AnchorSideLeft.Control = BtnSaveAsWMF
AnchorSideTop.Control = BtnSaveAsWMF
AnchorSideTop.Side = asrBottom
Left = 8
Height = 100
Top = 31
Width = 100
BorderSpacing.Bottom = 6
OnPaint = PaintBoxPaint
end
end
object gbSVG: TGroupBox
AnchorSideLeft.Control = gbReadWriteTest AnchorSideLeft.Control = gbReadWriteTest
AnchorSideTop.Control = RbWriteBottomLeftCoords AnchorSideTop.Control = CbFileFormat
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 4 Left = 4
Height = 157 Height = 129
Top = 152 Top = 156
Width = 169 Width = 209
AutoSize = True AutoSize = True
BorderSpacing.Left = 4 BorderSpacing.Left = 4
BorderSpacing.Top = 8 BorderSpacing.Top = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 8 BorderSpacing.Bottom = 8
Caption = 'svg' Caption = 'Written with origin at BOTTOM'
ClientHeight = 137 ClientHeight = 109
ClientWidth = 165 ClientWidth = 205
ParentFont = False ParentFont = False
TabOrder = 1 TabOrder = 0
object BtnSaveAsSvg: TButton object BtnViewBottomLeft: TButton
AnchorSideLeft.Control = gbSVG AnchorSideLeft.Control = WRBottomLeftPaintbox
Left = 8 AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbWRBottomLeft
AnchorSideTop.Side = asrCenter
Left = 114
Height = 25 Height = 25
Top = 0 Top = 42
Width = 89 Width = 87
AutoSize = True AutoSize = True
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Bottom = 6
Caption = 'Save && load'
OnClick = BtnSaveToFileClick
TabOrder = 0
end
object BtnViewSVG: TButton
AnchorSideLeft.Control = BtnSaveAsSvg
AnchorSideLeft.Side = asrBottom
Left = 101
Height = 25
Top = 0
Width = 60
AutoSize = True
BorderSpacing.Left = 4
BorderSpacing.Right = 4 BorderSpacing.Right = 4
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
Caption = 'View...' Caption = 'Ext viewer...'
OnClick = BtnViewImageClick OnClick = BtnViewImageClick
TabOrder = 1 TabOrder = 0
end end
object SVGPaintbox: TPaintBox object WRBottomLeftPaintbox: TPaintBox
AnchorSideLeft.Control = BtnSaveAsSvg AnchorSideLeft.Control = gbWRBottomLeft
AnchorSideTop.Control = BtnSaveAsSvg AnchorSideTop.Control = gbWRBottomLeft
AnchorSideTop.Side = asrBottom Left = 6
Left = 8
Height = 100 Height = 100
Top = 31 Top = 3
Width = 100 Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 3
BorderSpacing.Bottom = 6 BorderSpacing.Bottom = 6
OnPaint = PaintBoxPaint OnPaint = PaintBoxPaint
end end
@ -485,12 +422,12 @@ object MainForm: TMainForm
Left = 8 Left = 8
Height = 30 Height = 30
Top = 19 Top = 19
Width = 508 Width = 516
Align = alTop Align = alTop
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 2 BorderSpacing.Top = 2
BorderSpacing.Right = 8 BorderSpacing.Right = 8
Caption = 'After clicking "Save && load" the image is written to file, and the file is opened and displayed in the box below.' Caption = 'After clicking "Save && load" both images (with bottom and top origin) are written to file and reloaded for display in the boxes below.'
ParentColor = False ParentColor = False
ParentFont = False ParentFont = False
WordWrap = True WordWrap = True
@ -499,45 +436,121 @@ object MainForm: TMainForm
Left = 8 Left = 8
Height = 15 Height = 15
Top = 53 Top = 53
Width = 512 Width = 520
Align = alTop Align = alTop
BorderSpacing.Left = 8 BorderSpacing.Left = 8
BorderSpacing.Top = 4 BorderSpacing.Top = 4
BorderSpacing.Right = 4 BorderSpacing.Right = 4
Caption = 'This image must match the "Render test" image.' Caption = 'These images must match the "Render test" images.'
Font.Style = [fsBold] Font.Style = [fsBold]
ParentColor = False ParentColor = False
ParentFont = False ParentFont = False
WordWrap = True WordWrap = True
end end
object RbWriteBottomLeftCoords: TRadioButton object CbFileFormat: TComboBox
AnchorSideLeft.Control = LblReadWriteInstructions AnchorSideLeft.Control = Label1
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = LblReadWriteInstructions AnchorSideTop.Control = LblReadWriteInstructions
AnchorSideTop.Side = asrBottom AnchorSideTop.Side = asrBottom
Left = 8 Left = 116
Height = 19 Height = 23
Top = 125 Top = 125
Width = 191 Width = 87
BorderSpacing.Top = 8 BorderSpacing.Top = 8
Caption = 'Use image with origin at bottom' ItemHeight = 15
Checked = True ItemIndex = 0
Items.Strings = (
'svg'
'wmf'
)
OnChange = CbFileFormatChange
ParentFont = False ParentFont = False
TabOrder = 3 Style = csDropDownList
TabStop = True TabOrder = 1
Text = 'svg'
end end
object RbWriteTopLeftCoords: TRadioButton object Label1: TLabel
AnchorSideLeft.Control = RbWriteBottomLeftCoords AnchorSideLeft.Control = LblReadWriteInstructions
AnchorSideTop.Control = CbFileFormat
AnchorSideTop.Side = asrCenter
Left = 8
Height = 15
Top = 129
Width = 100
BorderSpacing.Top = 8
BorderSpacing.Right = 8
Caption = 'File format for test:'
ParentColor = False
ParentFont = False
end
object BtnSaveToFiles: TButton
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = RbWriteBottomLeftCoords AnchorSideTop.Control = CbFileFormat
Left = 215 AnchorSideTop.Side = asrCenter
Height = 19 AnchorSideRight.Control = gbReadWriteTest
Top = 125 AnchorSideRight.Side = asrBottom
Width = 256 Left = 435
Height = 25
Top = 124
Width = 89
Anchors = [akTop, akRight]
AutoSize = True
BorderSpacing.Left = 16 BorderSpacing.Left = 16
Caption = 'at top (Click "Save && load" after changing)' BorderSpacing.Right = 8
BorderSpacing.Bottom = 6
Caption = 'Save && load'
OnClick = BtnSaveToFilesClick
ParentFont = False ParentFont = False
TabOrder = 2 TabOrder = 2
end end
object gbWRTopLeft: TGroupBox
AnchorSideLeft.Control = gbWRBottomLeft
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = CbFileFormat
AnchorSideTop.Side = asrBottom
Left = 221
Height = 129
Top = 156
Width = 212
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Top = 8
BorderSpacing.Bottom = 8
Caption = 'Written with origin at TOP'
ClientHeight = 109
ClientWidth = 208
ParentFont = False
TabOrder = 3
object BtnViewTopLeft: TButton
AnchorSideLeft.Control = WRTopLeftPaintbox
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = WRTopLeftPaintbox
AnchorSideTop.Side = asrCenter
Left = 114
Height = 25
Top = 41
Width = 90
AutoSize = True
BorderSpacing.Left = 8
BorderSpacing.Right = 4
BorderSpacing.Bottom = 6
Caption = 'Ext. viewer...'
OnClick = BtnViewImageClick
TabOrder = 0
end
object WRTopLeftPaintbox: TPaintBox
AnchorSideLeft.Control = gbWRTopLeft
AnchorSideTop.Control = gbWRTopLeft
Left = 6
Height = 100
Top = 3
Width = 100
BorderSpacing.Left = 6
BorderSpacing.Top = 3
BorderSpacing.Bottom = 6
OnPaint = PaintBoxPaint
end
end
end end
end end
end end

View File

@ -27,27 +27,28 @@ type
AIntParam: Integer = MaxInt); AIntParam: Integer = MaxInt);
end; end;
TRenderCoords = (rcBottomLeftCoords, rcTopLeftCoords);
{ TMainForm } { TMainForm }
TMainForm = class(TForm) TMainForm = class(TForm)
BtnSaveAsRef: TButton; BtnSaveAsRef: TButton;
BtnSaveAsWMF: TButton; BtnSaveToFiles: TButton;
BtnSaveAsSvg: TButton; BtnViewBottomLeft: TButton;
BtnViewWMF: TButton; BtnViewTopLeft: TButton;
BtnViewSVG: TButton; CbFileFormat: TComboBox;
gbWMF: TGroupBox; gbWRBottomLeft: TGroupBox;
gbSVG: TGroupBox;
gbRenderTest: TGroupBox; gbRenderTest: TGroupBox;
gbBottomLeft: TGroupBox; gbBottomLeft: TGroupBox;
gbWRTopLeft: TGroupBox;
gbTopLeft: TGroupBox; gbTopLeft: TGroupBox;
gbReferenceImageTest: TGroupBox; gbReferenceImageTest: TGroupBox;
GroupBox1: TGroupBox; GroupBox1: TGroupBox;
gbReadWriteTest: TGroupBox; gbReadWriteTest: TGroupBox;
GbTree: TGroupBox; GbTree: TGroupBox;
Label1: TLabel;
Label14: TLabel; Label14: TLabel;
LblBothImagesMustMatch1: TLabel; LblBothImagesMustMatch1: TLabel;
RbWriteBottomLeftCoords: TRadioButton;
RbWriteTopLeftCoords: TRadioButton;
RefImage: TImage; RefImage: TImage;
Label10: TLabel; Label10: TLabel;
Label11: TLabel; Label11: TLabel;
@ -60,14 +61,15 @@ type
LblReadWriteInstructions: TLabel; LblReadWriteInstructions: TLabel;
BottomLeftPaintbox: TPaintBox; BottomLeftPaintbox: TPaintBox;
ScrollBox1: TScrollBox; ScrollBox1: TScrollBox;
WRTopLeftPaintbox: TPaintBox;
TopLeftPaintbox: TPaintBox; TopLeftPaintbox: TPaintBox;
SVGPaintbox: TPaintBox; WRBottomLeftPaintbox: TPaintBox;
WMFPaintBox: TPaintBox;
AllTestsPanel: TPanel; AllTestsPanel: TPanel;
Tree: TTreeView; Tree: TTreeView;
procedure BtnSaveToFileClick(Sender: TObject); procedure BtnSaveToFilesClick(Sender: TObject);
procedure BtnSaveAsRefClick(Sender: TObject); procedure BtnSaveAsRefClick(Sender: TObject);
procedure BtnViewImageClick(Sender: TObject); procedure BtnViewImageClick(Sender: TObject);
procedure CbFileFormatChange(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure PaintBoxPaint(Sender: TObject); procedure PaintBoxPaint(Sender: TObject);
@ -77,18 +79,20 @@ type
private private
{ private declarations } { private declarations }
FDocTopLeft: TvVectorialDocument; FDoc: array[TRenderCoords] of TvVectorialDocument;
FDocBottomLeft: TvVectorialDocument; FDocFromWMF: array[TRenderCoords] of TvVectorialDocument;
FDocFromWMF: TvVectorialDocument; FDocFromSVG: array[TRenderCoords] of TvVectorialDocument;
FDocFromSVG: TvVectorialDocument; function GetFileFormat: TvVectorialFormat;
procedure CreateDocument(var ADoc: TvVectorialDocument; function GetFileFormatExt: String;
var APage: TvVectorialPage; AUseTopLeftCoords: boolean);
procedure Populate; procedure Populate;
procedure PrepareDoc(var ADoc: TvVectorialDocument; var APage: TvVectorialPage;
AUseTopLeftCoords: boolean);
procedure ReadIni; procedure ReadIni;
procedure ShowFileImage(AFilename: String); procedure ShowFileImage(AFilename: String; AUseTopLeftCoords: Boolean;
procedure ShowReadWriteTestImages; APaintbox: TPaintbox);
procedure ShowRefImageTest; procedure ShowRefImageTest;
procedure ShowRenderTestImages; procedure ShowRenderTestImages;
procedure ShowWriteReadTestImages;
procedure UpdateCmdStates; procedure UpdateCmdStates;
procedure WriteIni; procedure WriteIni;
@ -176,10 +180,10 @@ begin
renderParams := TRenderParams(Tree.Selected.Data); renderParams := TRenderParams(Tree.Selected.Data);
if RenderParams = nil then if RenderParams = nil then
exit; exit;
if FDocBottomLeft = nil then if FDoc[rcBottomLeftCoords] = nil then
exit; exit;
page := FDocBottomLeft.GetPageAsVectorial(0); page := FDoc[rcBottomLeftCoords].GetPageAsVectorial(0);
bmp := TBitmap.Create; bmp := TBitmap.Create;
try try
@ -205,7 +209,7 @@ begin
end; end;
end; end;
procedure TMainForm.BtnSaveToFileClick(Sender: TObject); procedure TMainForm.BtnSaveToFilesClick(Sender: TObject);
var var
fn: String; fn: String;
renderParams: TRenderParams; renderParams: TRenderParams;
@ -213,32 +217,26 @@ var
fmt: TvVectorialFormat; fmt: TvVectorialFormat;
ext: String; ext: String;
begin begin
if FDocBottomLeft = nil then
exit;
renderParams := TRenderParams(Tree.Selected.Data); renderParams := TRenderParams(Tree.Selected.Data);
if RenderParams = nil then if RenderParams = nil then
exit; exit;
if Sender = BtnSaveAsSVG then begin fmt := GetFileFormat;
ext := 'svg'; ext := GetFileFormatExt;
fmt := vfSVG;
end else
if Sender = BtnSaveAsWMF then begin
ext := 'wmf';
fmt := vfWindowsMetafileWMF;
end else
exit;
folder := IMG_FOLDER + ext + PathDelim; folder := IMG_FOLDER + ext + PathDelim;
fn := folder + ChangeFileExt(renderParams.RefFile, '.' + ext);
ForceDirectory(folder); ForceDirectory(folder);
if RbWriteBottomLeftCoords.Checked then
FDocBottomLeft.WriteToFile(fn, fmt)
else if RbWriteTopLeftCoords.Checked then
FDocTopLeft.WriteToFile(fn, fmt);
ShowFileImage(fn); if FDoc[rcBottomLeftCoords] <> nil then begin
fn := folder + 'bl_' + ChangeFileExt(renderParams.RefFile, '.' + ext);
FDoc[rcBottomLeftCoords].WriteToFile(fn, fmt);
ShowFileImage(fn, false, WRBottomLeftPaintbox);
end;
if FDoc[rcTopLeftCoords] <> nil then begin
fn := folder + 'tl_' + ChangeFileExt(renderParams.RefFile, '.' + ext);
FDoc[rcTopLeftCoords].WriteToFile(fn, fmt);
ShowFileImage(fn, true, WRTopLeftPaintbox);
end;
UpdateCmdStates; UpdateCmdStates;
end; end;
@ -247,30 +245,36 @@ procedure TMainForm.BtnViewImageClick(Sender: TObject);
var var
fn: String; fn: String;
ext: String; ext: String;
folder: String;
renderParams: TRenderParams; renderParams: TRenderParams;
begin begin
if Sender = BtnViewSVG then BtnSaveToFilesClick(nil);
begin
BtnSaveToFileClick(BtnSaveAsSVG);
ext := 'svg';
end else
if Sender = BtnViewWMF then
begin
BtnSaveToFileClick(BtnSaveAsWMF);
ext := 'wmf';
end else
exit;
renderParams := TRenderParams(Tree.Selected.Data); renderParams := TRenderParams(Tree.Selected.Data);
if renderParams = nil then if renderParams = nil then
exit; exit;
fn := IMG_FOLDER + ext + PathDelim + ChangeFileExt(renderParams.RefFile, '.'+ext); ext := GetFileFormatExt;
folder := IMG_FOLDER + ext + PathDelim;
if Sender = BtnViewBottomLeft then
fn := folder + 'bl_' + ChangeFileExt(renderParams.RefFile, '.' + ext)
else if Sender = BtnViewTopLeft then
fn := folder + 'tl_' + ChangeFileExt(renderParams.RefFile, '.' + ext)
else
raise Exception.Create('BtnViewImageClick: this sender is not supported.');
if FileExists(fn) then if FileExists(fn) then
OpenDocument(fn); OpenDocument(fn);
end; end;
procedure TMainForm.CreateDocument(var ADoc: TvVectorialDocument; procedure TMainForm.CbFileFormatChange(Sender: TObject);
begin
ShowWriteReadTestImages;
UpdateCmdStates;
end;
procedure TMainForm.PrepareDoc(var ADoc: TvVectorialDocument;
var APage: TvVectorialPage; AUseTopLeftCoords: boolean); var APage: TvVectorialPage; AUseTopLeftCoords: boolean);
var var
r: TvRectangle; r: TvRectangle;
@ -302,8 +306,9 @@ end;
procedure TMainForm.FormCreate(Sender: TObject); procedure TMainForm.FormCreate(Sender: TObject);
begin begin
RefImage.Hint := NOT_SAVED; RefImage.Hint := NOT_SAVED;
SVGPaintbox.Hint := NOT_SAVED; WRBottomLeftPaintbox.Hint := NOT_SAVED;
WMFPaintbox.Hint := NOT_SAVED; WRTopLeftPaintbox.Hint := NOT_SAVED;
ReadIni; ReadIni;
Populate; Populate;
TreeSelectionChanged(nil); TreeSelectionChanged(nil);
@ -312,6 +317,7 @@ end;
procedure TMainForm.FormDestroy(Sender: TObject); procedure TMainForm.FormDestroy(Sender: TObject);
var var
parentnode, node: TTreeNode; parentnode, node: TTreeNode;
rc: TRenderCoords;
begin begin
parentnode := Tree.Items.GetFirstNode; parentnode := Tree.Items.GetFirstNode;
while parentnode <> nil do begin while parentnode <> nil do begin
@ -323,30 +329,64 @@ begin
parentnode := parentnode.GetNextSibling; parentnode := parentnode.GetNextSibling;
end; end;
FreeAndNil(FDocBottomLeft); for rc in TRenderCoords do begin
FreeAndNil(FDocTopLeft); FreeAndNil(FDoc[rc]);
FreeAndNil(FDocFromSVG); FreeAndNil(FDocFromSVG[rc]);
FreeAndNil(FDocFromWMF); FreeAndNil(FDocFromWMF[rc]);
end;
WriteIni; WriteIni;
end; end;
function TMainForm.GetFileFormat: TvVectorialFormat;
begin
case CbFileFormat.ItemIndex of
0: Result := vfSVG;
1: Result := vfWindowsMetafileWMF;
else raise Exception.Create('Format not supported');
end;
end;
function TMainForm.GetFileFormatExt: String;
begin
case CbFileFormat.ItemIndex of
0: Result := 'svg';
1: Result := 'wmf';
else raise Exception.Create('Format not supported');
end;
end;
procedure TMainForm.PaintBoxPaint(Sender: TObject); procedure TMainForm.PaintBoxPaint(Sender: TObject);
var var
doc: TvVectorialDocument; doc: TvVectorialDocument;
page: TvVectorialPage; page: TvVectorialPage;
w, h: Integer; w, h: Integer;
fmt: TvVectorialFormat;
rc: TRenderCoords;
begin begin
if Sender = BottomLeftPaintbox then fmt := GetFileFormat;
doc := FDocBottomLeft
else if Sender = TopLeftPaintbox then if (Sender = BottomLeftPaintbox) or (Sender = WRBottomLeftPaintbox) then
doc := FDocTopLeft rc := rcBottomLeftCoords
else if Sender = SVGPaintbox then
doc := FDocFromSVG
else if Sender = WMFPaintbox then
doc := FDocFromWMF
else else
exit; if (Sender = TopLeftPaintbox) or (Sender = WRTopLeftPaintbox) then
rc := rcTopLeftCoords
else
raise Exception.Create('This sender is not supported here.');
doc := nil;
if (Sender = BottomLeftPaintbox) or (Sender = TopLeftPaintbox) then
doc := FDoc[rc]
else
if (Sender = WRBottomLeftPaintbox) or (Sender = WRTopLeftPaintbox) then
case GetFileFormat of
vfSVG:
doc := FDocFromSVG[rc];
vfWindowsMetafileWMF:
doc := FDocFromWMF[rc];
else
raise Exception.Create('File format not supported.');
end;
w := TPaintbox(Sender).Width; w := TPaintbox(Sender).Width;
h := TPaintbox(Sender).Height; h := TPaintbox(Sender).Height;
@ -425,21 +465,21 @@ begin
TRenderParams.Create(@Render_Arc, 'arc_cw_q41.png', $0207)); TRenderParams.Create(@Render_Arc, 'arc_cw_q41.png', $0207));
Tree.Items.AddChildObject(node, 'Quadrant I, reverse', Tree.Items.AddChildObject(node, 'Quadrant I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q1.png', $0300)); TRenderParams.Create(@Render_Arc, 'arc_cw_q1r.png', $0300));
Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse', Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q12.png', $0301)); TRenderParams.Create(@Render_Arc, 'arc_cw_q12r.png', $0301));
Tree.Items.AddChildObject(node, 'Quadrant II, reverse', Tree.Items.AddChildObject(node, 'Quadrant II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q2.png', $0302)); TRenderParams.Create(@Render_Arc, 'arc_cw_q2r.png', $0302));
Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse', Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q23.png', $0303)); TRenderParams.Create(@Render_Arc, 'arc_cw_q23r.png', $0303));
Tree.Items.AddChildObject(node, 'Quadrant III, reverse', Tree.Items.AddChildObject(node, 'Quadrant III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q3.png', $0304)); TRenderParams.Create(@Render_Arc, 'arc_cw_q3r.png', $0304));
Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q34.png', $0305)); TRenderParams.Create(@Render_Arc, 'arc_cw_q34r.png', $0305));
Tree.Items.AddChildObject(node, 'Quadrant IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q4.png', $0306)); TRenderParams.Create(@Render_Arc, 'arc_cw_q4r.png', $0306));
Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_cw_q41.png', $0307)); TRenderParams.Create(@Render_Arc, 'arc_cw_q41r.png', $0307));
node := Tree.Items.AddChild(node1, 'counter-clockwise from point 1 to point 2'); node := Tree.Items.AddChild(node1, 'counter-clockwise from point 1 to point 2');
Tree.Items.AddChildObject(node, 'Quadrant I', Tree.Items.AddChildObject(node, 'Quadrant I',
@ -460,21 +500,21 @@ begin
TRenderParams.Create(@Render_Arc, 'arc_ccw_q41.png', $0007)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q41.png', $0007));
Tree.Items.AddChildObject(node, 'Quadrant I, reverse', Tree.Items.AddChildObject(node, 'Quadrant I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q1.png', $0100)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q1r.png', $0100));
Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse', Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q12.png', $0101)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q12r.png', $0101));
Tree.Items.AddChildObject(node, 'Quadrant II, reverse', Tree.Items.AddChildObject(node, 'Quadrant II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q2.png', $0102)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q2r.png', $0102));
Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse', Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q23.png', $0103)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q23r.png', $0103));
Tree.Items.AddChildObject(node, 'Quadrant III, reverse', Tree.Items.AddChildObject(node, 'Quadrant III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q3.png', $0104)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q3r.png', $0104));
Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q34.png', $0105)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q34r.png', $0105));
Tree.Items.AddChildObject(node, 'Quadrant IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q4.png', $0106)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q4r.png', $0106));
Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_rev_ccw_q41.png', $0107)); TRenderParams.Create(@Render_Arc, 'arc_ccw_q41r.png', $0107));
node1 := Tree.Items.AddChild(node0, 'elliptical'); node1 := Tree.Items.AddChild(node0, 'elliptical');
node := Tree.Items.AddChild(node1, 'clockwise from point 1 to point 2'); node := Tree.Items.AddChild(node1, 'clockwise from point 1 to point 2');
@ -496,21 +536,21 @@ begin
TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q41.png', $1207)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q41.png', $1207));
Tree.Items.AddChildObject(node, 'Quadrant I, reverse', Tree.Items.AddChildObject(node, 'Quadrant I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q1.png', $1300)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q1r.png', $1300));
Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse', Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q12.png', $1301)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q12r.png', $1301));
Tree.Items.AddChildObject(node, 'Quadrant II, reverse', Tree.Items.AddChildObject(node, 'Quadrant II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q2.png', $1302)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q2r.png', $1302));
Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse', Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q23.png', $1303)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q23r.png', $1303));
Tree.Items.AddChildObject(node, 'Quadrant III, reverse', Tree.Items.AddChildObject(node, 'Quadrant III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q3.png', $1304)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q3r.png', $1304));
Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q34.png', $1305)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q34r.png', $1305));
Tree.Items.AddChildObject(node, 'Quadrant IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q4.png', $1306)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q4r.png', $1306));
Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_cw_q41.png', $1307)); TRenderParams.Create(@Render_Arc, 'arc_ell_cw_q41r.png', $1307));
node := Tree.Items.AddChild(node1, 'counter-clockwise from point 1 to point 2'); node := Tree.Items.AddChild(node1, 'counter-clockwise from point 1 to point 2');
Tree.Items.AddChildObject(node, 'Quadrant I', Tree.Items.AddChildObject(node, 'Quadrant I',
@ -531,21 +571,21 @@ begin
TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q41.png', $1007)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q41.png', $1007));
Tree.Items.AddChildObject(node, 'Quadrant I, reverse', Tree.Items.AddChildObject(node, 'Quadrant I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q1.png', $1100)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q1r.png', $1100));
Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse', Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q12.png', $1101)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q12r.png', $1101));
Tree.Items.AddChildObject(node, 'Quadrant II, reverse', Tree.Items.AddChildObject(node, 'Quadrant II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q2.png', $1102)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q2r.png', $1102));
Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse', Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q23.png', $1103)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q23r.png', $1103));
Tree.Items.AddChildObject(node, 'Quadrant III, reverse', Tree.Items.AddChildObject(node, 'Quadrant III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q3.png', $1104)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q3r.png', $1104));
Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q34.png', $1105)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q34r.png', $1105));
Tree.Items.AddChildObject(node, 'Quadrant IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q4.png', $1106)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q4r.png', $1106));
Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ell_rev_ccw_q41.png', $1107)); TRenderParams.Create(@Render_Arc, 'arc_ell_ccw_q41r.png', $1107));
node1 := Tree.Items.AddChild(node0, 'elliptical, rotated 30deg'); node1 := Tree.Items.AddChild(node0, 'elliptical, rotated 30deg');
node := Tree.Items.AddChild(node1, 'clockwise from point 1 to point 2'); node := Tree.Items.AddChild(node1, 'clockwise from point 1 to point 2');
@ -567,21 +607,21 @@ begin
TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q41.png', $2207)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q41.png', $2207));
Tree.Items.AddChildObject(node, 'Quadrant I, reverse', Tree.Items.AddChildObject(node, 'Quadrant I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q1.png', $2300)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q1r.png', $2300));
Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse', Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q12.png', $2301)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q12r.png', $2301));
Tree.Items.AddChildObject(node, 'Quadrant II, reverse', Tree.Items.AddChildObject(node, 'Quadrant II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q2.png', $2302)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q2r.png', $2302));
Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse', Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q23.png', $2303)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q23r.png', $2303));
Tree.Items.AddChildObject(node, 'Quadrant III, reverse', Tree.Items.AddChildObject(node, 'Quadrant III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q3.png', $2304)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q3r.png', $2304));
Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q34.png', $2305)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q34r.png', $2305));
Tree.Items.AddChildObject(node, 'Quadrant IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q4.png', $2306)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q4r.png', $2306));
Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_cw_q41.png', $2307)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_cw_q41r.png', $2307));
node := Tree.Items.AddChild(node1, 'counter-clockwise from point 1 to point 2'); node := Tree.Items.AddChild(node1, 'counter-clockwise from point 1 to point 2');
Tree.Items.AddChildObject(node, 'Quadrant I', Tree.Items.AddChildObject(node, 'Quadrant I',
@ -602,21 +642,21 @@ begin
TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q41.png', $2007)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q41.png', $2007));
Tree.Items.AddChildObject(node, 'Quadrant I, reverse', Tree.Items.AddChildObject(node, 'Quadrant I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q1.png', $2100)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q1r.png', $2100));
Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse', Tree.Items.AddChildObject(node, 'Quadrant I+II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q12.png', $2101)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q12r.png', $2101));
Tree.Items.AddChildObject(node, 'Quadrant II, reverse', Tree.Items.AddChildObject(node, 'Quadrant II, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q2.png', $2102)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q2r.png', $2102));
Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse', Tree.Items.AddChildObject(node, 'Quadrant II+III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q23.png', $2103)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q23r.png', $2103));
Tree.Items.AddChildObject(node, 'Quadrant III, reverse', Tree.Items.AddChildObject(node, 'Quadrant III, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q3.png', $2104)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q3r.png', $2104));
Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant III+IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q34.png', $2105)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q34r.png', $2105));
Tree.Items.AddChildObject(node, 'Quadrant IV, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q4.png', $2106)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q4r.png', $2106));
Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse', Tree.Items.AddChildObject(node, 'Quadrant IV+I, reverse',
TRenderParams.Create(@Render_Arc, 'arc_ellrot_rev_ccw_q41.png', $2107)); TRenderParams.Create(@Render_Arc, 'arc_ellrot_ccw_q41r.png', $2107));
{ -----------------------------------------------} { -----------------------------------------------}
node0 := Tree.Items.AddChild(nil, 'Gradients'); node0 := Tree.Items.AddChild(nil, 'Gradients');
@ -1013,56 +1053,41 @@ begin
end; end;
end; end;
procedure TMainForm.ShowFileImage(AFilename: String); procedure TMainForm.ShowFileImage(AFilename: String; AUseTopLeftCoords: Boolean;
APaintbox: TPaintbox);
var var
ext: String; ext: String;
rc: TRenderCoords;
begin begin
if AUseTopLeftCoords then
rc := rcTopLeftCoords else
rc := rcBottomLeftCoords;
ext := Lowercase(ExtractFileExt(AFileName)); ext := Lowercase(ExtractFileExt(AFileName));
if ext = '.svg' then begin
FreeAndNil(FDocFromSVG); if not FileExists(AFileName) then begin
if FileExists(AFileName) then begin case ext of
FDocFromSVG := TvVectorialDocument.Create; '.svg': FreeAndNil(FDocFromSVG[rc]);
FDocFromSVG.ReadFromFile(AFileName); '.wmf': FreeAndNil(FDocFromWMF[rc]);
SVGPaintbox.Hint := AFilename; else raise Exception.Create('File type not supported');
end else begin
SVGPaintbox.Hint := NOT_SAVED;
end; end;
SVGPaintbox.Invalidate; APaintbox.Hint := NOT_SAVED;
APaintbox.Invalidate;
exit;
end;
if ext = '.svg' then begin
FreeAndNil(FDocFromSVG[rc]);
FDocFromSVG[rc] := TvVectorialDocument.Create;
FDocFromSVG[rc].ReadFromFile(AFileName);
end else end else
if ext = '.wmf' then begin if ext = '.wmf' then begin
FreeAndNil(FDocFromWMF); FreeAndNil(FDocFromWMF[rc]);
if FileExists(AFileName) then begin FDocFromWMF[rc] := TvVectorialDocument.Create;
FDocFromWMF := TvVectorialDocument.Create; FDocFromWMF[rc].ReadFromFile(AFilename);
FDocFromWMF.ReadFromFile(AFilename);
WMFPaintBox.Hint := AFileName;
end else begin
WMFPaintBox.Hint := NOT_SAVED;
end; end;
WMFPaintBox.Invalidate; APaintbox.Hint := AFileName;
end; APaintBox.Invalidate;
end;
procedure TMainForm.ShowReadWriteTestImages;
var
renderParams: TRenderParams;
fn: String;
begin
if Tree.Selected = nil then
exit;
renderParams := TRenderParams(Tree.Selected.Data);
if renderParams = nil then
begin
SVGPaintbox.Invalidate;
WMFPaintbox.Invalidate;
exit;
end;
fn := IMG_FOLDER + 'svg' + PathDelim + ChangeFileExt(renderParams.RefFile, '.svg');
ShowFileImage(fn);
fn := IMG_FOLDER + 'wmf' + PathDelim + ChangeFileExt(renderParams.RefFile, '.wmf');
ShowFileImage(fn);
end; end;
procedure TMainForm.ShowRefImageTest; procedure TMainForm.ShowRefImageTest;
@ -1107,22 +1132,56 @@ begin
end; end;
// Render document with bottom/left origin // Render document with bottom/left origin
CreateDocument(FDocBottomLeft, page, false); PrepareDoc(FDoc[rcBottomLeftCoords], page, false);
renderParams.OnRender(page, renderParams.IntParam); renderParams.OnRender(page, renderParams.IntParam);
BottomLeftPaintbox.Invalidate; BottomLeftPaintbox.Invalidate;
// Render document with top/left origin // Render document with top/left origin
CreateDocument(FDocTopLeft, page, true); PrepareDoc(FDoc[rcTopLeftCoords], page, true);
renderParams.OnRender(page, renderParams.IntParam); renderParams.OnRender(page, renderParams.IntParam);
TopLeftPaintbox.Invalidate; TopLeftPaintbox.Invalidate;
end; end;
procedure TMainForm.ShowWriteReadTestImages;
var
renderParams: TRenderParams;
folder: String;
fn: String;
ext: String;
rc: TRenderCoords;
begin
for rc in TRenderCoords do begin
FreeAndNil(FDocFromSVG[rc]);
FreeAndNil(FDocFromWMF[rc]);
end;
if Tree.Selected = nil then
exit;
renderParams := TRenderParams(Tree.Selected.Data);
if renderParams = nil then
begin
WRBottomLeftPaintbox.Invalidate;
WRTopLeftPaintbox.Invalidate;
exit;
end;
ext := GetFileFormatExt;
folder := IMG_FOLDER + ext + PathDelim;
fn := folder + 'bl_' + ChangeFileExt(renderParams.RefFile, '.' + ext);
ShowFileImage(fn, false, WRBottomLeftPaintbox);
fn := folder + 'tl_' + ChangeFileExt(renderParams.RefFile, '.' + ext);
ShowFileImage(fn, true, WRTopLeftPaintbox);
end;
procedure TMainForm.TreeSelectionChanged(Sender: TObject); procedure TMainForm.TreeSelectionChanged(Sender: TObject);
begin begin
UpdateCmdStates;
ShowRenderTestImages; ShowRenderTestImages;
ShowRefImageTest; ShowRefImageTest;
ShowReadWriteTestImages; ShowWriteReadTestImages;
UpdateCmdStates;
end; end;
procedure TMainForm.TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; procedure TMainForm.TreeCustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode;
@ -1136,26 +1195,30 @@ end;
procedure TMainForm.UpdateCmdStates; procedure TMainForm.UpdateCmdStates;
var var
fn: String; fn: String;
folder: string;
renderParams: TRenderParams; renderParams: TRenderParams;
svgOK, wmfOK: boolean; ext: String;
rc: TRenderCoords;
rcOK: array[TRenderCoords] of boolean = (false, false);
begin begin
BtnSaveAsRef.Enabled := Tree.Selected <> nil; BtnSaveAsRef.Enabled := Tree.Selected <> nil;
BtnSaveAsWMF.Enabled := Tree.Selected <> nil; BtnSaveToFiles.Enabled := Tree.Selected <> nil;
BtnSaveAsSVG.Enabled := Tree.Selected <> nil; BtnViewBottomLeft.Enabled := Tree.Selected <> nil;
BtnViewTopLeft.Enabled := Tree.Selected <> nil;
svgOK := false;
wmfOK := false;
if Tree.Selected <> nil then begin if Tree.Selected <> nil then begin
renderParams := TRenderParams(Tree.Selected.Data); renderParams := TRenderParams(Tree.Selected.Data);
if renderParams <> nil then begin if renderParams <> nil then begin
fn := IMG_FOLDER + 'svg' + PathDelim + ChangeFileExt(renderParams.RefFile, '.svg'); ext := GetFileFormatExt;
svgOK := FileExists(fn); folder := IMG_FOLDER + ext + PathDelim;
fn := IMG_FOLDER + 'wmf' + PathDelim + ChangeFileExt(renderParams.RefFile, '.wmf'); fn := folder + 'bl_' + ChangeFileExt(renderParams.RefFile, '.' + ext);
wmfOK := FileExists(fn); rcOK[rcBottomLeftCoords] := FileExists(fn);
fn := folder + 'tl_' + ChangeFileExt(renderParams.RefFile, '.' + ext);
rcOK[rcTopLeftCoords] := FileExists(fn);
end; end;
end; end;
BtnViewSVG.Enabled := svgOK; BtnViewBottomLeft.Enabled := rcOK[rcBottomLeftcoords];
BtnViewWMF.Enabled := wmfOK; BtnViewTopLeft.Enabled := rcOK[rcTopLeftCoords];
end; end;
end. end.