217 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			217 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
{
 | 
						|
     Apophysis Copyright (C) 2001-2004 Mark Townsend
 | 
						|
 | 
						|
     This program is free software; you can redistribute it and/or modify
 | 
						|
     it under the terms of the GNU General Public License as published by
 | 
						|
     the Free Software Foundation; either version 2 of the License, or
 | 
						|
     (at your option) any later version.
 | 
						|
 | 
						|
     This program is distributed in the hope that it will be useful,
 | 
						|
     but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
						|
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
						|
     GNU General Public License for more details.
 | 
						|
 | 
						|
     You should have received a copy of the GNU General Public License
 | 
						|
     along with this program; if not, write to the Free Software
 | 
						|
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 | 
						|
}
 | 
						|
unit FormExport;
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
uses
 | 
						|
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 | 
						|
  StdCtrls, Buttons, ComCtrls;
 | 
						|
 | 
						|
type
 | 
						|
  TExportDialog = class(TForm)
 | 
						|
    btnOK: TButton;
 | 
						|
    btnCancel: TButton;
 | 
						|
    GroupBox1: TGroupBox;
 | 
						|
    btnBrowse: TSpeedButton;
 | 
						|
    Label10: TLabel;
 | 
						|
    txtFilename: TEdit;
 | 
						|
    SaveDialog: TSaveDialog;
 | 
						|
    GroupBox3: TGroupBox;
 | 
						|
    Label3: TLabel;
 | 
						|
    Label5: TLabel;
 | 
						|
    Label4: TLabel;
 | 
						|
    txtOversample: TEdit;
 | 
						|
    txtFilterRadius: TEdit;
 | 
						|
    txtDensity: TEdit;
 | 
						|
    udOversample: TUpDown;
 | 
						|
    GroupBox2: TGroupBox;
 | 
						|
    Label1: TLabel;
 | 
						|
    Label2: TLabel;
 | 
						|
    chkMaintain: TCheckBox;
 | 
						|
    cbWidth: TComboBox;
 | 
						|
    cbHeight: TComboBox;
 | 
						|
    GroupBox4: TGroupBox;
 | 
						|
    Label6: TLabel;
 | 
						|
    txtBatches: TEdit;
 | 
						|
    udBatches: TUpDown;
 | 
						|
    Label7: TLabel;
 | 
						|
    cmbDepth: TComboBox;
 | 
						|
    chkRender: TCheckBox;
 | 
						|
    Label8: TLabel;
 | 
						|
    txtStrips: TEdit;
 | 
						|
    udStrips: TUpDown;
 | 
						|
    procedure btnBrowseClick(Sender: TObject);
 | 
						|
    procedure FormShow(Sender: TObject);
 | 
						|
    procedure btnOKClick(Sender: TObject);
 | 
						|
    procedure txtWidthChange(Sender: TObject);
 | 
						|
    procedure chkMaintainClick(Sender: TObject);
 | 
						|
    procedure txtHeightChange(Sender: TObject);
 | 
						|
    procedure txtDensityChange(Sender: TObject);
 | 
						|
    procedure txtFilterRadiusChange(Sender: TObject);
 | 
						|
    procedure txtOversampleChange(Sender: TObject);
 | 
						|
    procedure txtBatchesChange(Sender: TObject);
 | 
						|
    procedure cmbDepthChange(Sender: TObject);
 | 
						|
  private
 | 
						|
    { Private declarations }
 | 
						|
  public
 | 
						|
    Filename: string;
 | 
						|
    ImageWidth, ImageHeight, Oversample, Batches, Strips: Integer;
 | 
						|
    Sample_Density, Filter_Radius: double;
 | 
						|
    { Public declarations }
 | 
						|
  end;
 | 
						|
 | 
						|
var
 | 
						|
  ExportDialog: TExportDialog;
 | 
						|
  Ratio: double;
 | 
						|
 | 
						|
implementation
 | 
						|
uses Global, Main;
 | 
						|
 | 
						|
{$R *.DFM}
 | 
						|
 | 
						|
