lazarus-ccr/applications/fpvviewer/fpvv_mainform.pas
2011-02-12 11:24:28 +00:00

127 lines
2.8 KiB
ObjectPascal

unit fpvv_mainform;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn,
StdCtrls, Spin, ExtCtrls, ComCtrls,
fpvv_drawer;
type
{ TfrmFPVViewer }
TfrmFPVViewer = class(TForm)
btnVisualize: TButton;
btnViewDXFTokens: TButton;
editFileName: TFileNameEdit;
notebook: TNotebook;
pageViewer: TPage;
Page2: TPage;
spinScale: TFloatSpinEdit;
Label1: TLabel;
DXFTreeView: TTreeView;
procedure btnVisualizeClick(Sender: TObject);
procedure btnViewDXFTokensClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
Drawer: TFPVVDrawer;
end;
var
frmFPVViewer: TfrmFPVViewer;
implementation
uses
fpvectorial, cdrvectorialreader, svgvectorialwriter, pdfvectorialreader,
dxfvectorialreader,
fpvtocanvas,
dxftokentotree;
{$R *.lfm}
{ TfrmFPVViewer }
procedure TfrmFPVViewer.btnVisualizeClick(Sender: TObject);
var
Vec: TvVectorialDocument;
begin
// First check the in input
//if not CheckInput() then Exit;
notebook.PageIndex := 0;
Drawer.Clear;
Vec := TvVectorialDocument.Create;
try
Vec.ReadFromFile(editFileName.FileName, vfDXF);
// We need to be robust, because sometimes the document size won't be given
if Vec.Width < 100 then Vec.Width := Drawer.Width;
if Vec.Height < 100 then Vec.Height := Drawer.Height;
Drawer.Drawing.Width := Round(Vec.Width * spinScale.Value);
Drawer.Drawing.Height := Round(Vec.Height * spinScale.Value);
Drawer.Drawing.Canvas.Brush.Color := clWhite;
Drawer.Drawing.Canvas.Brush.Style := bsSolid;
Drawer.Drawing.Canvas.FillRect(0, 0, Drawer.Drawing.Width, Drawer.Drawing.Height);
DrawFPVectorialToCanvas(
Vec,
Drawer.Drawing.Canvas,
0,
Drawer.Drawing.Height,
spinScale.Value,
-1 * spinScale.Value);
Drawer.Invalidate;
finally
Vec.Free;
end;
end;
procedure TfrmFPVViewer.btnViewDXFTokensClick(Sender: TObject);
var
Reader: TvDXFVectorialReader;
Vec: TvVectorialDocument;
begin
// First check the in input
//if not CheckInput() then Exit;
notebook.PageIndex := 1;
Reader := TvDXFVectorialReader.Create;
Vec := TvVectorialDocument.Create;
try
Reader.ReadFromFile(editFileName.FileName, Vec);
ConvertDXFTokensToTreeView(Reader.Tokenizer.Tokens, DXFTreeView);
finally
Reader.Free;
Vec.Free;
end;
end;
procedure TfrmFPVViewer.FormCreate(Sender: TObject);
begin
Drawer := TFPVVDrawer.Create(Self);
Drawer.Parent := pageViewer;
Drawer.Top := 5;
Drawer.Left := 5;
Drawer.AnchorClient(5);
Drawer.TabStop := True;
end;
procedure TfrmFPVViewer.FormDestroy(Sender: TObject);
begin
Drawer.Free;
end;
end.