procedure TExportDialog.btnBrowseClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  SaveDialog.InitialDir := ExtractFileDir(txtFilename.text);
 | 
						|
  SaveDialog.Filename := txtFilename.Text;
 | 
						|
  case ExportFileFormat of
 | 
						|
    0: SaveDialog.DefaultExt := 'jpg';
 | 
						|
    1: SaveDialog.DefaultExt := 'ppm';
 | 
						|
  end;
 | 
						|
  SaveDialog.filterIndex := ExportFileFormat;
 | 
						|
  SaveDialog.Filter := 'JPEG image (*.jpg) |*.jpg|PPM image (*.ppm)|*.ppm|PNG Image (*.png)|*.png';
 | 
						|
  if SaveDialog.Execute then
 | 
						|
  begin
 | 
						|
    case SaveDialog.FilterIndex of
 | 
						|
      1: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.jpg');
 | 
						|
      2: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.ppm');
 | 
						|
      3: txtFilename.Text := ChangeFileExt(SaveDialog.Filename, '.png');
 | 
						|
    end;
 | 
						|
    ExportFileFormat := SaveDialog.FilterIndex;
 | 
						|
    renderPath := ExtractFilePath(SaveDialog.Filename);
 | 
						|
  end;
 | 
						|
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.FormShow(Sender: TObject);
 | 
						|
begin
 | 
						|
  txtFilename.Text := Filename;
 | 
						|
  cbWidth.Text := IntToStr(MainCp.Width);
 | 
						|
  cbHeight.Text := IntToStr(MainCp.Height);
 | 
						|
  ImageWidth := MainCp.Width;
 | 
						|
  ImageHeight := MainCp.Height;
 | 
						|
  txtDensity.text := FloatToStr(Sample_density);
 | 
						|
  if cmbDepth.ItemIndex <> 2 then
 | 
						|
    txtBatches.text := IntToStr(Round(Sample_density / 4));
 | 
						|
  txtFilterRadius.text := FloatToStr(Filter_Radius);
 | 
						|
  txtOversample.text := IntToSTr(Oversample);
 | 
						|
  udOversample.Position := Oversample;
 | 
						|
  Ratio := ImageWidth / ImageHeight;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.btnOKClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  Filename := txtFilename.text;
 | 
						|
  ImageWidth := StrToInt(cbWidth.Text);
 | 
						|
  ImageHeight := StrToInt(cbHeight.Text);
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.txtWidthChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  try
 | 
						|
    ImageWidth := StrToInt(cbWidth.Text);
 | 
						|
    if chkMaintain.checked and cbWidth.Focused then
 | 
						|
    begin
 | 
						|
      ImageHeight := Round(ImageWidth / ratio);
 | 
						|
      cbHeight.Text := IntToStr(ImageHeight)
 | 
						|
    end;
 | 
						|
  except
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.chkMaintainClick(Sender: TObject);
 | 
						|
begin
 | 
						|
  Ratio := ImageWidth / ImageHeight;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.txtHeightChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  try
 | 
						|
    ImageHeight := StrToInt(cbHeight.Text);
 | 
						|
    if chkMaintain.checked and cbHeight.Focused then
 | 
						|
    begin
 | 
						|
      ImageWidth := Round(ImageHeight * ratio);
 | 
						|
      cbWidth.Text := IntToStr(ImageWidth)
 | 
						|
    end;
 | 
						|
  except
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.txtDensityChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  try
 | 
						|
    Sample_Density := StrToFloat(txtDensity.Text);
 | 
						|
    if cmbDepth.ItemIndex <> 2 then
 | 
						|
      txtBatches.text := IntToStr(Round(Sample_density / 4));
 | 
						|
  except
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.txtFilterRadiusChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  try
 | 
						|
    Filter_Radius := StrToFloat(txtFilterRadius.Text);
 | 
						|
  except
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.txtOversampleChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  if StrToInt(txtOversample.Text) > udOversample.Max then
 | 
						|
    txtOversample.Text := IntToStr(udOversample.Max);
 | 
						|
  if StrToInt(txtOversample.Text) < udOversample.Min then
 | 
						|
    txtOversample.Text := IntToStr(udOversample.Min);
 | 
						|
  try
 | 
						|
    Oversample := StrToInt(txtOversample.Text);
 | 
						|
  except
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.txtBatchesChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  if StrToInt(txtBatches.Text) > udBatches.Max then
 | 
						|
    txtBatches.Text := IntToStr(udBatches.Max);
 | 
						|
  if StrToInt(txtBatches.Text) < udBatches.Min then
 | 
						|
    txtBatches.Text := IntToStr(udBatches.Min);
 | 
						|
  try
 | 
						|
    Batches := StrToInt(txtBatches.Text);
 | 
						|
  except
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
procedure TExportDialog.cmbDepthChange(Sender: TObject);
 | 
						|
begin
 | 
						|
  if cmbDepth.ItemIndex <> 2 then
 | 
						|
    txtBatches.text := IntToStr(Round(Sample_density / 4))
 | 
						|
  else
 | 
						|
    txtBatches.text := IntToStr(1);
 | 
						|
end;
 | 
						|
 | 
						|
end.
 | 
						|
 |