ADMIN: migration complete
git-svn-id: https://svn.code.sf.net/p/apophysis7x/svn/trunk@1 a5d1c0f9-a0e9-45c6-87dd-9d276e40c949
This commit is contained in:
222
Apophysis7X.dpr
Normal file
222
Apophysis7X.dpr
Normal file
@ -0,0 +1,222 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
|
||||
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.
|
||||
}
|
||||
program Apophysis7X;
|
||||
|
||||
{%ToDo 'Assets\Apophysis7X.todo'}
|
||||
{$R 'Resources\Apophysis7X.res'}
|
||||
{$SetPEFlags $20}
|
||||
|
||||
{$ifdef VER240}
|
||||
// we need to update TMS Scripter to the XE3 version...
|
||||
{$ifndef DisableScripting}
|
||||
{$Define DisableScripting}
|
||||
{$endif}
|
||||
{$endif}
|
||||
|
||||
uses
|
||||
|
||||
{-- BASIC --}
|
||||
FastMM4 in 'System\FastMM4.pas',
|
||||
FastMM4Messages in 'System\FastMM4Messages.pas',
|
||||
Forms, Dialogs, SysUtils,
|
||||
Binary in 'IO\Binary.pas',
|
||||
Base64 in 'IO\Base64.pas',
|
||||
sdStringTable in 'System\sdStringTable.pas',
|
||||
CustomDrawControl in 'System\CustomDrawControl.pas',
|
||||
LibXmlComps in 'System\LibXmlComps.pas',
|
||||
LibXmlParser in 'System\LibXmlParser.pas',
|
||||
Windows7 in 'System\Windows7.pas',
|
||||
RegexHelper in 'System\RegexHelper.pas',
|
||||
CurvesControl in 'System\CurvesControl.pas',
|
||||
|
||||
{$ifdef Apo7X64}
|
||||
// if on x64, we don't use assembler
|
||||
{$else}
|
||||
AsmRandom in 'System\AsmRandom.pas',
|
||||
{$endif}
|
||||
|
||||
{-- CORE --}
|
||||
Global in 'Core\Global.pas',
|
||||
CommandLine in 'IO\CommandLine.pas',
|
||||
MissingPlugin in 'IO\MissingPlugin.pas',
|
||||
Settings in 'IO\Settings.pas',
|
||||
Translation in 'Core\Translation.pas',
|
||||
ParameterIO in 'IO\ParameterIO.pas',
|
||||
Bezier in 'Core\Bezier.pas',
|
||||
|
||||
{-- FLAME --}
|
||||
RndFlame in 'Flame\RndFlame.pas',
|
||||
ControlPoint in 'Flame\ControlPoint.pas',
|
||||
cmapdata in 'ColorMap\cmapdata.pas',
|
||||
cmap in 'ColorMap\cmap.pas',
|
||||
GradientHlpr in 'ColorMap\GradientHlpr.pas',
|
||||
XFormMan in 'Core\XFormMan.pas',
|
||||
XForm in 'Flame\XForm.pas',
|
||||
BaseVariation in 'Core\BaseVariation.pas',
|
||||
|
||||
{-- RENDERER --}
|
||||
RenderingCommon in 'Rendering\RenderingCommon.pas',
|
||||
RenderingInterface in 'Rendering\RenderingInterface.pas',
|
||||
RenderingImplementation in 'Rendering\RenderingImplementation.pas',
|
||||
BucketFillerThread in 'Rendering\BucketFillerThread.pas',
|
||||
RenderThread in 'Rendering\RenderThread.pas',
|
||||
ImageMaker in 'Rendering\ImageMaker.pas',
|
||||
|
||||
{-- VARIATIONS --}
|
||||
varHemisphere in 'Variations\varHemisphere.pas',
|
||||
varLog in 'Variations\varLog.pas',
|
||||
varPolar2 in 'Variations\varPolar2.pas',
|
||||
varRings2 in 'Variations\varRings2.pas',
|
||||
varFan2 in 'Variations\varFan2.pas',
|
||||
varCross in 'Variations\varCross.pas',
|
||||
varWedge in 'Variations\varWedge.pas',
|
||||
varEpispiral in 'Variations\varEpispiral.pas',
|
||||
varBwraps in 'Variations\varBwraps.pas',
|
||||
varPDJ in 'Variations\varPDJ.pas',
|
||||
varJuliaN in 'Variations\varJuliaN.pas',
|
||||
varJuliaScope in 'Variations\varJuliaScope.pas',
|
||||
varJulia3Djf in 'Variations\varJulia3Djf.pas',
|
||||
varJulia3Dz in 'Variations\varJulia3Dz.pas',
|
||||
varCurl in 'Variations\varCurl.pas',
|
||||
varCurl3D in 'Variations\varCurl3D.pas',
|
||||
varRadialBlur in 'Variations\varRadialBlur.pas',
|
||||
varBlurCircle in 'Variations\varBlurCircle.pas',
|
||||
varBlurZoom in 'Variations\varBlurZoom.pas',
|
||||
varBlurPixelize in 'Variations\varBlurPixelize.pas',
|
||||
varFalloff2 in 'Variations\varFalloff2.pas',
|
||||
varRectangles in 'Variations\varRectangles.pas',
|
||||
varSplits in 'Variations\varSplits.pas',
|
||||
varSeparation in 'Variations\varSeparation.pas',
|
||||
varBipolar in 'Variations\varBipolar.pas',
|
||||
varLoonie in 'Variations\varLoonie.pas',
|
||||
varEscher in 'Variations\varEscher.pas',
|
||||
varScry in 'Variations\varScry.pas',
|
||||
varNGon in 'Variations\varNGon.pas',
|
||||
varFoci in 'Variations\varFoci.pas',
|
||||
varLazysusan in 'Variations\varLazysusan.pas',
|
||||
varMobius in 'Variations\varMobius.pas',
|
||||
varCrop in 'Variations\varCrop.pas',
|
||||
// circlecrop
|
||||
varElliptic in 'Variations\varElliptic.pas',
|
||||
varWaves2 in 'Variations\varWaves2.pas',
|
||||
varAuger in 'Variations\varAuger.pas',
|
||||
// glynnsim2
|
||||
// flux
|
||||
// boarders2
|
||||
varPreSpherical in 'Variations\varPreSpherical.pas',
|
||||
varPreSinusoidal in 'Variations\varPreSinusoidal.pas',
|
||||
varPreDisc in 'Variations\varPreDisc.pas',
|
||||
// pre_boarders2
|
||||
varPreBwraps in 'Variations\varPreBwraps.pas',
|
||||
varPreCrop in 'Variations\varPreCrop.pas',
|
||||
// pre_circlecrop
|
||||
varPreFalloff2 in 'Variations\varPreFalloff2.pas',
|
||||
// post_boarders2
|
||||
varPostBwraps in 'Variations\varPostBwraps.pas',
|
||||
varPostCurl in 'Variations\varPostCurl.pas',
|
||||
varPostCurl3D in 'Variations\varPostCurl3D.pas',
|
||||
varPostCrop in 'Variations\varPostCrop.pas',
|
||||
// post_circlecrop
|
||||
varPostFalloff2 in 'Variations\varPostFalloff2.pas',
|
||||
varGenericPlugin in 'Variations\varGenericPlugin.pas',
|
||||
|
||||
{-- GUI --}
|
||||
Main in 'Forms\Main.pas' {MainForm},
|
||||
Tracer in 'Forms\Tracer.pas' {TraceForm},
|
||||
About in 'Forms\About.pas' {AboutForm},
|
||||
Adjust in 'Forms\Adjust.pas' {AdjustForm},
|
||||
Browser in 'Forms\Browser.pas' {GradientBrowser},
|
||||
Editor in 'Forms\Editor.pas' {EditForm},
|
||||
FormExport in 'Forms\FormExport.pas' {ExportDialog},
|
||||
formPostProcess in 'Forms\formPostProcess.pas' {frmPostProcess},
|
||||
FormRender in 'Forms\FormRender.pas' {RenderForm},
|
||||
Fullscreen in 'Forms\Fullscreen.pas' {FullscreenForm},
|
||||
ImageColoring in 'Forms\ImageColoring.pas' {frmImageColoring},
|
||||
LoadTracker in 'Forms\LoadTracker.pas' {LoadForm},
|
||||
Mutate in 'Forms\Mutate.pas' {MutateForm},
|
||||
Options in 'Forms\Options.pas' {OptionsForm},
|
||||
Save in 'Forms\Save.pas' {SaveForm},
|
||||
SavePreset in 'Forms\SavePreset.pas' {SavePresetForm},
|
||||
SplashForm in 'Forms\SplashForm.pas' {SplashWindow},
|
||||
Template in 'Forms\Template.pas' {TemplateForm},
|
||||
Curves in 'Forms\Curves.pas' {CurvesForm}
|
||||
|
||||
{$ifdef DisableScripting};
|
||||
// if scripting is disabled, don't import the scripting form units
|
||||
{$else},
|
||||
Preview in 'Forms\Preview.pas' {PreviewForm},
|
||||
FormFavorites in 'Forms\FormFavorites.pas' {FavoritesForm},
|
||||
ScriptForm in 'Forms\ScriptForm.pas' {ScriptEditor},
|
||||
ScriptRender in 'Forms\ScriptRender.pas'; {ScriptRenderForm}
|
||||
{$endif}
|
||||
|
||||
begin
|
||||
InitializePlugins;
|
||||
|
||||
SplashWindow := TSplashWindow.Create(Application);
|
||||
SplashWindow.Show;
|
||||
|
||||
Application.Initialize;
|
||||
SplashWindow.Update;
|
||||
|
||||
{$ifdef Apo7X64}
|
||||
Application.Title := 'Apophysis 7x (32 bit)';
|
||||
{$else}
|
||||
Application.Title := 'Apophysis 7x (64 bit)';
|
||||
{$endif}
|
||||
Application.HelpFile := 'Apophysis7x.chm';
|
||||
Application.CreateForm(TMainForm, MainForm);
|
||||
Application.CreateForm(TTraceForm, TraceForm);
|
||||
Application.CreateForm(TAboutForm, AboutForm);
|
||||
Application.CreateForm(TAdjustForm, AdjustForm);
|
||||
Application.CreateForm(TGradientBrowser, GradientBrowser);
|
||||
Application.CreateForm(TEditForm, EditForm);
|
||||
Application.CreateForm(TExportDialog, ExportDialog);
|
||||
Application.CreateForm(TfrmPostProcess, frmPostProcess);
|
||||
Application.CreateForm(TRenderForm, RenderForm);
|
||||
Application.CreateForm(TFullscreenForm, FullscreenForm);
|
||||
Application.CreateForm(TfrmImageColoring, frmImageColoring);
|
||||
Application.CreateForm(TLoadForm, LoadForm);
|
||||
Application.CreateForm(TMutateForm, MutateForm);
|
||||
Application.CreateForm(TOptionsForm, OptionsForm);
|
||||
Application.CreateForm(TSaveForm, SaveForm);
|
||||
Application.CreateForm(TSavePresetForm, SavePresetForm);
|
||||
Application.CreateForm(TTemplateForm, TemplateForm);
|
||||
Application.CreateForm(TCurvesForm, CurvesForm);
|
||||
|
||||
{$ifdef DisableScripting}
|
||||
// if scripting is disabled, don't create the scripting forms
|
||||
{$else}
|
||||
Application.CreateForm(TPreviewForm, PreviewForm);
|
||||
Application.CreateForm(TFavoritesForm, FavoritesForm);
|
||||
Application.CreateForm(TScriptEditor, ScriptEditor);
|
||||
Application.CreateForm(TScriptRenderForm, ScriptRenderForm);
|
||||
{$endif}
|
||||
|
||||
Application.UpdateFormatSettings := False;
|
||||
{$ifdef VER240}
|
||||
FormatSettings.DecimalSeparator := '.';
|
||||
{$else}
|
||||
DecimalSeparator := '.';
|
||||
{$endif}
|
||||
Application.Run;
|
||||
end.
|
||||
|
||||
|
||||
360
Apophysis7X.dproj
Normal file
360
Apophysis7X.dproj
Normal file
@ -0,0 +1,360 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{AC01F3AB-4101-4C09-A648-1CC8E2C412D5}</ProjectGuid>
|
||||
<MainSource>Apophysis7X.dpr</MainSource>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Release</Config>
|
||||
<TargetedPlatforms>3</TargetedPlatforms>
|
||||
<AppType>Application</AppType>
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<ProjectVersion>14.3</ProjectVersion>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
|
||||
<Base_Win64>true</Base_Win64>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
|
||||
<Base_Win32>true</Base_Win32>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_1)'!=''">
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
|
||||
<Cfg_1_Win64>true</Cfg_1_Win64>
|
||||
<CfgParent>Cfg_1</CfgParent>
|
||||
<Cfg_1>true</Cfg_1>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_2)'!=''">
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<CfgParent>Base</CfgParent>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
|
||||
<Cfg_2_Win64>true</Cfg_2_Win64>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
|
||||
<Cfg_2_Win32>true</Cfg_2_Win32>
|
||||
<CfgParent>Cfg_2</CfgParent>
|
||||
<Cfg_2>true</Cfg_2>
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<DCC_Define>DisableScripting;$(DCC_Define)</DCC_Define>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0</VerInfo_Keys>
|
||||
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
|
||||
<Icon_MainIcon>Apophysis7X_Icon.ico</Icon_MainIcon>
|
||||
<DCC_IOChecking>false</DCC_IOChecking>
|
||||
<VerInfo_Build>1325</VerInfo_Build>
|
||||
<DCC_COMBINING_SIGNED_UNSIGNED>false</DCC_COMBINING_SIGNED_UNSIGNED>
|
||||
<DCC_UsePackage>vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;dsnap;cds;bdecds;teeui;teedb;tee;dss;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;soaprtl;dbexpress;dbxcds;dclOffice2k;FlatStyle_D6;S303_R60;RzLPDB60;RzLPND60;vclshlctrls;B302vr60;VirtualTreesD6;o403_r60;ibxpress;CSP20I60;Rz30Ctls60;Rz30DBCtls60;indy;Indy60;vclactnband;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_ImageBase>00400000</DCC_ImageBase>
|
||||
<DCC_Hints>false</DCC_Hints>
|
||||
<DCC_COMPARING_SIGNED_UNSIGNED>false</DCC_COMPARING_SIGNED_UNSIGNED>
|
||||
<VerInfo_MajorVer>2</VerInfo_MajorVer>
|
||||
<DCC_UNIT_DEPRECATED>false</DCC_UNIT_DEPRECATED>
|
||||
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
|
||||
<DCC_SYMBOL_PLATFORM>false</DCC_SYMBOL_PLATFORM>
|
||||
<DCC_ExeOutput>..\..\out</DCC_ExeOutput>
|
||||
<DCC_UnitSearchPath>$(BDS)\lib\Debug;$(BDS)\Lib\Debug\Indy10;$(DELPHI)\Lib\Debug;$(DCC_UnitSearchPath)</DCC_UnitSearchPath>
|
||||
<DCC_S>false</DCC_S>
|
||||
<DCC_N>true</DCC_N>
|
||||
<DCC_K>false</DCC_K>
|
||||
<DCC_SYMBOL_DEPRECATED>false</DCC_SYMBOL_DEPRECATED>
|
||||
<VerInfo_Release>9</VerInfo_Release>
|
||||
<DCC_UNIT_PLATFORM>false</DCC_UNIT_PLATFORM>
|
||||
<DCC_F>false</DCC_F>
|
||||
<DCC_DcuOutput>..\..\out\dcu</DCC_DcuOutput>
|
||||
<DCC_COMPARISON_TRUE>false</DCC_COMPARISON_TRUE>
|
||||
<DCC_E>false</DCC_E>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
<DCC_COMPARISON_FALSE>false</DCC_COMPARISON_FALSE>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
<PreBuildEvent><![CDATA[DEL /Q "$(OUTPUTDIR)*$(OUTPUTEXT)"
|
||||
$(PreBuildEvent)]]></PreBuildEvent>
|
||||
<PostBuildEvent><![CDATA[COPY /Y "$(OUTPUTDIR)$(OUTPUTFILENAME)" "$(OUTPUTDIR)Apophysis7X64$(OUTPUTEXT)"
|
||||
DEL /Q "$(OUTPUTDIR)$(OUTPUTFILENAME)"
|
||||
$(PostBuildEvent)]]></PostBuildEvent>
|
||||
<VerInfo_Build>0</VerInfo_Build>
|
||||
<VerInfo_MajorVer>1</VerInfo_MajorVer>
|
||||
<VerInfo_Release>0</VerInfo_Release>
|
||||
<DCC_ExeOutput>..\..\Out\x64\</DCC_ExeOutput>
|
||||
<DCC_DcuOutput>..\..\Out\x64\dcu\</DCC_DcuOutput>
|
||||
<DCC_Define>Apo7X64;$(DCC_Define)</DCC_Define>
|
||||
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win32)'!=''">
|
||||
<DCC_ExeOutput>..\..\Out\x86\</DCC_ExeOutput>
|
||||
<DCC_DcuOutput>..\..\Out\x86\dcu\</DCC_DcuOutput>
|
||||
<DCC_Namespace>Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1)'!=''">
|
||||
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
|
||||
<DCC_DebugInformation>false</DCC_DebugInformation>
|
||||
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
|
||||
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_MajorVer>1</VerInfo_MajorVer>
|
||||
<VerInfo_Release>0</VerInfo_Release>
|
||||
<VerInfo_Build>0</VerInfo_Build>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2)'!=''">
|
||||
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
|
||||
<DCC_Optimize>false</DCC_Optimize>
|
||||
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
|
||||
<VerInfo_MajorVer>1</VerInfo_MajorVer>
|
||||
<VerInfo_Build>0</VerInfo_Build>
|
||||
<VerInfo_Release>0</VerInfo_Release>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<Icon_MainIcon>Resources\MAINICON.ico</Icon_MainIcon>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
<DCC_IMPLICIT_STRING_CAST>false</DCC_IMPLICIT_STRING_CAST>
|
||||
<DCC_RemoteDebug>true</DCC_RemoteDebug>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
|
||||
<VerInfo_Build>1590</VerInfo_Build>
|
||||
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
|
||||
<VerInfo_MinorVer>1</VerInfo_MinorVer>
|
||||
<VerInfo_Release>15</VerInfo_Release>
|
||||
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=2.1.15.1590;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0</VerInfo_Keys>
|
||||
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<DelphiCompile Include="$(MainSource)">
|
||||
<MainSource>MainSource</MainSource>
|
||||
</DelphiCompile>
|
||||
<DCCReference Include="System\FastMM4.pas"/>
|
||||
<DCCReference Include="System\FastMM4Messages.pas"/>
|
||||
<DCCReference Include="IO\Binary.pas"/>
|
||||
<DCCReference Include="IO\Base64.pas"/>
|
||||
<DCCReference Include="System\sdStringTable.pas"/>
|
||||
<DCCReference Include="System\CustomDrawControl.pas"/>
|
||||
<DCCReference Include="System\LibXmlComps.pas"/>
|
||||
<DCCReference Include="System\LibXmlParser.pas"/>
|
||||
<DCCReference Include="System\Windows7.pas"/>
|
||||
<DCCReference Include="System\RegexHelper.pas"/>
|
||||
<DCCReference Include="System\CurvesControl.pas"/>
|
||||
<DCCReference Include="System\AsmRandom.pas"/>
|
||||
<DCCReference Include="Core\Global.pas"/>
|
||||
<DCCReference Include="IO\CommandLine.pas"/>
|
||||
<DCCReference Include="IO\MissingPlugin.pas"/>
|
||||
<DCCReference Include="IO\Settings.pas"/>
|
||||
<DCCReference Include="Core\Translation.pas"/>
|
||||
<DCCReference Include="IO\ParameterIO.pas"/>
|
||||
<DCCReference Include="Core\Bezier.pas"/>
|
||||
<DCCReference Include="Flame\RndFlame.pas"/>
|
||||
<DCCReference Include="Flame\ControlPoint.pas"/>
|
||||
<DCCReference Include="ColorMap\cmapdata.pas"/>
|
||||
<DCCReference Include="ColorMap\cmap.pas"/>
|
||||
<DCCReference Include="ColorMap\GradientHlpr.pas"/>
|
||||
<DCCReference Include="Core\XFormMan.pas"/>
|
||||
<DCCReference Include="Flame\XForm.pas"/>
|
||||
<DCCReference Include="Core\BaseVariation.pas"/>
|
||||
<DCCReference Include="Rendering\RenderingCommon.pas"/>
|
||||
<DCCReference Include="Rendering\RenderingInterface.pas"/>
|
||||
<DCCReference Include="Rendering\RenderingImplementation.pas"/>
|
||||
<DCCReference Include="Rendering\BucketFillerThread.pas"/>
|
||||
<DCCReference Include="Rendering\RenderThread.pas"/>
|
||||
<DCCReference Include="Rendering\ImageMaker.pas"/>
|
||||
<DCCReference Include="Variations\varHemisphere.pas"/>
|
||||
<DCCReference Include="Variations\varLog.pas"/>
|
||||
<DCCReference Include="Variations\varPolar2.pas"/>
|
||||
<DCCReference Include="Variations\varRings2.pas"/>
|
||||
<DCCReference Include="Variations\varFan2.pas"/>
|
||||
<DCCReference Include="Variations\varCross.pas"/>
|
||||
<DCCReference Include="Variations\varWedge.pas"/>
|
||||
<DCCReference Include="Variations\varEpispiral.pas"/>
|
||||
<DCCReference Include="Variations\varBwraps.pas"/>
|
||||
<DCCReference Include="Variations\varPDJ.pas"/>
|
||||
<DCCReference Include="Variations\varJuliaN.pas"/>
|
||||
<DCCReference Include="Variations\varJuliaScope.pas"/>
|
||||
<DCCReference Include="Variations\varJulia3Djf.pas"/>
|
||||
<DCCReference Include="Variations\varJulia3Dz.pas"/>
|
||||
<DCCReference Include="Variations\varCurl.pas"/>
|
||||
<DCCReference Include="Variations\varCurl3D.pas"/>
|
||||
<DCCReference Include="Variations\varRadialBlur.pas"/>
|
||||
<DCCReference Include="Variations\varBlurCircle.pas"/>
|
||||
<DCCReference Include="Variations\varBlurZoom.pas"/>
|
||||
<DCCReference Include="Variations\varBlurPixelize.pas"/>
|
||||
<DCCReference Include="Variations\varFalloff2.pas"/>
|
||||
<DCCReference Include="Variations\varRectangles.pas"/>
|
||||
<DCCReference Include="Variations\varSplits.pas"/>
|
||||
<DCCReference Include="Variations\varSeparation.pas"/>
|
||||
<DCCReference Include="Variations\varBipolar.pas"/>
|
||||
<DCCReference Include="Variations\varLoonie.pas"/>
|
||||
<DCCReference Include="Variations\varEscher.pas"/>
|
||||
<DCCReference Include="Variations\varScry.pas"/>
|
||||
<DCCReference Include="Variations\varNGon.pas"/>
|
||||
<DCCReference Include="Variations\varFoci.pas"/>
|
||||
<DCCReference Include="Variations\varLazysusan.pas"/>
|
||||
<DCCReference Include="Variations\varMobius.pas"/>
|
||||
<DCCReference Include="Variations\varCrop.pas"/>
|
||||
<DCCReference Include="Variations\varElliptic.pas"/>
|
||||
<DCCReference Include="Variations\varWaves2.pas"/>
|
||||
<DCCReference Include="Variations\varAuger.pas"/>
|
||||
<DCCReference Include="Variations\varPreSpherical.pas"/>
|
||||
<DCCReference Include="Variations\varPreSinusoidal.pas"/>
|
||||
<DCCReference Include="Variations\varPreDisc.pas"/>
|
||||
<DCCReference Include="Variations\varPreBwraps.pas"/>
|
||||
<DCCReference Include="Variations\varPreCrop.pas"/>
|
||||
<DCCReference Include="Variations\varPreFalloff2.pas"/>
|
||||
<DCCReference Include="Variations\varPostBwraps.pas"/>
|
||||
<DCCReference Include="Variations\varPostCurl.pas"/>
|
||||
<DCCReference Include="Variations\varPostCurl3D.pas"/>
|
||||
<DCCReference Include="Variations\varPostCrop.pas"/>
|
||||
<DCCReference Include="Variations\varPostFalloff2.pas"/>
|
||||
<DCCReference Include="Variations\varGenericPlugin.pas"/>
|
||||
<DCCReference Include="Forms\Main.pas">
|
||||
<Form>MainForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Tracer.pas">
|
||||
<Form>TraceForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\About.pas">
|
||||
<Form>AboutForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Adjust.pas">
|
||||
<Form>AdjustForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Browser.pas">
|
||||
<Form>GradientBrowser</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Editor.pas">
|
||||
<Form>EditForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\FormExport.pas">
|
||||
<Form>ExportDialog</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\formPostProcess.pas">
|
||||
<Form>frmPostProcess</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\FormRender.pas">
|
||||
<Form>RenderForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Fullscreen.pas">
|
||||
<Form>FullscreenForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\ImageColoring.pas">
|
||||
<Form>frmImageColoring</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\LoadTracker.pas">
|
||||
<Form>LoadForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Mutate.pas">
|
||||
<Form>MutateForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Options.pas">
|
||||
<Form>OptionsForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Save.pas">
|
||||
<Form>SaveForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\SavePreset.pas">
|
||||
<Form>SavePresetForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\SplashForm.pas">
|
||||
<Form>SplashWindow</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Template.pas">
|
||||
<Form>TemplateForm</Form>
|
||||
</DCCReference>
|
||||
<DCCReference Include="Forms\Curves.pas">
|
||||
<Form>CurvesForm</Form>
|
||||
</DCCReference>
|
||||
<None Include="Apophysis7X.todo"/>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Base">
|
||||
<Key>Base</Key>
|
||||
</BuildConfiguration>
|
||||
<BuildConfiguration Include="Release">
|
||||
<Key>Cfg_1</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
</BuildConfiguration>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Delphi.Personality>
|
||||
<Source>
|
||||
<Source Name="MainSource">Apophysis7X.dpr</Source>
|
||||
</Source>
|
||||
<Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k160.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
<Excluded_Packages Name="$(BDSBIN)\dclofficexp160.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
|
||||
</Excluded_Packages>
|
||||
<VersionInfo>
|
||||
<VersionInfo Name="IncludeVerInfo">False</VersionInfo>
|
||||
<VersionInfo Name="AutoIncBuild">False</VersionInfo>
|
||||
<VersionInfo Name="MajorVer">1</VersionInfo>
|
||||
<VersionInfo Name="MinorVer">0</VersionInfo>
|
||||
<VersionInfo Name="Release">0</VersionInfo>
|
||||
<VersionInfo Name="Build">0</VersionInfo>
|
||||
<VersionInfo Name="Debug">False</VersionInfo>
|
||||
<VersionInfo Name="PreRelease">False</VersionInfo>
|
||||
<VersionInfo Name="Special">False</VersionInfo>
|
||||
<VersionInfo Name="Private">False</VersionInfo>
|
||||
<VersionInfo Name="DLL">False</VersionInfo>
|
||||
<VersionInfo Name="Locale">1031</VersionInfo>
|
||||
<VersionInfo Name="CodePage">1252</VersionInfo>
|
||||
</VersionInfo>
|
||||
<VersionInfoKeys>
|
||||
<VersionInfoKeys Name="CompanyName"/>
|
||||
<VersionInfoKeys Name="FileDescription"/>
|
||||
<VersionInfoKeys Name="FileVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="InternalName"/>
|
||||
<VersionInfoKeys Name="LegalCopyright"/>
|
||||
<VersionInfoKeys Name="LegalTrademarks"/>
|
||||
<VersionInfoKeys Name="OriginalFilename"/>
|
||||
<VersionInfoKeys Name="ProductName"/>
|
||||
<VersionInfoKeys Name="ProductVersion">1.0.0.0</VersionInfoKeys>
|
||||
<VersionInfoKeys Name="Comments"/>
|
||||
</VersionInfoKeys>
|
||||
</Delphi.Personality>
|
||||
<Platforms>
|
||||
<Platform value="Win64">True</Platform>
|
||||
<Platform value="Win32">True</Platform>
|
||||
</Platforms>
|
||||
</BorlandProject>
|
||||
<ProjectFileVersion>12</ProjectFileVersion>
|
||||
</ProjectExtensions>
|
||||
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')" Project="$(BDS)\Bin\CodeGear.Delphi.Targets"/>
|
||||
<Import Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')" Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj"/>
|
||||
<PropertyGroup Condition="'$(Config)'=='Release' And '$(Platform)'=='Win64'">
|
||||
<PreBuildEvent>DEL /Q "$(OUTPUTDIR)*$(OUTPUTEXT)"</PreBuildEvent>
|
||||
<PreBuildEventIgnoreExitCode>False</PreBuildEventIgnoreExitCode>
|
||||
<PreLinkEvent/>
|
||||
<PreLinkEventIgnoreExitCode>False</PreLinkEventIgnoreExitCode>
|
||||
<PostBuildEvent>COPY /Y "$(OUTPUTDIR)$(OUTPUTFILENAME)" "$(OUTPUTDIR)Apophysis7X64$(OUTPUTEXT)"&&DEL /Q "$(OUTPUTDIR)$(OUTPUTFILENAME)"</PostBuildEvent>
|
||||
<PostBuildEventIgnoreExitCode>False</PostBuildEventIgnoreExitCode>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Config)'=='Debug' And '$(Platform)'=='Win64'">
|
||||
<PreBuildEvent>DEL /Q "$(OUTPUTDIR)*$(OUTPUTEXT)"</PreBuildEvent>
|
||||
<PreBuildEventIgnoreExitCode>False</PreBuildEventIgnoreExitCode>
|
||||
<PreLinkEvent/>
|
||||
<PreLinkEventIgnoreExitCode>False</PreLinkEventIgnoreExitCode>
|
||||
<PostBuildEvent>COPY /Y "$(OUTPUTDIR)$(OUTPUTFILENAME)" "$(OUTPUTDIR)Apophysis7X64$(OUTPUTEXT)"&&DEL /Q "$(OUTPUTDIR)$(OUTPUTFILENAME)"</PostBuildEvent>
|
||||
<PostBuildEventIgnoreExitCode>False</PostBuildEventIgnoreExitCode>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
36
Apophysis7X.groupproj
Normal file
36
Apophysis7X.groupproj
Normal file
@ -0,0 +1,36 @@
|
||||
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{2C89F2DE-83E1-4164-B84E-1D0509F8AB8C}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Projects Include="Apophysis7X.dproj">
|
||||
<Dependencies/>
|
||||
</Projects>
|
||||
</ItemGroup>
|
||||
<ProjectExtensions>
|
||||
<Borland.Personality>Default.Personality.12</Borland.Personality>
|
||||
<Borland.ProjectType/>
|
||||
<BorlandProject>
|
||||
<Default.Personality/>
|
||||
</BorlandProject>
|
||||
</ProjectExtensions>
|
||||
<Target Name="Apophysis7X">
|
||||
<MSBuild Projects="Apophysis7X.dproj"/>
|
||||
</Target>
|
||||
<Target Name="Apophysis7X:Clean">
|
||||
<MSBuild Projects="Apophysis7X.dproj" Targets="Clean"/>
|
||||
</Target>
|
||||
<Target Name="Apophysis7X:Make">
|
||||
<MSBuild Projects="Apophysis7X.dproj" Targets="Make"/>
|
||||
</Target>
|
||||
<Target Name="Build">
|
||||
<CallTarget Targets="Apophysis7X"/>
|
||||
</Target>
|
||||
<Target Name="Clean">
|
||||
<CallTarget Targets="Apophysis7X:Clean"/>
|
||||
</Target>
|
||||
<Target Name="Make">
|
||||
<CallTarget Targets="Apophysis7X:Make"/>
|
||||
</Target>
|
||||
<Import Condition="Exists('$(BDS)\Bin\CodeGear.Group.Targets')" Project="$(BDS)\Bin\CodeGear.Group.Targets"/>
|
||||
</Project>
|
||||
BIN
Apophysis7X.res
Normal file
BIN
Apophysis7X.res
Normal file
Binary file not shown.
0
Apophysis7X.todo
Normal file
0
Apophysis7X.todo
Normal file
BIN
Apophysis7X_Icon.ico
Normal file
BIN
Apophysis7X_Icon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 74 KiB |
167
ColorMap/GradientHlpr.pas
Normal file
167
ColorMap/GradientHlpr.pas
Normal file
@ -0,0 +1,167 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 GradientHlpr;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
windows, Graphics, Cmap;
|
||||
|
||||
const
|
||||
PixelCountMax = 32768;
|
||||
|
||||
type
|
||||
pRGBTripleArray = ^TRGBTripleArray;
|
||||
TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
|
||||
|
||||
type
|
||||
TGradientHelper = class
|
||||
private
|
||||
procedure RGBBlend(a, b: integer; var Palette: TColorMap);
|
||||
public
|
||||
function GetGradientBitmap(Index: integer; const hue_rotation: double): TBitmap;
|
||||
function RandomGradient: TColorMap;
|
||||
end;
|
||||
|
||||
var
|
||||
GradientHelper: TGradientHelper;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Global;
|
||||
|
||||
{ TGradientHelper }
|
||||
|
||||
function TGradientHelper.GetGradientBitmap(Index: integer; const hue_rotation: double): TBitmap;
|
||||
var
|
||||
BitMap: TBitMap;
|
||||
i, j: integer;
|
||||
Row: pRGBTripleArray;
|
||||
pal: TColorMap;
|
||||
begin
|
||||
GetCMap(index, hue_rotation, pal);
|
||||
|
||||
BitMap := TBitMap.create;
|
||||
Bitmap.PixelFormat := pf24bit;
|
||||
BitMap.Width := 256;
|
||||
BitMap.Height := 2;
|
||||
|
||||
for j := 0 to Bitmap.Height - 1 do begin
|
||||
Row := Bitmap.Scanline[j];
|
||||
for i := 0 to Bitmap.Width - 1 do begin
|
||||
Row[i].rgbtRed := Pal[i][0];
|
||||
Row[i].rgbtGreen := Pal[i][1];
|
||||
Row[i].rgbtBlue := Pal[i][2];
|
||||
end
|
||||
end;
|
||||
|
||||
Result := BitMap;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function TGradientHelper.RandomGradient: TColorMap;
|
||||
var
|
||||
a, b, n, nodes: integer;
|
||||
rgb: array[0..2] of double;
|
||||
hsv: array[0..2] of double;
|
||||
pal: TColorMap;
|
||||
begin
|
||||
rgb[0] := 0;
|
||||
rgb[1] := 0;
|
||||
rgb[2] := 0;
|
||||
|
||||
inc(MainSeed);
|
||||
RandSeed := Mainseed;
|
||||
nodes := random((MaxNodes - 1) - (MinNodes - 2)) + (MinNodes - 1);
|
||||
n := 256 div nodes;
|
||||
b := 0;
|
||||
hsv[0] := 0.01 * (random(MaxHue - (MinHue - 1)) + MinHue);
|
||||
hsv[1] := 0.01 * (random(MaxSat - (MinSat - 1)) + MinSat);
|
||||
hsv[2] := 0.01 * (random(MaxLum - (MinLum - 1)) + MinLum);
|
||||
hsv2rgb(hsv, rgb);
|
||||
Pal[0][0] := Round(rgb[0] * 255);
|
||||
Pal[0][1] := Round(rgb[1] * 255);
|
||||
Pal[0][2] := Round(rgb[2] * 255);
|
||||
repeat
|
||||
a := b;
|
||||
b := b + n;
|
||||
hsv[0] := 0.01 * (random(MaxHue - (MinHue - 1)) + MinHue);
|
||||
hsv[1] := 0.01 * (random(MaxSat - (MinSat - 1)) + MinSat);
|
||||
hsv[2] := 0.01 * (random(MaxLum - (MinLum - 1)) + MinLum);
|
||||
hsv2rgb(hsv, rgb);
|
||||
if b > 255 then b := 255;
|
||||
Pal[b][0] := Round(rgb[0] * 255);
|
||||
Pal[b][1] := Round(rgb[1] * 255);
|
||||
Pal[b][2] := Round(rgb[2] * 255);
|
||||
RGBBlend(a, b, pal);
|
||||
until b = 255;
|
||||
Result := Pal;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure TGradientHelper.RGBBlend(a, b: integer; var Palette: TColorMap);
|
||||
{ Linear blend between to indices of a palette }
|
||||
var
|
||||
c, v: real;
|
||||
vrange, range: real;
|
||||
i: integer;
|
||||
begin
|
||||
if a = b then
|
||||
begin
|
||||
Exit;
|
||||
end;
|
||||
range := b - a;
|
||||
vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
|
||||
c := Palette[a mod 256][0];
|
||||
v := vrange / range;
|
||||
for i := (a + 1) to (b - 1) do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][0] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
|
||||
c := Palette[a mod 256][1];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][1] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
|
||||
c := Palette[a mod 256][2];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][2] := Round(c);
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
initialization
|
||||
GradientHelper := TGradientHelper.create;
|
||||
finalization
|
||||
GradientHelper.Free;
|
||||
end.
|
||||
374
ColorMap/cmap.pas
Normal file
374
ColorMap/cmap.pas
Normal file
@ -0,0 +1,374 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 Cmap;
|
||||
|
||||
interface
|
||||
|
||||
uses sysutils, classes;
|
||||
|
||||
type
|
||||
TColorMap = array[0..255, 0..3] of integer;
|
||||
|
||||
type
|
||||
EFormatInvalid = class(Exception);
|
||||
|
||||
const
|
||||
RANDOMCMAP = -1;
|
||||
NRCMAPS = 701;
|
||||
|
||||
procedure GetCmap(var Index: integer; const hue_rotation: double; out cmap: TColorMap);
|
||||
procedure GetCmapName(var Index: integer; out Name: string);
|
||||
procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
|
||||
procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
|
||||
function GetGradient(FileName, Entry: string): string;
|
||||
function GetPalette(strng: string; var Palette: TColorMap): boolean;
|
||||
procedure GetTokens(s: string; var mlist: TStringList);
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
cmapdata, Math;
|
||||
|
||||
procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
|
||||
var
|
||||
maxval, minval: double;
|
||||
del: double;
|
||||
begin
|
||||
Maxval := Max(rgb[0], Max(rgb[1], rgb[2]));
|
||||
Minval := Min(rgb[0], Min(rgb[1], rgb[2]));
|
||||
|
||||
hsv[2] := maxval; // v
|
||||
|
||||
if (Maxval > 0) and (maxval <> minval) then begin
|
||||
del := maxval - minval;
|
||||
hsv[1] := del / Maxval; //s
|
||||
|
||||
hsv[0] := 0;
|
||||
if (rgb[0] > rgb[1]) and (rgb[0] > rgb[2]) then begin
|
||||
hsv[0] := (rgb[1] - rgb[2]) / del;
|
||||
end else if (rgb[1] > rgb[2]) then begin
|
||||
hsv[0] := 2 + (rgb[2] - rgb[0]) / del;
|
||||
end else begin
|
||||
hsv[0] := 4 + (rgb[0] - rgb[1]) / del;
|
||||
end;
|
||||
|
||||
if hsv[0] < 0 then
|
||||
hsv[0] := hsv[0] + 6;
|
||||
|
||||
end else begin
|
||||
hsv[0] := 0;
|
||||
hsv[1] := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
|
||||
var
|
||||
j: integer;
|
||||
f, p, q, t, v: double;
|
||||
begin
|
||||
try
|
||||
// rgb[0] := 0;
|
||||
// rgb[1] := 0;
|
||||
// rgb[2] := 0;
|
||||
|
||||
j := floor(hsv[0]);
|
||||
|
||||
f := hsv[0] - j;
|
||||
v := hsv[2];
|
||||
p := hsv[2] * (1 - hsv[1]);
|
||||
q := hsv[2] * (1 - hsv[1] * f);
|
||||
t := hsv[2] * (1 - hsv[1] * (1 - f));
|
||||
case j of
|
||||
0: begin rgb[0] := v; rgb[1] := t; rgb[2] := p; end;
|
||||
1: begin rgb[0] := q; rgb[1] := v; rgb[2] := p; end;
|
||||
2: begin rgb[0] := p; rgb[1] := v; rgb[2] := t; end;
|
||||
3: begin rgb[0] := p; rgb[1] := q; rgb[2] := v; end;
|
||||
4: begin rgb[0] := t; rgb[1] := p; rgb[2] := v; end;
|
||||
5: begin rgb[0] := v; rgb[1] := p; rgb[2] := q; end;
|
||||
end;
|
||||
except on EMathError do
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure GetCmap(var Index: integer; const hue_rotation: double; out cmap: TColorMap);
|
||||
var
|
||||
i: Integer;
|
||||
rgb: array[0..2] of double;
|
||||
hsv: array[0..2] of double;
|
||||
begin
|
||||
if Index = RANDOMCMAP then
|
||||
Index := Random(NRCMAPS);
|
||||
|
||||
if (Index < 0) or (Index >= NRCMAPS) then
|
||||
Index := 0;
|
||||
|
||||
for i := 0 to 255 do begin
|
||||
rgb[0] := cmaps[Index][i][0] / 255.0;
|
||||
rgb[1] := cmaps[Index][i][1] / 255.0;
|
||||
rgb[2] := cmaps[Index][i][2] / 255.0;
|
||||
|
||||
rgb2hsv(rgb, hsv);
|
||||
hsv[0] := hsv[0] + hue_rotation * 6;
|
||||
hsv2rgb(hsv, rgb);
|
||||
|
||||
cmap[i][0] := Round(rgb[0] * 255);
|
||||
cmap[i][1] := Round(rgb[1] * 255);
|
||||
cmap[i][2] := Round(rgb[2] * 255);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure GetCmapName(var Index: integer; out Name: string);
|
||||
begin
|
||||
if Index = RANDOMCMAP then
|
||||
Index := Random(NRCMAPS);
|
||||
|
||||
if (Index < 0) or (Index >= NRCMAPS) then
|
||||
Index := 0;
|
||||
|
||||
Name := CMapNames[Index];
|
||||
end;
|
||||
|
||||
|
||||
procedure RGBBlend(a, b: integer; var Palette: TColorMap);
|
||||
{ Linear blend between to indices of a palette }
|
||||
var
|
||||
c, v: real;
|
||||
vrange, range: real;
|
||||
i: integer;
|
||||
begin
|
||||
if a = b then
|
||||
begin
|
||||
Exit;
|
||||
end;
|
||||
range := b - a;
|
||||
vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
|
||||
c := Palette[a mod 256][0];
|
||||
v := vrange / range;
|
||||
for i := (a + 1) to (b - 1) do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][0] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
|
||||
c := Palette[a mod 256][1];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][1] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
|
||||
c := Palette[a mod 256][2];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][2] := Round(c);
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetVal(token: string): string;
|
||||
var
|
||||
p: integer;
|
||||
begin
|
||||
p := Pos('=', token);
|
||||
Delete(Token, 1, p);
|
||||
Result := Token;
|
||||
end;
|
||||
|
||||
function ReplaceTabs(str: string): string;
|
||||
{Changes tab characters in a string to spaces}
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 1 to Length(str) do
|
||||
begin
|
||||
if str[i] = #9 then
|
||||
begin
|
||||
Delete(str, i, 1);
|
||||
Insert(#32, str, i);
|
||||
end;
|
||||
end;
|
||||
Result := str;
|
||||
end;
|
||||
|
||||
procedure GetTokens(s: string; var mlist: TStringList);
|
||||
var
|
||||
test, token: string;
|
||||
begin
|
||||
mlist.clear;
|
||||
test := s;
|
||||
while (Length(Test) > 0) do
|
||||
begin
|
||||
while (Length(Test) > 0) and CharInSet(test[1],[#32]) do
|
||||
Delete(test, 1, 1);
|
||||
if (Length(Test) = 0) then
|
||||
exit;
|
||||
token := '';
|
||||
while (Length(Test) > 0) and (not CharInSet(test[1],[#32])) do
|
||||
begin
|
||||
token := token + test[1];
|
||||
Delete(test, 1, 1);
|
||||
end;
|
||||
mlist.add(token);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
function GetPalette(strng: string; var Palette: TColorMap): boolean;
|
||||
{ Loads a palette from a gradient string }
|
||||
var
|
||||
Strings: TStringList;
|
||||
index, i: integer;
|
||||
Tokens: TStringList;
|
||||
Indices, Colors: TStringList;
|
||||
a, b: integer;
|
||||
begin
|
||||
GetPalette := True;
|
||||
Strings := TStringList.Create;
|
||||
Tokens := TStringList.Create;
|
||||
Indices := TStringList.Create;
|
||||
Colors := TStringList.Create;
|
||||
try
|
||||
try
|
||||
Strings.Text := strng;
|
||||
if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
|
||||
if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
|
||||
GetTokens(ReplaceTabs(Strings.Text), Tokens);
|
||||
i := 0;
|
||||
while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
|
||||
begin
|
||||
if Pos('index=', LowerCase(Tokens[i])) <> 0 then
|
||||
Indices.Add(GetVal(Tokens[i]))
|
||||
else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
|
||||
Colors.Add(GetVal(Tokens[i]));
|
||||
inc(i)
|
||||
end;
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
Palette[i][0] := 0;
|
||||
Palette[i][1] := 0;
|
||||
Palette[i][2] := 0;
|
||||
end;
|
||||
if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
|
||||
for i := 0 to Indices.Count - 1 do
|
||||
begin
|
||||
try
|
||||
index := StrToInt(Indices[i]);
|
||||
while index < 0 do inc(index, 400);
|
||||
index := Round(Index * (255 / 399));
|
||||
indices[i] := IntToStr(index);
|
||||
assert(index>=0);
|
||||
assert(index<256);
|
||||
Palette[index][0] := StrToInt(Colors[i]) mod 256;
|
||||
Palette[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
|
||||
Palette[index][2] := trunc(StrToInt(Colors[i]) / 65536);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
i := 1;
|
||||
repeat
|
||||
a := StrToInt(Indices[i - 1]);
|
||||
b := StrToInt(Indices[i]);
|
||||
RGBBlend(a, b, Palette);
|
||||
inc(i);
|
||||
until i = Indices.Count;
|
||||
if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
|
||||
begin
|
||||
a := StrToInt(Indices[Indices.Count - 1]);
|
||||
b := StrToInt(Indices[0]) + 256;
|
||||
RGBBlend(a, b, Palette);
|
||||
end;
|
||||
except on EFormatInvalid do
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Tokens.Free;
|
||||
Strings.Free;
|
||||
Indices.Free;
|
||||
Colors.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetGradient(FileName, Entry: string): string;
|
||||
var
|
||||
FileStrings: TStringList;
|
||||
GradStrings: TStringList;
|
||||
i: integer;
|
||||
begin
|
||||
FileStrings := TStringList.Create;
|
||||
GradStrings := TStringList.Create;
|
||||
try
|
||||
try
|
||||
FileStrings.LoadFromFile(FileName);
|
||||
for i := 0 to FileStrings.count - 1 do
|
||||
if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
|
||||
GradStrings.Add(FileStrings[i]);
|
||||
repeat
|
||||
inc(i);
|
||||
GradStrings.Add(FileStrings[i]);
|
||||
until Pos('}', FileStrings[i]) <> 0;
|
||||
GetGradient := GradStrings.Text;
|
||||
except on exception do
|
||||
Result := '';
|
||||
end;
|
||||
finally
|
||||
GradStrings.Free;
|
||||
FileStrings.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
function LoadGradient(FileName, Entry: string; var gString: string; var Pal: TColorMap): boolean;
|
||||
var
|
||||
FileStrings: TStringList;
|
||||
GradStrings: TStringList;
|
||||
i: integer;
|
||||
begin
|
||||
FileStrings := TStringList.Create;
|
||||
GradStrings := TStringList.Create;
|
||||
try
|
||||
try
|
||||
FileStrings.LoadFromFile(FileName);
|
||||
for i := 0 to FileStrings.count - 1 do
|
||||
if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
|
||||
GradStrings.Add(FileStrings[i]);
|
||||
repeat
|
||||
inc(i);
|
||||
GradStrings.Add(FileStrings[i]);
|
||||
until Pos('}', FileStrings[i]) <> 0;
|
||||
gString := GradStrings.Text;
|
||||
Result := GetPalette(GradStrings.Text, Pal);
|
||||
except on exception do
|
||||
Result := False;
|
||||
end;
|
||||
finally
|
||||
GradStrings.Free;
|
||||
FileStrings.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
end.
|
||||
|
||||
47741
ColorMap/cmapdata.pas
Normal file
47741
ColorMap/cmapdata.pas
Normal file
File diff suppressed because it is too large
Load Diff
210
Core/BaseVariation.pas
Normal file
210
Core/BaseVariation.pas
Normal file
@ -0,0 +1,210 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 BaseVariation;
|
||||
|
||||
interface
|
||||
|
||||
type
|
||||
TCalcFunction = procedure of object;
|
||||
|
||||
type
|
||||
TBaseVariation = class
|
||||
|
||||
protected
|
||||
procedure CalcFunction; virtual; abstract;
|
||||
|
||||
public
|
||||
vvar: double;
|
||||
FTx, FTy: ^double;
|
||||
FPx, FPy: ^double;
|
||||
FTz, FPz: ^double;
|
||||
|
||||
// more params :)
|
||||
color : ^double;
|
||||
a, b, c, d, e, f : double;
|
||||
|
||||
class function GetName: string; virtual; abstract;
|
||||
class function GetInstance: TBaseVariation; virtual; abstract;
|
||||
|
||||
function GetNrVariables: integer; virtual;
|
||||
function GetVariableNameAt(const Index: integer): string; virtual;
|
||||
|
||||
function GetVariable(const Name: string; var Value: double): boolean; virtual;
|
||||
function SetVariable(const Name: string; var Value: double): boolean; virtual;
|
||||
function ResetVariable(const Name: string): boolean; virtual;
|
||||
|
||||
function GetVariableStr(const Name: string): string; virtual;
|
||||
function SetVariableStr(const Name: string; var strValue: string): boolean; virtual;
|
||||
|
||||
procedure Prepare; virtual;
|
||||
|
||||
procedure GetCalcFunction(var Delphi_Suxx: TCalcFunction); virtual;
|
||||
end;
|
||||
|
||||
TBaseVariationClass = class of TBaseVariation;
|
||||
|
||||
type
|
||||
TVariationLoader = class
|
||||
public
|
||||
Supports3D, SupportsDC : boolean;
|
||||
|
||||
function GetName: string; virtual; abstract;
|
||||
function GetInstance: TBaseVariation; virtual; abstract;
|
||||
function GetNrVariables: integer; virtual; abstract;
|
||||
function GetVariableNameAt(const Index: integer): string; virtual; abstract;
|
||||
end;
|
||||
|
||||
type
|
||||
TVariationClassLoader = class (TVariationLoader)
|
||||
public
|
||||
constructor Create(varClass : TBaseVariationClass);
|
||||
function GetName: string; override;
|
||||
function GetInstance: TBaseVariation; override;
|
||||
function GetNrVariables: integer; override;
|
||||
function GetVariableNameAt(const Index: integer): string; override;
|
||||
|
||||
private
|
||||
VariationClass : TBaseVariationClass;
|
||||
end;
|
||||
|
||||
function fmod(x, y: double) : double;
|
||||
|
||||
implementation
|
||||
|
||||
uses SysUtils;
|
||||
|
||||
function fmod(x, y: double) : double;
|
||||
begin
|
||||
Result := frac(x / y) * y;
|
||||
end;
|
||||
|
||||
{ TBaseVariation }
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function TBaseVariation.GetNrVariables: integer;
|
||||
begin
|
||||
Result := 0;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function TBaseVariation.GetVariable(const Name: string; var value: double): boolean;
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function TBaseVariation.SetVariable(const Name: string; var value: double): boolean;
|
||||
begin
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function TBaseVariation.ResetVariable(const Name: string): boolean;
|
||||
var
|
||||
zero: double;
|
||||
begin
|
||||
zero := 0;
|
||||
Result := SetVariable(Name, zero);
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function TBaseVariation.GetVariableStr(const Name: string): string;
|
||||
var
|
||||
value: double;
|
||||
begin
|
||||
if GetVariable(Name, value) then
|
||||
Result := Format('%.6g', [value])
|
||||
else
|
||||
Result := '';
|
||||
end;
|
||||
|
||||
function TBaseVariation.SetVariableStr(const Name: string; var strValue: string): boolean;
|
||||
var
|
||||
v, oldv: double;
|
||||
begin
|
||||
if GetVariable(Name, oldv) then begin
|
||||
try
|
||||
v := StrToFloat(strValue);
|
||||
SetVariable(Name, v);
|
||||
except
|
||||
v := oldv;
|
||||
end;
|
||||
strValue := Format('%.6g', [v]);
|
||||
Result := true;
|
||||
end
|
||||
else Result := false;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function TBaseVariation.GetVariableNameAt(const Index: integer): string;
|
||||
begin
|
||||
Result := ''
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure TBaseVariation.Prepare;
|
||||
begin
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure TBaseVariation.GetCalcFunction(var Delphi_Suxx: TCalcFunction);
|
||||
begin
|
||||
Delphi_Suxx := CalcFunction; // -X- lol
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
{ TVariationClassLoader }
|
||||
|
||||
constructor TVariationClassLoader.Create(varClass : TBaseVariationClass);
|
||||
begin
|
||||
VariationClass := varClass;
|
||||
end;
|
||||
|
||||
function TVariationClassLoader.GetName: string;
|
||||
begin
|
||||
Result := VariationClass.GetName();
|
||||
end;
|
||||
|
||||
function TVariationClassLoader.GetInstance: TBaseVariation;
|
||||
begin
|
||||
Result := VariationClass.GetInstance();
|
||||
end;
|
||||
|
||||
function TVariationClassLoader.GetNrVariables: integer;
|
||||
var
|
||||
hack : TBaseVariation;
|
||||
begin
|
||||
hack := GetInstance();
|
||||
Result := hack.GetNrVariables();
|
||||
hack.Free();
|
||||
end;
|
||||
|
||||
function TVariationClassLoader.GetVariableNameAt(const Index: integer): string;
|
||||
var
|
||||
hack : TBaseVariation;
|
||||
begin
|
||||
hack := GetInstance();
|
||||
Result := hack.GetVariableNameAt(Index);
|
||||
hack.Free();
|
||||
end;
|
||||
|
||||
end.
|
||||
94
Core/Bezier.pas
Normal file
94
Core/Bezier.pas
Normal file
@ -0,0 +1,94 @@
|
||||
unit Bezier;
|
||||
|
||||
interface
|
||||
|
||||
uses Math;
|
||||
|
||||
|
||||
type
|
||||
BezierPoint = record
|
||||
x, y: double;
|
||||
end;
|
||||
BezierRect = record
|
||||
x0, y0, x1, y1: double;
|
||||
end;
|
||||
|
||||
BezierPoints = array [0..3] of BezierPoint;
|
||||
BezierWeights = array [0..3] of double;
|
||||
|
||||
procedure BezierCopy(src: BezierPoints; var tgt: BezierPoints);
|
||||
procedure BezierSetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
|
||||
procedure BezierUnsetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
|
||||
|
||||
procedure BezierSolve(t: double; src: BezierPoints; w: BezierWeights; var solution: BezierPoint);
|
||||
function BezierFunc(t: double; src: BezierPoints; w: BezierWeights): double;
|
||||
|
||||
implementation
|
||||
procedure BezierCopy(src: BezierPoints; var tgt: BezierPoints);
|
||||
var
|
||||
i, n: integer;
|
||||
begin
|
||||
n := Length(src);
|
||||
for i := 0 to n - 1 do
|
||||
tgt[i] := src[i];
|
||||
end;
|
||||
procedure BezierSetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
|
||||
var
|
||||
i, n: integer;
|
||||
f: double;
|
||||
begin
|
||||
n := Length(points);
|
||||
for i := 0 to n - 1 do
|
||||
begin
|
||||
if (flip) then f := 1 - points[i].y
|
||||
else f := points[i].y;
|
||||
|
||||
points[i].x := points[i].x * (rect.x1 - rect.x0) + rect.x0;
|
||||
points[i].y := f * (rect.y1 - rect.y0) + rect.y0;
|
||||
end;
|
||||
end;
|
||||
procedure BezierUnsetRect(var points: BezierPoints; flip: boolean; rect: BezierRect);
|
||||
var
|
||||
i, n: integer;
|
||||
f: double;
|
||||
begin
|
||||
if ((rect.x1 - rect.x0) = 0) or ((rect.y1 - rect.y0) = 0) then Exit;
|
||||
|
||||
n := Length(points);
|
||||
for i := 0 to n - 1 do
|
||||
begin
|
||||
points[i].x := (points[i].x - rect.x0) / (rect.x1 - rect.x0);
|
||||
points[i].y := (points[i].y - rect.y0) / (rect.y1 - rect.y0);
|
||||
|
||||
if (flip) then points[i].y := 1 - points[i].y;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure BezierSolve(t: double; src: BezierPoints; w: BezierWeights; var solution: BezierPoint);
|
||||
var
|
||||
s, s2, s3, t2, t3, nom_x, nom_y, denom: double;
|
||||
begin
|
||||
s := 1 - t;
|
||||
s2 := s * s; s3 := s * s * s;
|
||||
t2 := t * t; t3 := t * t * t;
|
||||
|
||||
nom_x := w[0] * s3 * src[0].x + w[1] * s2 * 3 * t * src[1].x +
|
||||
w[2] * s * 3 * t2 * src[2].x + w[3] * t3 * src[3].x;
|
||||
nom_y := w[0] * s3 * src[0].y + w[1] * s2 * 3 * t * src[1].y +
|
||||
w[2] * s * 3 * t2 * src[2].y + w[3] * t3 * src[3].y;
|
||||
denom := w[0] * s3 + w[1] * s2 * 3 * t + w[2] * s * 3 * t2 + w[3] * t3;
|
||||
|
||||
if (IsNaN(nom_x)) or (IsNaN(nom_y)) or (IsNaN(denom)) then Exit;
|
||||
if denom = 0 then Exit;
|
||||
|
||||
solution.x := nom_x / denom;
|
||||
solution.y := nom_y / denom;
|
||||
end;
|
||||
function BezierFunc(t: double; src: BezierPoints; w: BezierWeights): double;
|
||||
var
|
||||
p: BezierPoint;
|
||||
begin
|
||||
BezierSolve(t, src, w, p);
|
||||
Result := p.y;
|
||||
end;
|
||||
end.
|
||||
268
Core/Chaotica.pas
Normal file
268
Core/Chaotica.pas
Normal file
@ -0,0 +1,268 @@
|
||||
unit Chaotica;
|
||||
|
||||
interface
|
||||
|
||||
uses Global, RegularExpressionsCore, RegexHelper, Classes, SysUtils, XFormMan, Windows,
|
||||
ShellAPI, Forms, ControlPoint, Translation;
|
||||
|
||||
function C_GetPathOf(filename: string; usex64: boolean): string;
|
||||
function C_SupportsDllPlugins(usex64: boolean): boolean;
|
||||
function C_IsDllPluginBlacklisted(filename: string; usex64: boolean): boolean;
|
||||
function C_IsVariationNative(name: string; usex64: boolean): boolean;
|
||||
function C_IsDllPluginInstalled(filename: string): boolean;
|
||||
|
||||
procedure C_SyncDllPlugins;
|
||||
procedure C_InstallVariation(name: string);
|
||||
procedure C_ExecuteChaotica(flamexml: string; plugins: TStringList; usex64: boolean);
|
||||
|
||||
implementation
|
||||
|
||||
uses Main;
|
||||
|
||||
function CheckX64: Boolean;
|
||||
var
|
||||
SEInfo: TShellExecuteInfo;
|
||||
ExitCode: DWORD;
|
||||
ExecuteFile, ParamString, StartInString: string;
|
||||
begin
|
||||
{$ifdef Apo7X64}
|
||||
Result := true;
|
||||
exit;
|
||||
{$endif}
|
||||
|
||||
ExecuteFile:=ExtractFilePath(Application.ExeName)+'chk64.exe';
|
||||
FillChar(SEInfo, SizeOf(SEInfo), 0);
|
||||
SEInfo.cbSize := SizeOf(TShellExecuteInfo);
|
||||
|
||||
with SEInfo do begin
|
||||
fMask := SEE_MASK_NOCLOSEPROCESS;
|
||||
Wnd := Application.Handle;
|
||||
lpFile := PChar(ExecuteFile) ;
|
||||
nShow := SW_SHOWNORMAL;
|
||||
end;
|
||||
|
||||
if ShellExecuteEx(@SEInfo) then
|
||||
begin
|
||||
repeat
|
||||
Application.ProcessMessages;
|
||||
GetExitCodeProcess(SEInfo.hProcess, ExitCode);
|
||||
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;
|
||||
Result := (ExitCode = 0);
|
||||
end else begin
|
||||
Result := false;
|
||||
end;
|
||||
end;
|
||||
|
||||
function C_GetPathOf(filename: string; usex64: boolean): string;
|
||||
var
|
||||
subf: string;
|
||||
begin
|
||||
if usex64 then subf := '64bit'
|
||||
else subf := '32bit';
|
||||
Result := ChaoticaPath + '\' + subf + '\' + filename;
|
||||
end;
|
||||
|
||||
function C_SupportsDllPlugins(usex64: boolean): boolean;
|
||||
const
|
||||
re_root : string = '<variation_compatibility\s+(.*?)>.*?</variation_compatibility>';
|
||||
re_attrib : string = 'supports_dll_plugins="(.*?)"';
|
||||
var
|
||||
xml_file : TStringList;
|
||||
xml_text, attrib, value : string;
|
||||
begin
|
||||
if usex64 then begin
|
||||
Result := false;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
xml_file := TStringList.Create;
|
||||
xml_file.LoadFromFile(C_GetPathOf('variation_compatibility.xml', false));
|
||||
xml_text := xml_file.Text;
|
||||
xml_file.Destroy;
|
||||
|
||||
attrib := GetStringPart(xml_text, re_root, 1, 'supports_dll_plugins="false"');
|
||||
value := GetStringPart(attrib, re_attrib, 1, 'false');
|
||||
|
||||
Result := (value = 'true');
|
||||
end;
|
||||
|
||||
function C_IsDllPluginBlacklisted(filename: string; usex64: boolean): boolean;
|
||||
var
|
||||
i: integer;
|
||||
blacklist: TStringList;
|
||||
begin
|
||||
blacklist := TStringList.Create;
|
||||
blacklist.LoadFromFile(C_GetPathOf('plugin_dll_blacklist.txt', usex64));
|
||||
|
||||
for i := 0 to blacklist.Count - 1 do begin
|
||||
if LowerCase(filename) = LowerCase(blacklist.Strings[i]) then begin
|
||||
Result := true;
|
||||
blacklist.Destroy;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
blacklist.Destroy;
|
||||
Result := false;
|
||||
end;
|
||||
|
||||
function C_IsVariationNative(name: string; usex64: boolean): boolean;
|
||||
const
|
||||
re_root : string = '<variation_compatibility.*?>(.*?)</variation_compatibility>';
|
||||
re_var : string = '<variation name="(.*?)".*?/>';
|
||||
var
|
||||
xml, var_name : string;
|
||||
xml_file : TStringList;
|
||||
find_var : TPerlRegEx;
|
||||
found_var : boolean;
|
||||
begin
|
||||
|
||||
xml_file := TStringList.Create;
|
||||
xml_file.LoadFromFile(C_GetPathOf('variation_compatibility.xml', false));
|
||||
xml := xml_file.Text;
|
||||
xml_file.Destroy;
|
||||
|
||||
find_var := TPerlRegEx.Create;
|
||||
find_var.RegEx := Utf8String(re_var);
|
||||
find_var.Options := [preSingleLine, preCaseless];
|
||||
find_var.Subject := Utf8String(GetStringPart(xml, re_root, 1, ''));
|
||||
found_var := find_var.Match;
|
||||
|
||||
while found_var do begin
|
||||
var_name := String(find_var.Groups[1]);
|
||||
found_var := find_var.MatchAgain;
|
||||
|
||||
if LowerCase(name) = var_name then begin
|
||||
find_var.Destroy;
|
||||
Result := true;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
find_var.Destroy;
|
||||
Result := false;
|
||||
end;
|
||||
|
||||
function C_IsDllPluginInstalled(filename: string): boolean;
|
||||
var
|
||||
path : string;
|
||||
begin
|
||||
path := C_GetPathOf('plugins\' + filename, false);
|
||||
Result := FileExists(path);
|
||||
end;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
procedure C_InstallVariation(name: string);
|
||||
var
|
||||
filename: string;
|
||||
begin
|
||||
filename := GetFileNameOfVariation(name);
|
||||
|
||||
if (filename = '') then Exit;
|
||||
if C_IsDllPluginInstalled(filename) then Exit;
|
||||
|
||||
CopyFile(PCHAR(filename), PCHAR(C_GetPathOf('plugins\' +
|
||||
ExtractFileName(filename), false)), false);
|
||||
end;
|
||||
|
||||
procedure C_SyncDllPlugins;
|
||||
var
|
||||
src_dir: string;
|
||||
tgt_dir: string;
|
||||
|
||||
searchResult: TSearchRec;
|
||||
begin
|
||||
src_dir := PluginPath;
|
||||
tgt_dir := C_GetPathOf('Plugins', false);
|
||||
|
||||
if (not DirectoryExists(src_dir)) then Exit;
|
||||
if (not DirectoryExists(tgt_dir)) then Exit;
|
||||
|
||||
// First clear all plugins on Chaotica side
|
||||
if FindFirst(tgt_dir + '\*.dll', faAnyFile, searchResult) = 0 then
|
||||
begin
|
||||
repeat
|
||||
DeleteFile(PCHAR(tgt_dir + '\' + searchResult.Name)) ;
|
||||
until (FindNext(searchResult) <> 0);
|
||||
SysUtils.FindClose(searchResult);
|
||||
end;
|
||||
|
||||
// Then copy all plugins from Apophysis to Chaotica
|
||||
if FindFirst(src_dir + '*.dll', faAnyFile, searchResult) = 0 then
|
||||
begin
|
||||
repeat
|
||||
if not C_IsDllPluginBlacklisted(searchResult.Name, false)
|
||||
then CopyFile(
|
||||
PCHAR(src_dir + '\' + searchResult.Name),
|
||||
PCHAR(tgt_dir + '\' + searchResult.Name),
|
||||
false);
|
||||
until (FindNext(searchResult) <> 0);
|
||||
SysUtils.FindClose(searchResult);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure C_ExecuteChaotica(flamexml: string; plugins: TStringList; usex64: boolean);
|
||||
var
|
||||
i: integer;
|
||||
name, fname: string;
|
||||
fails: TStringList;
|
||||
txt: TStringList;
|
||||
fin_usex64: boolean;
|
||||
begin
|
||||
fails := TStringList.Create;
|
||||
|
||||
{$ifdef Apo7X64}
|
||||
fin_usex64 := true;
|
||||
{$else}
|
||||
fin_usex64 := usex64 and CheckX64;
|
||||
for i := 0 to plugins.Count - 1 do begin
|
||||
name := GetFileNameOfVariation(plugins.Strings[i]);
|
||||
if (name = '') then name := plugins.Strings[i];
|
||||
fin_usex64 := fin_usex64 and C_IsVariationNative(name, usex64);
|
||||
end;
|
||||
|
||||
for i := 0 to plugins.Count - 1 do begin
|
||||
name := GetFileNameOfVariation(plugins.Strings[i]);
|
||||
if (name = '') then name := plugins.Strings[i]; // assume built-in
|
||||
|
||||
if not C_IsVariationNative(name, fin_usex64) then begin // not native -> try install
|
||||
if C_SupportsDllPlugins(fin_usex64) then // dll unsupported -> fail
|
||||
fails.Add(plugins.Strings[i])
|
||||
else if C_IsDllPluginBlacklisted(name, fin_usex64) then // dll supported and blacklisted -> fail
|
||||
fails.Add(plugins.Strings[i])
|
||||
;//else C_InstallVariation(plugins.Strings[i]); // dll supported and not blacklisted -> install
|
||||
// ^^^ this is done on Apophysis startup now!
|
||||
end;
|
||||
end;
|
||||
{$endif}
|
||||
|
||||
name := C_GetPathOf('chaotica.exe', fin_usex64);
|
||||
if (not FileExists(name)) then begin
|
||||
messagebox(0, PCHAR(TextByKey('main-status-nochaotica')),
|
||||
PCHAR('Apophysis 7X'), MB_ICONHAND);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
if (fails.Count > 0) then begin
|
||||
messagebox(0, PCHAR(TextByKey('main-status-oldchaotica')),
|
||||
PCHAR('Apophysis 7X'), MB_ICONHAND or MB_OK);
|
||||
end;
|
||||
|
||||
fname := GetEnvironmentVariable('TEMP') + '\chaotica_export.flame';
|
||||
txt := TStringList.Create;
|
||||
|
||||
txt.Text := flamexml;
|
||||
txt.SaveToFile(fname);
|
||||
|
||||
txt.Destroy;
|
||||
fails.Destroy;
|
||||
|
||||
//if fin_usex64 then MessageBox(0, PCHAR('DBG:x64'), PCHAR(''), MB_OK)
|
||||
//else MessageBox(0, PCHAR('DBG:x86'), PCHAR(''), MB_OK) ;
|
||||
|
||||
ShellExecute(application.handle, PChar('open'), pchar(name),
|
||||
PChar('"' + fname + '"'), PChar(ExtractFilePath(name)), SW_SHOWNORMAL);
|
||||
end;
|
||||
|
||||
end.
|
||||
689
Core/Global.pas
Normal file
689
Core/Global.pas
Normal file
@ -0,0 +1,689 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 Global;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, SysUtils, Classes, SyncObjs, Controls, Graphics, Math,
|
||||
cmap, ControlPoint, Xform, CommDlg;
|
||||
|
||||
type
|
||||
EFormatInvalid = class(Exception);
|
||||
|
||||
{ Weight manipulation }
|
||||
{ Triangle transformations }
|
||||
function triangle_area(t: TTriangle): double;
|
||||
function transform_affine(const t: TTriangle; const Triangles: TTriangles): boolean;
|
||||
function line_dist(x, y, x1, y1, x2, y2: double): double;
|
||||
function dist(x1, y1, x2, y2: double): double;
|
||||
{ Parsing functions }
|
||||
function GetVal(token: string): string;
|
||||
function ReplaceTabs(str: string): string;
|
||||
{ Palette and gradient functions }
|
||||
//function GetGradient(FileName, Entry: string): string;
|
||||
{ Misc }
|
||||
function det(a, b, c, d: double): double;
|
||||
function solve3(x1, x2, x1h, y1, y2, y1h, z1, z2, z1h: double;
|
||||
var a, b, e: double): double;
|
||||
function OpenSaveFileDialog(Parent: TWinControl;
|
||||
const DefExt,
|
||||
Filter,
|
||||
InitialDir,
|
||||
Title: string;
|
||||
var FileName: string;
|
||||
MustExist,
|
||||
OverwritePrompt,
|
||||
NoChangeDir,
|
||||
DoOpen: Boolean): Boolean;
|
||||
procedure LoadThumbnailPlaceholder(ThumbnailSize : integer);
|
||||
function GetEnvVarValue(const VarName: string): string;
|
||||
|
||||
|
||||
const
|
||||
APP_NAME: string = 'Apophysis 7x';
|
||||
{$ifdef Apo7X64}
|
||||
APP_BUILD: string = '64 bit';
|
||||
{$else}
|
||||
APP_BUILD: string = '32 bit';
|
||||
{$endif}
|
||||
MAX_TRANSFORMS: integer = 100;
|
||||
prefilter_white: integer = 1024;
|
||||
eps: double = 1E-10;
|
||||
White_level = 200;
|
||||
clyellow1 = TColor($17FCFF);
|
||||
clplum2 = TColor($ECA9E6);
|
||||
clSlateGray = TColor($837365);
|
||||
FT_BMP = 1; FT_PNG = 2; FT_JPG = 3;
|
||||
|
||||
const
|
||||
crEditArrow = 20;
|
||||
crEditMove = 21;
|
||||
crEditRotate = 22;
|
||||
crEditScale = 23;
|
||||
|
||||
const
|
||||
SingleBuffer : boolean =
|
||||
{$ifdef Apo7X64}
|
||||
false
|
||||
{$else}
|
||||
true
|
||||
{$endif};
|
||||
|
||||
var
|
||||
MainSeed: integer;
|
||||
MainTriangles: TTriangles;
|
||||
Transforms: integer; // Count of Tranforms
|
||||
EnableFinalXform: boolean;
|
||||
AppPath: string; // Path of applicatio file
|
||||
OpenFile: string; // Name of currently open file
|
||||
CanDrawOnResize: boolean;
|
||||
PreserveWeights: boolean;
|
||||
AlwaysCreateBlankFlame : boolean;
|
||||
StartupCheckForUpdates : boolean;
|
||||
TBWidth1 : integer;
|
||||
TBWidth2 : integer;
|
||||
TBWidth3 : integer;
|
||||
TBWidth4 : integer;
|
||||
TBWidth5 : integer;
|
||||
ThumbnailPlaceholder : TBitmap;
|
||||
WarnOnMissingPlugin : boolean;
|
||||
EmbedThumbnails : boolean;
|
||||
LanguageFile : string;
|
||||
AvailableLanguages : TStringList;
|
||||
PluginPath : string;
|
||||
|
||||
{ UPR Options }
|
||||
|
||||
UPRSampleDensity: integer;
|
||||
UPRFilterRadius: double;
|
||||
UPROversample: integer;
|
||||
UPRAdjustDensity: boolean;
|
||||
UPRColoringIdent: string;
|
||||
UPRColoringFile: string;
|
||||
UPRFormulaIdent: string;
|
||||
UPRFormulaFile: string;
|
||||
UPRWidth: Integer;
|
||||
UPRHeight: Integer;
|
||||
ImageFolder: string;
|
||||
UPRPath: string; // Name and folder of last UPR file
|
||||
cmap_index: integer; // Index to current gradient
|
||||
Variation: TVariation; // Current variation
|
||||
NumTries, TryLength: integer; // Settings for smooth palette
|
||||
SmoothPaletteFile: string;
|
||||
|
||||
{ Editor }
|
||||
|
||||
UseFlameBackground, UseTransformColors: boolean;
|
||||
HelpersEnabled: boolean;
|
||||
EditorBkgColor, ReferenceTriangleColor: integer;
|
||||
GridColor1, GridColor2, HelpersColor: integer;
|
||||
ExtEditEnabled, TransformAxisLock, RebuildXaosLinks: boolean;
|
||||
ShowAllXforms: boolean;
|
||||
EditorPreviewTransparency: integer;
|
||||
EnableEditorPreview: boolean;
|
||||
|
||||
{ Display }
|
||||
|
||||
defSampleDensity, defPreviewDensity: Double;
|
||||
defGamma, defBrightness, defVibrancy,
|
||||
defFilterRadius, defGammaThreshold: Double;
|
||||
defOversample: integer;
|
||||
|
||||
{ Render }
|
||||
|
||||
renderDensity, renderFilterRadius: double;
|
||||
renderOversample, renderWidth, renderHeight: integer;
|
||||
renderBitsPerSample: integer;
|
||||
renderPath: string;
|
||||
JPEGQuality: integer;
|
||||
renderFileFormat: integer;
|
||||
InternalBitsPerSample: integer;
|
||||
|
||||
NrTreads: Integer;
|
||||
UseNrThreads: integer;
|
||||
|
||||
PNGTransparency: integer;
|
||||
ShowTransparency: boolean;
|
||||
|
||||
MainPreviewScale: double;
|
||||
ExtendMainPreview: boolean;
|
||||
|
||||
StoreEXIF : boolean;
|
||||
StoreParamsEXIF : boolean;
|
||||
ExifAuthor : string;
|
||||
|
||||
{ Defaults }
|
||||
|
||||
LastOpenFile: string;
|
||||
LastOpenFileEntry: integer;
|
||||
RememberLastOpenFile: boolean;
|
||||
UseSmallThumbnails: boolean;
|
||||
ClassicListMode: boolean;
|
||||
ConfirmDelete: boolean; // Flag confirmation of entry deletion
|
||||
OldPaletteFormat: boolean;
|
||||
ConfirmExit: boolean;
|
||||
ConfirmStopRender: boolean;
|
||||
SavePath, SmoothPalettePath: string;
|
||||
RandomPrefix, RandomDate: string;
|
||||
RandomIndex: integer;
|
||||
FlameFile, GradientFile, GradientEntry, FlameEntry: string;
|
||||
ParamFolder: string;
|
||||
prevLowQuality, prevMediumQuality, prevHighQuality: double;
|
||||
defSmoothPaletteFile: string;
|
||||
BrowserPath: string; // Stored path of browser open dialog
|
||||
EditPrevQual, MutatePrevQual, AdjustPrevQual: Integer;
|
||||
randMinTransforms, randMaxTransforms: integer;
|
||||
mutantMinTransforms, mutantMaxTransforms: integer;
|
||||
KeepBackground: boolean;
|
||||
randGradient: Integer;
|
||||
randGradientFile: string;
|
||||
defFlameFile: string;
|
||||
|
||||
PlaySoundOnRenderComplete: boolean;
|
||||
RenderCompleteSoundFile: string;
|
||||
|
||||
SaveIncompleteRenders: boolean;
|
||||
ShowRenderStats: boolean;
|
||||
LowerRenderPriority: boolean;
|
||||
|
||||
SymmetryType: integer;
|
||||
SymmetryOrder: integer;
|
||||
SymmetryNVars: integer;
|
||||
Variations: array of boolean;
|
||||
//VariationOptions: int64;
|
||||
|
||||
MainForm_RotationMode: integer;
|
||||
PreserveQuality: boolean;
|
||||
|
||||
{ For random gradients }
|
||||
|
||||
MinNodes, MaxNodes, MinHue, MaxHue, MinSat, MaxSat, MinLum, MaxLum: integer;
|
||||
//ReferenceMode: integer;
|
||||
BatchSize: Integer;
|
||||
Compatibility: integer; //0 = original, 1 = Drave's
|
||||
Favorites: TStringList;
|
||||
Script: string;
|
||||
ScriptPath: string;
|
||||
SheepServer, SheepNick, SheepURL, SheepPW, flam3Path, helpPath: string;
|
||||
ExportBatches, ExportOversample, ExportWidth, ExportHeight, ExportFileFormat: Integer;
|
||||
ExportFilter, ExportDensity: Double;
|
||||
ExportEstimator, ExportEstimatorMin, ExportEstimatorCurve: double;
|
||||
ExportJitters: integer;
|
||||
ExportGammaTreshold: double;
|
||||
OpenFileType: TFileType;
|
||||
// ResizeOnLoad: Boolean;
|
||||
ShowProgress: Boolean;
|
||||
defLibrary: string;
|
||||
LimitVibrancy: Boolean;
|
||||
DefaultPalette: TColorMap;
|
||||
|
||||
AutoOpenLog: Boolean;
|
||||
AutoSaveEnabled: Boolean;
|
||||
AutoSaveFreq: integer;
|
||||
AutoSavePath: string;
|
||||
|
||||
LineCenterColor : integer;
|
||||
LineThirdsColor : integer;
|
||||
LineGRColor : integer;
|
||||
EnableGuides : boolean;
|
||||
|
||||
function Round6(x: double): double;
|
||||
|
||||
implementation
|
||||
|
||||
function GetEnvVarValue(const VarName: string): string;
|
||||
var
|
||||
BufSize: Integer; // buffer size required for value
|
||||
begin
|
||||
// Get required buffer size (inc. terminal #0)
|
||||
BufSize := GetEnvironmentVariable(
|
||||
PChar(VarName), nil, 0);
|
||||
if BufSize > 0 then
|
||||
begin
|
||||
// Read env var value into result string
|
||||
SetLength(Result, BufSize - 1);
|
||||
GetEnvironmentVariable(PChar(VarName),
|
||||
PChar(Result), BufSize);
|
||||
end
|
||||
else
|
||||
// No such environment variable
|
||||
Result := '';
|
||||
end;
|
||||
|
||||
procedure LoadThumbnailPlaceholder(ThumbnailSize : integer);
|
||||
var
|
||||
placeholder: TBitmap;
|
||||
placeholderIcon: TBitmap;
|
||||
const
|
||||
pi_width = 48;
|
||||
pi_height = 48;
|
||||
begin
|
||||
placeholder := TBitmap.Create;
|
||||
placeholderIcon := TBitmap.Create;
|
||||
|
||||
placeholderIcon.Handle := LoadBitmap(hInstance, 'THUMB_PLACEHOLDER');
|
||||
placeholder.PixelFormat := pf32bit;
|
||||
placeholder.HandleType := bmDIB;
|
||||
placeholder.Width := ThumbnailSize;
|
||||
placeholder.Height := ThumbnailSize;
|
||||
|
||||
with placeholder.Canvas do begin
|
||||
Brush.Color := $000000;
|
||||
FillRect(Rect(0, 0, placeholder.Width, placeholder.Height));
|
||||
Draw(round(ThumbnailSize / 2 - pi_width / 2), round(ThumbnailSize / 2 - pi_height / 2), placeholderIcon);
|
||||
end;
|
||||
|
||||
placeholderIcon.Free;
|
||||
ThumbnailPlaceholder := placeholder;
|
||||
end;
|
||||
|
||||
{ IFS }
|
||||
|
||||
function det(a, b, c, d: double): double;
|
||||
begin
|
||||
Result := (a * d - b * c);
|
||||
end;
|
||||
|
||||
|
||||
function Round6(x: double): double;
|
||||
// Really ugly, but it works
|
||||
begin
|
||||
// --Z-- this is ridiculous:
|
||||
// Result := StrToFloat(Format('%.6f', [x]));
|
||||
// and yes, this is REALLY ugly :-\
|
||||
Result := RoundTo(x, -6);
|
||||
end;
|
||||
|
||||
function solve3(x1, x2, x1h, y1, y2, y1h, z1, z2, z1h: double;
|
||||
var a, b, e: double): double;
|
||||
var
|
||||
det1: double;
|
||||
begin
|
||||
det1 := x1 * det(y2, 1.0, z2, 1.0) - x2 * det(y1, 1.0, z1, 1.0)
|
||||
+ 1 * det(y1, y2, z1, z2);
|
||||
if (det1 = 0.0) then
|
||||
begin
|
||||
Result := det1;
|
||||
EXIT;
|
||||
end
|
||||
else
|
||||
begin
|
||||
a := (x1h * det(y2, 1.0, z2, 1.0) - x2 * det(y1h, 1.0, z1h, 1.0)
|
||||
+ 1 * det(y1h, y2, z1h, z2)) / det1;
|
||||
b := (x1 * det(y1h, 1.0, z1h, 1.0) - x1h * det(y1, 1.0, z1, 1.0)
|
||||
+ 1 * det(y1, y1h, z1, z1h)) / det1;
|
||||
e := (x1 * det(y2, y1h, z2, z1h) - x2 * det(y1, y1h, z1, z1h)
|
||||
+ x1h * det(y1, y2, z1, z2)) / det1;
|
||||
a := Round6(a);
|
||||
b := Round6(b);
|
||||
e := Round6(e);
|
||||
Result := det1;
|
||||
end;
|
||||
end;
|
||||
|
||||
function dist(x1, y1, x2, y2: double): double;
|
||||
//var
|
||||
// d2: double;
|
||||
begin
|
||||
(*
|
||||
{ From FDesign source
|
||||
{ float pt_pt_distance(float x1, float y1, float x2, float y2) }
|
||||
d2 := (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
|
||||
if (d2 = 0.0) then
|
||||
begin
|
||||
Result := 0.0;
|
||||
exit;
|
||||
end
|
||||
else
|
||||
Result := sqrt(d2);
|
||||
*)
|
||||
|
||||
// --Z-- This is just amazing... :-\
|
||||
// Someone needed an 'FDesign source' - to compute distance between two points??!?
|
||||
|
||||
Result := Hypot(x2-x1, y2-y1);
|
||||
end;
|
||||
|
||||
function line_dist(x, y, x1, y1, x2, y2: double): double;
|
||||
var
|
||||
a, b, e, c: double;
|
||||
begin
|
||||
if ((x = x1) and (y = y1)) then
|
||||
a := 0.0
|
||||
else
|
||||
a := sqrt((x - x1) * (x - x1) + (y - y1) * (y - y1));
|
||||
if ((x = x2) and (y = y2)) then
|
||||
b := 0.0
|
||||
else
|
||||
b := sqrt((x - x2) * (x - x2) + (y - y2) * (y - y2));
|
||||
if ((x1 = x2) and (y1 = y2)) then
|
||||
e := 0.0
|
||||
else
|
||||
e := sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
|
||||
if ((a * a + e * e) < (b * b)) then
|
||||
Result := a
|
||||
else if ((b * b + e * e) < (a * a)) then
|
||||
Result := b
|
||||
else if (e <> 0.0) then
|
||||
begin
|
||||
c := (b * b - a * a - e * e) / (-2 * e);
|
||||
if ((a * a - c * c) < 0.0) then
|
||||
Result := 0.0
|
||||
else
|
||||
Result := sqrt(a * a - c * c);
|
||||
end
|
||||
else
|
||||
Result := a;
|
||||
end;
|
||||
|
||||
function transform_affine(const t: TTriangle; const Triangles: TTriangles): boolean;
|
||||
var
|
||||
ra, rb, rc, a, b, c: double;
|
||||
begin
|
||||
Result := True;
|
||||
ra := dist(Triangles[-1].y[0], Triangles[-1].x[0],
|
||||
Triangles[-1].y[1], Triangles[-1].x[1]);
|
||||
rb := dist(Triangles[-1].y[1], Triangles[-1].x[1],
|
||||
Triangles[-1].y[2], Triangles[-1].x[2]);
|
||||
rc := dist(Triangles[-1].y[2], Triangles[-1].x[2],
|
||||
Triangles[-1].y[0], Triangles[-1].x[0]);
|
||||
a := dist(t.y[0], t.x[0], t.y[1], t.x[1]);
|
||||
b := dist(t.y[1], t.x[1], t.y[2], t.x[2]);
|
||||
c := dist(t.y[2], t.x[2], t.y[0], t.x[0]);
|
||||
if (a > ra) then
|
||||
Result := False
|
||||
else if (b > rb) then
|
||||
Result := False
|
||||
else if (c > rc) then
|
||||
Result := False
|
||||
else if ((a = ra) and (b = rb) and (c = rc)) then
|
||||
Result := False;
|
||||
end;
|
||||
|
||||
function triangle_area(t: TTriangle): double;
|
||||
var
|
||||
base, height: double;
|
||||
begin
|
||||
try
|
||||
base := dist(t.x[0], t.y[0], t.x[1], t.y[1]);
|
||||
height := line_dist(t.x[2], t.y[2], t.x[1], t.y[1],
|
||||
t.x[0], t.y[0]);
|
||||
if (base < 1.0) then
|
||||
Result := height
|
||||
else if (height < 1.0) then
|
||||
Result := base
|
||||
else
|
||||
Result := 0.5 * base * height;
|
||||
except on E: EMathError do
|
||||
Result := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
{ Parse }
|
||||
|
||||
function GetVal(token: string): string;
|
||||
var
|
||||
p: integer;
|
||||
begin
|
||||
p := Pos('=', token);
|
||||
Delete(Token, 1, p);
|
||||
Result := Token;
|
||||
end;
|
||||
|
||||
function ReplaceTabs(str: string): string;
|
||||
{Changes tab characters in a string to spaces}
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 1 to Length(str) do
|
||||
begin
|
||||
if str[i] = #9 then
|
||||
begin
|
||||
Delete(str, i, 1);
|
||||
Insert(#32, str, i);
|
||||
end;
|
||||
end;
|
||||
Result := str;
|
||||
end;
|
||||
|
||||
(*
|
||||
{ Palette and gradient functions }
|
||||
|
||||
function RGBToColor(Pal: TMapPalette; index: integer): Tcolor;
|
||||
begin
|
||||
{ Converts the RGB values from a palette index to the TColor type ...
|
||||
could maybe change it to SHLs }
|
||||
Result := (Pal.Blue[index] * 65536) + (Pal.Green[index] * 256)
|
||||
+ Pal.Red[index];
|
||||
end;
|
||||
|
||||
procedure rgb2hsv(const rgb: array of double; out hsv: array of double);
|
||||
var
|
||||
maxval, minval: double;
|
||||
del: double;
|
||||
begin
|
||||
Maxval := Max(rgb[0], Max(rgb[1], rgb[2]));
|
||||
Minval := Min(rgb[0], Min(rgb[1], rgb[2]));
|
||||
|
||||
hsv[2] := maxval; // v
|
||||
|
||||
if (Maxval > 0) and (maxval <> minval) then begin
|
||||
del := maxval - minval;
|
||||
hsv[1] := del / Maxval; //s
|
||||
|
||||
hsv[0] := 0;
|
||||
if (rgb[0] > rgb[1]) and (rgb[0] > rgb[2]) then begin
|
||||
hsv[0] := (rgb[1] - rgb[2]) / del;
|
||||
end else if (rgb[1] > rgb[2]) then begin
|
||||
hsv[0] := 2 + (rgb[2] - rgb[0]) / del;
|
||||
end else begin
|
||||
hsv[0] := 4 + (rgb[0] - rgb[1]) / del;
|
||||
end;
|
||||
|
||||
if hsv[0] < 0 then
|
||||
hsv[0] := hsv[0] + 6;
|
||||
|
||||
end else begin
|
||||
hsv[0] := 0;
|
||||
hsv[1] := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure hsv2rgb(const hsv: array of double; out rgb: array of double);
|
||||
var
|
||||
j: integer;
|
||||
f, p, q, t, v: double;
|
||||
begin
|
||||
j := floor(hsv[0]);
|
||||
f := hsv[0] - j;
|
||||
v := hsv[2];
|
||||
p := hsv[2] * (1 - hsv[1]);
|
||||
q := hsv[2] * (1 - hsv[1] * f);
|
||||
t := hsv[2] * (1 - hsv[1] * (1 - f));
|
||||
|
||||
case j of
|
||||
0: begin rgb[0] := v; rgb[1] := t; rgb[2] := p; end;
|
||||
1: begin rgb[0] := q; rgb[1] := v; rgb[2] := p; end;
|
||||
2: begin rgb[0] := p; rgb[1] := v; rgb[2] := t; end;
|
||||
3: begin rgb[0] := p; rgb[1] := q; rgb[2] := v; end;
|
||||
4: begin rgb[0] := t; rgb[1] := p; rgb[2] := v; end;
|
||||
5: begin rgb[0] := v; rgb[1] := p; rgb[2] := t; end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetGradient(FileName, Entry: string): string;
|
||||
var
|
||||
FileStrings: TStringList;
|
||||
GradStrings: TStringList;
|
||||
i: integer;
|
||||
begin
|
||||
FileStrings := TStringList.Create;
|
||||
GradStrings := TStringList.Create;
|
||||
try
|
||||
try
|
||||
FileStrings.LoadFromFile(FileName);
|
||||
for i := 0 to FileStrings.count - 1 do
|
||||
if Pos(Entry + ' ', Trim(FileStrings[i])) = 1 then break;
|
||||
GradStrings.Add(FileStrings[i]);
|
||||
repeat
|
||||
inc(i);
|
||||
GradStrings.Add(FileStrings[i]);
|
||||
until Pos('}', FileStrings[i]) <> 0;
|
||||
GetGradient := GradStrings.Text;
|
||||
except on exception do
|
||||
Result := '';
|
||||
end;
|
||||
finally
|
||||
GradStrings.Free;
|
||||
FileStrings.Free;
|
||||
end;
|
||||
end;
|
||||
*)
|
||||
|
||||
function ReplaceStr(Str, SearchStr, ReplaceStr: string): string;
|
||||
begin
|
||||
while Pos(SearchStr, Str) <> 0 do
|
||||
begin
|
||||
Insert(ReplaceStr, Str, Pos(SearchStr, Str));
|
||||
system.Delete(Str, Pos(SearchStr, Str), Length(SearchStr));
|
||||
end;
|
||||
Result := Str;
|
||||
end;
|
||||
|
||||
function SplitFilter(const fText: String; const fSep: Char; fTrim: Boolean=false; fQuotes: Boolean=false):TStringList;
|
||||
var vI: Integer;
|
||||
vBuffer: String;
|
||||
vOn: Boolean;
|
||||
begin
|
||||
Result:=TStringList.Create;
|
||||
vBuffer:='';
|
||||
vOn:=true;
|
||||
for vI:=1 to Length(fText) do
|
||||
begin
|
||||
if (fQuotes and(fText[vI]=fSep)and vOn)or(Not(fQuotes) and (fText[vI]=fSep)) then
|
||||
begin
|
||||
if fTrim then vBuffer:=Trim(vBuffer);
|
||||
if vBuffer='' then vBuffer:=fSep; // !!! e.g. split(',**',',')...
|
||||
if vBuffer[1]=fSep then
|
||||
vBuffer:=Copy(vBuffer,2,Length(vBuffer));
|
||||
Result.Add(vBuffer);
|
||||
vBuffer:='';
|
||||
end;
|
||||
if fQuotes then
|
||||
begin
|
||||
if fText[vI]='"' then
|
||||
begin
|
||||
vOn:=Not(vOn);
|
||||
Continue;
|
||||
end;
|
||||
if (fText[vI]<>fSep)or((fText[vI]=fSep)and(vOn=false)) then
|
||||
vBuffer:=vBuffer+fText[vI];
|
||||
end else
|
||||
if fText[vI]<>fSep then
|
||||
vBuffer:=vBuffer+fText[vI];
|
||||
end;
|
||||
if vBuffer<>'' then
|
||||
begin
|
||||
if fTrim then vBuffer:=Trim(vBuffer);
|
||||
Result.Add(vBuffer);
|
||||
end;
|
||||
end;
|
||||
|
||||
function OpenSaveFileDialog(Parent: TWinControl;
|
||||
const DefExt,
|
||||
Filter,
|
||||
InitialDir,
|
||||
Title: string;
|
||||
var FileName: string;
|
||||
MustExist,
|
||||
OverwritePrompt,
|
||||
NoChangeDir,
|
||||
DoOpen: Boolean): Boolean;
|
||||
// uses commdlg
|
||||
var
|
||||
ofn: TOpenFileName;
|
||||
szFile: array[0..260] of Char;
|
||||
fa, fa2: TStringList;
|
||||
h,i,j,k,c : integer;
|
||||
cs, s : string;
|
||||
begin
|
||||
Result := False;
|
||||
FillChar(ofn, SizeOf(TOpenFileName), 0);
|
||||
with ofn do
|
||||
begin
|
||||
lStructSize := SizeOf(TOpenFileName);
|
||||
hwndOwner := Parent.Handle;
|
||||
lpstrFile := szFile;
|
||||
nMaxFile := SizeOf(szFile);
|
||||
if (Title <> '') then
|
||||
lpstrTitle := PChar(Title);
|
||||
if (InitialDir <> '') then
|
||||
lpstrInitialDir := PChar(InitialDir);
|
||||
StrPCopy(lpstrFile, FileName);
|
||||
lpstrFilter := PChar(ReplaceStr(Filter, '|', #0)+#0#0);
|
||||
fa := splitFilter(Filter, '|');
|
||||
|
||||
k := 0;
|
||||
c := (fa.Count div 2);
|
||||
for i := 0 to c - 1 do begin
|
||||
j := 2 * i + 1;
|
||||
cs := LowerCase(fa.Strings[j]);
|
||||
fa2 := splitFilter(cs, ';');
|
||||
for h := 0 to fa2.Count - 1 do begin
|
||||
cs := fa2.Strings[h];
|
||||
s := '*.' + LowerCase(DefExt);
|
||||
if (cs = s) then k := i;
|
||||
end;
|
||||
end;
|
||||
|
||||
nFilterIndex := k + 1;
|
||||
if DefExt <> '' then
|
||||
lpstrDefExt := PChar(DefExt);
|
||||
end;
|
||||
|
||||
if MustExist then ofn.Flags := ofn.Flags or OFN_FILEMUSTEXIST;
|
||||
if OverwritePrompt then ofn.Flags := ofn.Flags or OFN_OVERWRITEPROMPT;
|
||||
if NoChangeDir then ofn.Flags := ofn.Flags or OFN_NOCHANGEDIR;
|
||||
|
||||
if DoOpen then
|
||||
begin
|
||||
if GetOpenFileName(ofn) then
|
||||
begin
|
||||
Result := True;
|
||||
FileName := StrPas(szFile);
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if GetSaveFileName(ofn) then
|
||||
begin
|
||||
Result := True;
|
||||
FileName := StrPas(szFile);
|
||||
end;
|
||||
end
|
||||
end; // function OpenSaveFileDialog
|
||||
|
||||
end.
|
||||
|
||||
754
Core/Translation.pas
Normal file
754
Core/Translation.pas
Normal file
@ -0,0 +1,754 @@
|
||||
unit Translation;
|
||||
|
||||
interface
|
||||
|
||||
uses Global, Classes, Forms, LibXmlParser, LibXmlComps, SysUtils, RegexHelper;
|
||||
|
||||
procedure ListLanguages;
|
||||
procedure LanguageInfo(path: string; var name, localName: string);
|
||||
function LanguageAuthor(path: string): string;
|
||||
procedure Add(key, value: string);
|
||||
procedure LoadLanguage(path:string);
|
||||
procedure LoadEnglish();
|
||||
function TextByKey(key:string):string;
|
||||
|
||||
type
|
||||
TParser = class
|
||||
public
|
||||
constructor Create;
|
||||
|
||||
procedure ListXmlScannerStartTag(Sender: TObject; TagName: string; Attributes: TAttrList);
|
||||
procedure ListXmlScannerEndTag(Sender: TObject; TagName: string);
|
||||
procedure ListXmlScannerEmptyTag(Sender: TObject; TagName: string; Attributes: TAttrList);
|
||||
procedure ListXmlScannerContent(Sender: TObject; Content: string);
|
||||
private
|
||||
currentTagname: string;
|
||||
parentTagnames: TStringList;
|
||||
end;
|
||||
|
||||
TKeyValuePair = class
|
||||
public
|
||||
key: string;
|
||||
value: string;
|
||||
end;
|
||||
|
||||
TDictionary = array of TKeyValuePair;
|
||||
var
|
||||
language: TDictionary;
|
||||
defaultlanguage: TDictionary;
|
||||
tokenCount: integer;
|
||||
ListXmlScanner: TEasyXmlScanner;
|
||||
parser: TParser;
|
||||
|
||||
implementation
|
||||
|
||||
procedure ListLanguages;
|
||||
var
|
||||
searchResult: TSearchRec;
|
||||
begin
|
||||
if FindFirst(ExtractFilePath(Application.ExeName) + 'Languages\*.xml', faAnyFile, searchResult) = 0 then
|
||||
begin
|
||||
repeat
|
||||
AvailableLanguages.Add(ExtractFilePath(Application.ExeName) + 'Languages\' + searchResult.Name);
|
||||
until (FindNext(searchResult) <> 0);
|
||||
SysUtils.FindClose(searchResult);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure LanguageInfo(path: string; var name, localName: string);
|
||||
const
|
||||
exp1 = '\stitle="([^"]*)"';
|
||||
exp2 = '\slocalized-title="([^"]*)"';
|
||||
var
|
||||
langxml : string;
|
||||
sl: TStringList;
|
||||
begin
|
||||
sl := TStringList.Create;
|
||||
sl.LoadFromFile(path);
|
||||
langxml := sl.Text;
|
||||
sl.Destroy;
|
||||
|
||||
name := GetStringPart(langxml, exp1, 1, '');
|
||||
localname := GetStringPart(langxml, exp2, 1, '');
|
||||
end;
|
||||
function LanguageAuthor(path: string): string;
|
||||
const
|
||||
exp = '\sauthor="([^"]*)"';
|
||||
var
|
||||
langxml : string;
|
||||
sl: TStringList;
|
||||
begin
|
||||
sl := TStringList.Create;
|
||||
sl.LoadFromFile(path);
|
||||
langxml := sl.Text;
|
||||
sl.Destroy;
|
||||
|
||||
Result := GetStringPart(langxml, exp, 1, '');
|
||||
end;
|
||||
|
||||
procedure LoadEnglish();
|
||||
begin
|
||||
//TODO:
|
||||
//render-status-renderhibernated
|
||||
|
||||
Add('common-ok', 'OK');
|
||||
Add('common-cancel', 'Cancel');
|
||||
Add('common-apply', 'Apply');
|
||||
Add('common-yes', 'Yes');
|
||||
Add('common-no', 'No');
|
||||
Add('common-lowquality', 'Low Quality');
|
||||
Add('common-mediumquality', 'Medium Quality');
|
||||
Add('common-highquality', 'High Quality');
|
||||
Add('common-copy', 'Copy');
|
||||
Add('common-paste', 'Paste');
|
||||
Add('common-delete', 'Delete');
|
||||
Add('common-rename', 'Rename');
|
||||
Add('common-undo', 'Undo');
|
||||
Add('common-redo', 'Redo');
|
||||
Add('common-width', 'Width');
|
||||
Add('common-height', 'Height');
|
||||
Add('common-size', 'Size');
|
||||
Add('common-pixels', 'Pixels');
|
||||
Add('common-keepaspect', 'Maintain aspect ratio');
|
||||
Add('common-destination', 'Destination');
|
||||
Add('common-filename', 'File name');
|
||||
Add('common-browse', 'Browse...');
|
||||
Add('common-quality', 'Quality');
|
||||
Add('common-filterradius', 'Filter Radius');
|
||||
Add('common-density', 'Density');
|
||||
Add('common-oversample', 'Oversample');
|
||||
Add('common-gamma', 'Gamma');
|
||||
Add('common-brightness', 'Brightness');
|
||||
Add('common-contrast', 'Contrast');
|
||||
Add('common-vibrancy', 'Vibrancy');
|
||||
Add('common-background', 'Background');
|
||||
Add('common-gammathreshold', 'Gamma Threshold');
|
||||
Add('common-start', 'Start');
|
||||
Add('common-pause', 'Pause');
|
||||
Add('common-resume', 'Resume');
|
||||
Add('common-close', 'Close');
|
||||
Add('common-clear', 'Clear');
|
||||
Add('common-enabled', 'Enabled');
|
||||
Add('common-disabled', 'Disabled');
|
||||
Add('common-minimum', 'Minimum');
|
||||
Add('common-maximum', 'Maximum');
|
||||
Add('common-resetlocation', 'Reset location');
|
||||
Add('common-genericopenfailure', 'Unable to open "%s".');
|
||||
Add('common-genericsavefailure', 'Unable to save "%s".');
|
||||
Add('common-invalidformat', 'Invalid format.');
|
||||
Add('common-confirmexit', 'Do you really want to exit? All unsaved data will be lost!');
|
||||
Add('common-confirmdelete', 'Are you sure you want to permanently delete "%s"?');
|
||||
Add('common-dragpanelhint', 'Click and drag to change value');
|
||||
Add('common-trace-pausing', 'Pausing render');
|
||||
Add('common-trace-resuming', 'Resuming render');
|
||||
Add('common-trace-terminating', 'Terminating render');
|
||||
Add('common-trace-stopping', 'Stopping render');
|
||||
Add('common-trace-saving', 'Saving image...');
|
||||
Add('common-trace-creating-simple', 'Creating image...');
|
||||
Add('common-trace-creating-detailed', 'Creating image with quality: %f...');
|
||||
Add('common-trace-rendering-oneslice', 'Rendering...');
|
||||
Add('common-trace-rendering-multipleslices', 'Rendering slice %d of %d...');
|
||||
Add('common-trace-allocating', 'Allocating %n Mb of memory...');
|
||||
Add('common-trace-notenoughmemory', 'ERROR: Not enough memory for this render!');
|
||||
Add('common-statistics-title-oneslice', 'Render Statistics:');
|
||||
Add('common-statistics-title-multipleslices', 'Render Statistics for the last slice:');
|
||||
Add('common-statistics-maxpossiblebits', 'Max possible bits: %2.3f');
|
||||
Add('common-statistics-maxred', 'Max Red: %2.3f bits');
|
||||
Add('common-statistics-maxgreen', 'Max Green: %2.3f bits');
|
||||
Add('common-statistics-maxblue', 'Max Blue: %2.3f bits');
|
||||
Add('common-statistics-maxcounter', 'Max Count: %2.3f bits');
|
||||
Add('common-statistics-pointhitratio', 'Point hit ratio: %2.2f%%');
|
||||
Add('common-statistics-averagespeed', 'Average speed: %n iterations per second');
|
||||
Add('common-statistics-purerenderingtime', 'Pure rendering time:');
|
||||
Add('common-seconds', 'second(s)');
|
||||
Add('common-minutes', 'minute(s)');
|
||||
Add('common-hours', 'hour(s)');
|
||||
Add('common-days', 'day(s)');
|
||||
Add('common-suspendtodisk', 'Suspend to disk');
|
||||
Add('common-resumefromdisk', 'Resume from disk');
|
||||
Add('common-filter-flamefiles', 'Apophysis Flame Library (*.flame;*.xml)');
|
||||
Add('common-filter-gradientfiles', 'Gradient files (*.gradient;*.ugr)');
|
||||
Add('common-filter-fractintfiles', 'Fractint maps (*.map)');
|
||||
Add('common-filter-uprfiles', 'UltraFractal parameters (*.upr)');
|
||||
Add('common-filter-script', 'Apophysis Script (*.aposcript;*.asc)');
|
||||
Add('common-filter-allimages', 'All images (*.bmp;*.dib;*.jpg;*.jpeg)');
|
||||
Add('common-filter-bitmap', 'Windows Bitmap (*.bmp;*.dib)');
|
||||
Add('common-filter-jpeg', 'JPEG (*.jpg;*.jpeg)');
|
||||
Add('common-filter-png', 'Portable Network Graphics (*.png)');
|
||||
Add('common-filter-allfiles', 'All files (*.*)');
|
||||
Add('splash-loadingui', 'Loading user interface...');
|
||||
Add('splash-loadingsettings', 'Loading settings...');
|
||||
Add('splash-loadingplugins', 'Loading plugins...');
|
||||
Add('splash-initrenderer', 'Initializing renderer...');
|
||||
Add('splash-initcolormap', 'Initializing gradients...');
|
||||
Add('splash-initbatch', 'Creating random batch...');
|
||||
Add('splash-execstartupscript', 'Executing "autoexec.asc"...');
|
||||
Add('adjustment-title', 'Adjustment');
|
||||
Add('adjustment-common-depthblur', 'Depth Blur');
|
||||
Add('adjustment-common-pitch', 'Pitch');
|
||||
Add('adjustment-common-yaw', 'Yaw');
|
||||
Add('adjustment-common-height', 'Height');
|
||||
Add('adjustment-common-perspective', 'Perspective');
|
||||
Add('adjustment-common-scale', 'Scale');
|
||||
Add('adjustment-tab-camera-title', 'Camera');
|
||||
Add('adjustment-tab-camera-zoom', 'Zoom');
|
||||
Add('adjustment-tab-camera-xpos', 'X-Position');
|
||||
Add('adjustment-tab-camera-ypos', 'Y-Position');
|
||||
Add('adjustment-tab-camera-rotation', 'Rotation');
|
||||
Add('adjustment-tab-rendering-title', 'Rendering');
|
||||
Add('adjustment-tab-rendering-istransparent', 'Transparent');
|
||||
Add('adjustment-tab-gradient-title', 'Gradient');
|
||||
Add('adjustment-tab-gradient-moderotate', 'Rotate');
|
||||
Add('adjustment-tab-gradient-modehue', 'Hue');
|
||||
Add('adjustment-tab-gradient-modesaturation', 'Saturation');
|
||||
Add('adjustment-tab-gradient-modebrightness', 'Brightness');
|
||||
Add('adjustment-tab-gradient-modecontrast', 'Contrast');
|
||||
Add('adjustment-tab-gradient-modeblur', 'Blur');
|
||||
Add('adjustment-tab-gradient-modefrequency', 'Frequency');
|
||||
Add('adjustment-tab-gradient-preset', 'Preset');
|
||||
Add('adjustment-tab-gradient-reset', 'Reset');
|
||||
Add('adjustment-tab-gradient-modehint', 'Click for menu');
|
||||
Add('adjustment-tab-gradient-presethint', 'Click to choose random preset');
|
||||
Add('adjustment-tab-size-title', 'Image size');
|
||||
Add('adjustment-tab-size-preset', 'Empty preset');
|
||||
Add('adjustment-tab-size-resizemain', 'Resize main window');
|
||||
Add('adjustment-tab-curves-title', 'Curves');
|
||||
Add('adjustment-tab-curves-reset', 'Reset');
|
||||
Add('adjustment-tab-curves-selected', 'Selected curve:');
|
||||
Add('adjustment-tab-curves-overall', 'Overall');
|
||||
Add('adjustment-tab-curves-red', 'Red');
|
||||
Add('adjustment-tab-curves-green', 'Green');
|
||||
Add('adjustment-tab-curves-blue', 'Blue');
|
||||
Add('adjustment-popup-quality-instantpreview', 'Instant preview');
|
||||
Add('adjustment-popup-gradient-randomize', 'Randomize');
|
||||
Add('adjustment-popup-gradient-invert', 'Invert');
|
||||
Add('adjustment-popup-gradient-reverse', 'Reverse');
|
||||
Add('adjustment-popup-gradient-smooth', 'Smooth Palette...');
|
||||
Add('adjustment-popup-gradient-browser', 'Gradient Browser...');
|
||||
Add('adjustment-popup-gradient-saveasugr', 'Save Gradient...');
|
||||
Add('adjustment-popup-gradient-saveasmap', 'Save as Map File...');
|
||||
Add('adjustment-popup-gradient-saveasdefault', 'Save as default');
|
||||
Add('editor-title', 'Editor');
|
||||
Add('editor-common-transform', 'Transform:');
|
||||
Add('editor-common-name', 'Name:');
|
||||
Add('editor-common-weight', 'Weight:');
|
||||
Add('editor-common-finalxformlistitem', 'Final');
|
||||
Add('editor-common-fromprefix', 'from %d');
|
||||
Add('editor-common-toprefix', 'to %d');
|
||||
Add('editor-tab-variations-title', 'Variations');
|
||||
Add('editor-tab-variations-name', 'Name');
|
||||
Add('editor-tab-variations-value', 'Value');
|
||||
Add('editor-tab-variations-togglehideunused', 'Hide unused variations');
|
||||
Add('editor-tab-variables-title', 'Variables');
|
||||
Add('editor-tab-variables-name', 'Name');
|
||||
Add('editor-tab-variables-value', 'Value');
|
||||
Add('editor-tab-variables-toggleshowall', 'Show all variables');
|
||||
Add('editor-tab-chaos-title', 'Xaos');
|
||||
Add('editor-tab-chaos-path', 'Path');
|
||||
Add('editor-tab-chaos-modifier', 'Weight modifier');
|
||||
Add('editor-tab-chaos-viewasto', 'View as "to"');
|
||||
Add('editor-tab-chaos-viewasfrom', 'View as "from"');
|
||||
Add('editor-tab-triangle-title', 'Triangle');
|
||||
Add('editor-tab-triangle-pivot', 'Pivot');
|
||||
Add('editor-tab-triangle-modelocal', 'Local');
|
||||
Add('editor-tab-triangle-modeworld', 'World');
|
||||
Add('editor-tab-triangle-resetpivot', 'Reset pivot point');
|
||||
Add('editor-tab-triangle-pickpivot', 'Pick pivot point');
|
||||
Add('editor-tab-triangle-rotateleft', 'Rotate triangle counter-clockwise');
|
||||
Add('editor-tab-triangle-rotateright', 'Rotate triangle clockwise');
|
||||
Add('editor-tab-triangle-moveup', 'Move triangle up');
|
||||
Add('editor-tab-triangle-movedown', 'Move triangle down');
|
||||
Add('editor-tab-triangle-moveleft', 'Move triangle left');
|
||||
Add('editor-tab-triangle-moveright', 'Move triangle right');
|
||||
Add('editor-tab-triangle-scaledown', 'Scale triangle down');
|
||||
Add('editor-tab-triangle-scaleup', 'Scale triangle up');
|
||||
Add('editor-tab-triangle-autoweight', 'Auto-balance weights');
|
||||
Add('editor-tab-transform-title', 'Transform');
|
||||
Add('editor-tab-transform-reset', 'Reset transform');
|
||||
Add('editor-tab-transform-resethint', 'Reset all vectors to default position');
|
||||
Add('editor-tab-transform-rectangular', 'Rectangular');
|
||||
Add('editor-tab-transform-rectangularhint', 'Show vectors in rectangular (cartesian) corrdinates');
|
||||
Add('editor-tab-transform-polar', 'Polar (deg)');
|
||||
Add('editor-tab-transform-polarhint', 'Show vector in polar coordinates');
|
||||
Add('editor-tab-transform-resetpost', 'Reset post transform');
|
||||
Add('editor-tab-transform-resetposthint', 'Reset all post-transform vectors to default position');
|
||||
Add('editor-tab-transform-autozscale', 'Auto-calculate pre_zscale');
|
||||
Add('editor-tab-transform-resetxhint', 'Reset vector X');
|
||||
Add('editor-tab-transform-resetyhint', 'Reset vector Y');
|
||||
Add('editor-tab-transform-resetohint', 'Reset vector O');
|
||||
Add('editor-tab-color-title', 'Colors');
|
||||
Add('editor-tab-color-transformcolor', 'Transform color');
|
||||
Add('editor-tab-color-colorspeed', 'Color speed');
|
||||
Add('editor-tab-color-opacity', 'Opacity');
|
||||
Add('editor-tab-color-directcolor', 'Direct color');
|
||||
Add('editor-tab-color-togglesolo', 'Solo');
|
||||
Add('editor-tab-color-togglesoloformat', 'Solo transform #%d');
|
||||
Add('editor-tab-color-varpreview', 'Variation preview');
|
||||
Add('editor-tab-color-previewrange', 'Range');
|
||||
Add('editor-tab-color-previewdepth', 'Depth');
|
||||
Add('editor-tab-color-previewdensity', 'Density');
|
||||
Add('editor-tab-color-preview', 'Preview');
|
||||
Add('editor-toolbar-newflame', 'New flame');
|
||||
Add('editor-toolbar-newtransform', 'New transform');
|
||||
Add('editor-toolbar-addlinkedtransform', 'Add linked transform');
|
||||
Add('editor-toolbar-duplicatetransform', 'Duplicate transform');
|
||||
Add('editor-toolbar-removetransform', 'Remove transform');
|
||||
Add('editor-toolbar-modeselect', 'Selection mode');
|
||||
Add('editor-toolbar-modemove', 'Movement mode');
|
||||
Add('editor-toolbar-moderotate', 'Rotation mode');
|
||||
Add('editor-toolbar-modescale', 'Scale mode');
|
||||
Add('editor-toolbar-toggleworldpivot', 'Toggle world pivot');
|
||||
Add('editor-toolbar-rotate90ccw', 'Rotate 90° counter-clockwise');
|
||||
Add('editor-toolbar-rotate90cw', 'Rotate 90° clockwise');
|
||||
Add('editor-toolbar-fliph', 'Flip horizontal');
|
||||
Add('editor-toolbar-flipv', 'Flip vertical');
|
||||
Add('editor-toolbar-togglevarpreview', 'Show variation preview');
|
||||
Add('editor-toolbar-toggleposttransform', 'Enable/edit post-transform');
|
||||
Add('editor-toolbar-togglefinaltransform', 'Enable final transform');
|
||||
Add('editor-popup-panel-autozoom', 'Zoom automatically');
|
||||
Add('editor-popup-panel-toggleextendededit', 'Toggle extended edit mode');
|
||||
Add('editor-popup-panel-locktransformaxes', 'Lock transform axes');
|
||||
Add('editor-popup-panel-allfliph', 'Flip all horizontally');
|
||||
Add('editor-popup-panel-allflipv', 'Flip all vertically');
|
||||
Add('editor-popup-quality-autoreset', 'Auto-reset location');
|
||||
Add('editor-popup-transform-resetposition', 'Reset position');
|
||||
Add('editor-popup-transform-resetrotation', 'Reset rotation');
|
||||
Add('editor-popup-transform-resetscale', 'Reset scale');
|
||||
Add('editor-popup-transform-copycoords', 'Copy triangle coordinates');
|
||||
Add('editor-popup-transform-pastecoords', 'Paste triangle coordinates');
|
||||
Add('editor-popup-transform-resetentiretriangle', 'Reset triangle');
|
||||
Add('editor-popup-chaos-rebuildlinks', 'Rebuild links');
|
||||
Add('editor-popup-chaos-clearall', 'Clear all');
|
||||
Add('editor-popup-chaos-setall', 'Set all');
|
||||
Add('editor-status-zoomformat', 'Zoom: %f');
|
||||
Add('editor-status-xformat', 'X: %f');
|
||||
Add('editor-status-yformat', 'Y: %f');
|
||||
Add('editor-status-rotateformat', 'Rotate: %3.2f° Inner angle: %3.2f°');
|
||||
Add('editor-status-rotateformat2', 'Rotate: %3.2f° Local axis: %3.2f°');
|
||||
Add('editor-status-rotateformat3', 'Rotate: %3.2f°');
|
||||
Add('editor-status-scaleformat', 'Distance: %3.3f Scale: %3.2f%%');
|
||||
Add('editor-status-scaleformat2', 'Scale: %3.2f%%');
|
||||
Add('editor-status-moveformat', 'Move: %3.3f ; %3.3f');
|
||||
Add('editor-status-moveformat2', 'Move: %3.3f ; %3.3f');
|
||||
Add('editor-status-transformformat', 'Transform #%d');
|
||||
Add('editor-status-zoomformat', 'Zoom: %f');
|
||||
Add('editor-status-selecton', 'Select ON');
|
||||
Add('editor-status-selectoff', 'Select OFF');
|
||||
Add('export-title', 'Export to flam3');
|
||||
Add('export-paramoptions-title', 'Parameter options');
|
||||
Add('export-paramoptions-bufferdepth', 'Buffer depth');
|
||||
Add('export-paramoptions-strips', 'Strips');
|
||||
Add('export-paramoptions-estimatorradius', 'DE radius');
|
||||
Add('export-paramoptions-estimatorcurve', 'DE curve');
|
||||
Add('export-paramoptions-estimatormin', 'DE minimum');
|
||||
Add('export-paramoptions-dorender', 'Render');
|
||||
Add('export-paramoptions-warningtitle', 'WARNING');
|
||||
Add('export-paramoptions-warningtext', 'Fractals created with this version of Apophysis are not supported by flam3! To render 2D-only fractals, download the latest version of flam3 from http://www.flam3.com');
|
||||
Add('favscripts-title', 'Favorite scripts');
|
||||
Add('favscripts-add', 'Add');
|
||||
Add('favscripts-remove', 'Remove');
|
||||
Add('favscripts-moveup', 'Move up');
|
||||
Add('favscripts-movedown', 'Move down');
|
||||
Add('fullscreen-popup-rendermore', 'Render more');
|
||||
Add('fullscreen-popup-stoprender', 'Stop render');
|
||||
Add('gradientbrowser-title', 'Gradient Browser');
|
||||
Add('postprocess-title', 'Post-process render');
|
||||
Add('postprocess-save', 'Save');
|
||||
Add('postprocess-fittowindow', 'Fit to window');
|
||||
Add('render-title', 'Render flame');
|
||||
Add('render-common-gotofolder', 'Open target folder...');
|
||||
Add('render-tab-settings-title', 'Settings');
|
||||
Add('render-tab-output-title', 'Output');
|
||||
Add('render-resourceusage-title', 'Resource usage');
|
||||
Add('render-resourceusage-infotext', 'The render process will use %u MB of %u MB available physical memory');
|
||||
Add('render-resourceusage-infotext2', 'Apophysis will try to use %u processor cores (%u available) - change this in the options');
|
||||
Add('render-resourceusage-limit', 'Memory limit');
|
||||
Add('render-resourceusage-nolimit', 'No limit');
|
||||
Add('render-resourceusage-bufferdepth', 'Buffer depth');
|
||||
Add('render-output-title', 'Output options');
|
||||
Add('render-output-saveparams', 'Save parameters');
|
||||
Add('render-completion-title', 'Completion options');
|
||||
Add('render-completion-postprocess', 'Post-process after rendering');
|
||||
Add('render-completion-shutdown', 'Shut down after rendering');
|
||||
Add('render-completion-saveincomplete', 'Save incomplete renders');
|
||||
Add('render-status-rendererror-log', 'Rendering failed!');
|
||||
Add('render-status-rendererror-message', 'Error while rendering!');
|
||||
Add('render-status-saveerror-log', 'Error saving image!');
|
||||
Add('render-status-saveerror-message1', 'An error occured while saving the image:');
|
||||
Add('render-status-saveerror-message2', 'Check your free disk space and try again.');
|
||||
Add('render-status-totaltime', 'Total time:');
|
||||
Add('render-status-renderterminated', 'Rendering terminated!');
|
||||
Add('render-status-renderhibernated', 'Rendering paused and progress saved!');
|
||||
Add('render-status-elapsed', 'Elapsed');
|
||||
Add('render-status-remaining', 'Remaining');
|
||||
Add('render-status-slicestatus', 'Slice %d of %d');
|
||||
Add('render-status-notenoughmemory1', 'You do not have enough memory for this render. Do you want to continue anyway?');
|
||||
Add('render-status-notenoughmemory2', 'You do not have enough memory for this render. Please use a lower Maximum memory setting. Do you want to ignore this problem and continue?');
|
||||
Add('render-status-nofilename', 'Please enter a file name.');
|
||||
Add('render-status-fileexists-message1', '"%s" already exists');
|
||||
Add('render-status-fileexists-message2', 'Do you want to replace it?');
|
||||
Add('render-status-pathdoesnotexist', 'The directory does not exist.');
|
||||
Add('render-status-invaliddensity', 'Invalid Sample Density value');
|
||||
Add('render-status-invalidfilterradius', 'Invalid Filter Radius value');
|
||||
Add('render-status-invalidoversample', 'Invalid Oversample value');
|
||||
Add('render-status-invalidwidth', 'Invalid image width');
|
||||
Add('render-status-invalidheight', 'Invalid image height');
|
||||
Add('render-status-maxmemorytoosmall', 'Maximum memory value is too small. Do you want to continue anyway?');
|
||||
Add('render-status-shuttingdownrender', 'Shutting down previous render...');
|
||||
Add('render-status-log-title', 'Rendering "%s"');
|
||||
Add('render-status-log-size', 'Size: %dx%d');
|
||||
Add('render-status-log-quality', 'Quality: %g');
|
||||
Add('render-status-log-oversampling', 'Oversample: %d, Filter: %g');
|
||||
Add('render-status-log-bufferdepth', 'Buffer depth: %s');
|
||||
Add('render-status-log-memorylimit', 'Memory limit: %d MB');
|
||||
Add('render-status-log-largepng-message1', '*** WARNING *** You have selected PNG format and an image size which exceeds 20 megapixels');
|
||||
Add('render-status-log-largepng-message2', 'PNG format with extreme high-resolution images is not recommended!');
|
||||
Add('render-status-log-largepng-message3', 'To avoid slowdown (and possible memory problems) use BMP file format instead.');
|
||||
Add('render-status-confirmstop', 'Do you want to stop the current render?');
|
||||
Add('imagecoloring-title', 'Image coloring');
|
||||
Add('imagecoloring-enable', 'Enable');
|
||||
Add('imagecoloring-firstpalette', 'First palette');
|
||||
Add('imagecoloring-secondpalette', 'Second palette');
|
||||
Add('imagecoloring-preset', 'Preset');
|
||||
Add('imagecoloring-image', 'Image');
|
||||
Add('messages-title', 'Messages');
|
||||
Add('messages-openautomatically', 'Automatically open this window');
|
||||
Add('mutation-title', 'Mutation');
|
||||
Add('mutation-directions', 'Directions');
|
||||
Add('mutation-speed', 'Speed');
|
||||
Add('mutation-trend', 'Trend');
|
||||
Add('mutation-keepnumberoftransforms', 'Keep transform count');
|
||||
Add('mutation-randomtrend', 'Random');
|
||||
Add('mutation-maintainsymmetry', 'Maintain symmetry');
|
||||
Add('mutation-previous', 'Previous');
|
||||
Add('options-title', 'Settings ');
|
||||
Add('options-restartnotice', 'You must restart Apophysis 7x to make your changes have effect');
|
||||
Add('options-tab-general-title', 'General ');
|
||||
Add('options-tab-general-language', 'Language file');
|
||||
Add('options-tab-general-multithreading', 'Multithreading ');
|
||||
Add('options-tab-general-multithreading-off', 'Off ');
|
||||
Add('options-tab-general-bufferdepth', 'Buffer depth ');
|
||||
Add('options-tab-general-jpegquality', 'JPEG quality ');
|
||||
Add('options-tab-general-pngtransparency', 'PNG transparency ');
|
||||
Add('options-tab-general-showextendedstatistics', 'Show extended render statistics ');
|
||||
Add('options-tab-general-confirmdelete', 'Confirm delete ');
|
||||
Add('options-tab-general-confirmexit', 'Confirm exit ');
|
||||
Add('options-tab-general-confirmrenderstop', 'Confirm stop rendering ');
|
||||
Add('options-tab-general-oldgradientformat', 'Use old gradient format ');
|
||||
Add('options-tab-general-alwaysblankflame', 'Disable templates ');
|
||||
Add('options-tab-general-enablemissingpluginswarning', 'Warn on missing plugins ');
|
||||
Add('options-tab-general-enablethumbnailembedding', 'Enable thumbnail embedding ');
|
||||
Add('options-tab-general-rotatemode', 'Rotate mode ');
|
||||
Add('options-tab-general-rotateimage', 'Rotate image ');
|
||||
Add('options-tab-general-rotateframe', 'Rotate frame ');
|
||||
Add('options-tab-general-zoommode', 'Zoom mode ');
|
||||
Add('options-tab-general-preservequality', 'Preserve quality ');
|
||||
Add('options-tab-general-preservespeed', 'Preserve speed ');
|
||||
Add('options-tab-general-guides', 'Guidelines ');
|
||||
Add('options-tab-general-enableguides', 'Enable guides ');
|
||||
Add('options-tab-general-guidecentercolor', 'Center ');
|
||||
Add('options-tab-general-guidethirdscolor', 'Thirds ');
|
||||
Add('options-tab-general-guidegoldenratiocolor', 'Golden ratio ');
|
||||
Add('options-tab-general-singleprecision', 'Use single-precision buffers ');
|
||||
Add('options-tab-general-pluginpath', 'Plugin folder ');
|
||||
Add('options-tab-editor-title', 'Editor ');
|
||||
Add('options-tab-editor-editorgraph', 'Graph ');
|
||||
Add('options-tab-editor-editordefaults', 'Defaults ');
|
||||
Add('options-tab-editor-referencetriangle', 'Reference triangle ');
|
||||
Add('options-tab-editor-usetransformcolor', 'Use transform color ');
|
||||
Add('options-tab-editor-helperlines', 'Show helper lines ');
|
||||
Add('options-tab-editor-alwaysshowbothtransformtypes', 'Always show both transform types ');
|
||||
Add('options-tab-editor-backgroundcolor', 'Background ');
|
||||
Add('options-tab-editor-gridcolors', 'Grid ');
|
||||
Add('options-tab-editor-referencecolor', 'Reference ');
|
||||
Add('options-tab-editor-helpercolors', 'Helpers ');
|
||||
Add('options-tab-editor-extendededit', 'Extended edit mode ');
|
||||
Add('options-tab-editor-locktransformaxes', 'Lock transform axes ');
|
||||
Add('options-tab-editor-rebuildxaoslinks', 'Rebuild links ');
|
||||
Add('options-tab-editor-normalreference', 'Normal ');
|
||||
Add('options-tab-editor-proportionalreference', 'Proportional ');
|
||||
Add('options-tab-editor-wanderingreference', 'Wandering (old style) ');
|
||||
Add('options-tab-editor-enablepreview', 'Enable editor preview');
|
||||
Add('options-tab-editor-previewtransparency', 'Transparency');
|
||||
Add('options-tab-display-title', 'Display ');
|
||||
Add('options-tab-display-rendering', 'Rendering ');
|
||||
Add('options-tab-display-previewdensity', 'Preview density ');
|
||||
Add('options-tab-display-mainpreview', 'Main window preview ');
|
||||
Add('options-tab-display-extendpreviewbuffer', 'Extend preview buffer ');
|
||||
Add('options-tab-display-extenspreviewbufferlabel', 'Buffer extension ');
|
||||
Add('options-tab-display-showtransparency', 'Show transparency ');
|
||||
Add('options-tab-display-usesmallthumbs', 'Use small thumbnails (like Apophysis 2.09) ');
|
||||
Add('options-tab-random-title', 'Random ');
|
||||
Add('options-tab-random-numberoftransforms', 'Number of transforms ');
|
||||
Add('options-tab-random-mutationtransforms', 'Mutation transforms ');
|
||||
Add('options-tab-random-randombatch', 'Random batch ');
|
||||
Add('options-tab-random-forcedsymmetry', 'Forced symmetry ');
|
||||
Add('options-tab-random-batchsize', 'Batch size ');
|
||||
Add('options-tab-random-titleprefix', 'Title prefix ');
|
||||
Add('options-tab-random-keepbackground', 'Keep background color ');
|
||||
Add('options-tab-random-symtype', 'Type ');
|
||||
Add('options-tab-random-symorder', 'Order ');
|
||||
Add('options-tab-random-symlimit', 'Limit ');
|
||||
Add('options-tab-random-type-none', 'None ');
|
||||
Add('options-tab-random-type-bilateral', 'Bilateral ');
|
||||
Add('options-tab-random-type-rotational', 'Rotational ');
|
||||
Add('options-tab-random-type-dihedral', 'Dihedral ');
|
||||
Add('options-tab-random-onrandom', 'On random flame use... ');
|
||||
Add('options-tab-random-userandom', 'Random preset ');
|
||||
Add('options-tab-random-usedefault', 'Default gradient ');
|
||||
Add('options-tab-random-usecurrent', 'Current gradient ');
|
||||
Add('options-tab-random-randomcalculated', 'Random gradient ');
|
||||
Add('options-tab-random-randomfromfile', 'Random from file ');
|
||||
Add('options-tab-random-filetouse', 'Random file to use ');
|
||||
Add('options-tab-variations-title', 'Variations ');
|
||||
Add('options-tab-variations-setall', 'Set all ');
|
||||
Add('options-tab-variations-clearall', 'Clear all ');
|
||||
Add('options-tab-gradient-title', 'Gradient ');
|
||||
Add('options-tab-gradient-numberofnodes', 'Number of nodes ');
|
||||
Add('options-tab-gradient-smoothpalette', 'Smooth palette ');
|
||||
Add('options-tab-gradient-huebetween', 'Hue range ');
|
||||
Add('options-tab-gradient-satbetween', 'Saturation range ');
|
||||
Add('options-tab-gradient-lumbetween', 'Luminance range ');
|
||||
Add('options-tab-gradient-numtries', 'Number of tries ');
|
||||
Add('options-tab-gradient-trylength', 'Try length ');
|
||||
Add('options-tab-upr-title', 'UltraFractal ');
|
||||
Add('options-tab-upr-paramdefaults', 'Parameter defaults ');
|
||||
Add('options-tab-upr-coloralgorithm', 'Coloring algorithm ');
|
||||
Add('options-tab-upr-uprsize', 'Image size ');
|
||||
Add('options-tab-upr-formula', 'Formula ');
|
||||
Add('options-tab-upr-identifier', 'Identifier ');
|
||||
Add('options-tab-upr-adjustdensity', 'Adjust sample density ');
|
||||
Add('options-tab-environment-title', 'Environment');
|
||||
Add('options-tab-environment-defaultparams', 'Default parameters ');
|
||||
Add('options-tab-environment-smoothpalette', 'Smooth palette ');
|
||||
Add('options-tab-environment-functionlib', 'Scripting function library ');
|
||||
Add('options-tab-environment-exportrenderer', 'Export renderer ');
|
||||
Add('options-tab-environment-helpfile', 'Help file ');
|
||||
Add('options-tab-environment-rememberlastopen', 'Remember last open parameters ');
|
||||
Add('options-tab-environment-autosave', 'Enable autosave ');
|
||||
Add('options-tab-environment-savefrequency', 'Save frequency ');
|
||||
Add('preview-title', 'Preview');
|
||||
Add('save-title', 'Save');
|
||||
Add('save-name', 'Name');
|
||||
Add('save-oldformat', 'Use old format');
|
||||
Add('save-newformat', 'Use new format');
|
||||
Add('save-type-parameters', 'Save Parameters');
|
||||
Add('save-type-allparameters', 'Save All Parameters');
|
||||
Add('save-type-gradient', 'Save Gradient');
|
||||
Add('save-type-exportupr', 'Export UPR');
|
||||
Add('save-status-notitle', 'No item name given.');
|
||||
Add('save-status-invalidfilename', 'Invalid file name.');
|
||||
Add('save-status-alreadyexists', '"%s" in "%s" already exists. Do you want to replace it?');
|
||||
Add('save-status-alreadyexists2', '"%s" already exists. Do you want to replace it?');
|
||||
Add('savepreset-title', 'Save preset');
|
||||
Add('savepreset-name', 'Name');
|
||||
Add('savepreset-notitle', 'No preset name given.');
|
||||
Add('script-title', 'Script');
|
||||
Add('script-rendering', 'Rendering...');
|
||||
Add('script-break', 'Break');
|
||||
Add('script-new', 'New');
|
||||
Add('script-open', 'Open');
|
||||
Add('script-save', 'Save');
|
||||
Add('script-run', 'Run');
|
||||
Add('script-stop', 'Stop');
|
||||
Add('splash-loadingtext', 'Loading');
|
||||
Add('template-title', 'Templates');
|
||||
Add('main-common-title-lite', 'Lite Version');
|
||||
Add('main-common-title-t500', 'High-Memory Version');
|
||||
Add('main-common-randombatch', 'Random Batch');
|
||||
Add('main-menu-file-title', 'File');
|
||||
Add('main-menu-file-new', 'New');
|
||||
Add('main-menu-file-open', 'Open...');
|
||||
Add('main-menu-file-restoreautosave', 'Restore last autosave');
|
||||
Add('main-menu-file-saveparams', 'Save parameters...');
|
||||
Add('main-menu-file-saveallparams', 'Save all parameters...');
|
||||
Add('main-menu-file-smoothpalette', 'Smooth palette...');
|
||||
Add('main-menu-file-gradientbrowser', 'Gradient browser...');
|
||||
Add('main-menu-file-exportupr', 'Export UPR...');
|
||||
Add('main-menu-file-exportflame', 'Export to flam3...');
|
||||
Add('main-menu-file-importgimp', 'Import GIMP parameters...');
|
||||
Add('main-menu-file-submitsheep', 'Submit sheep');
|
||||
Add('main-menu-file-randombatch', 'Random batch');
|
||||
Add('main-menu-file-exit', 'Exit');
|
||||
Add('main-menu-edit-title', 'Edit');
|
||||
Add('main-menu-edit-saveundo', 'Save undo stack...');
|
||||
Add('main-menu-edit-copyasupr', 'Copy as UPR');
|
||||
Add('main-menu-view-title', 'View');
|
||||
Add('main-menu-view-fullscreen', 'Full screen');
|
||||
Add('main-menu-view-editor', 'Editor');
|
||||
Add('main-menu-view-adjustment', 'Adjustment');
|
||||
Add('main-menu-view-gradient', 'Gradient');
|
||||
Add('main-menu-view-mutation', 'Mutation');
|
||||
Add('main-menu-view-imagesize', 'Image size');
|
||||
Add('main-menu-view-messages', 'Messages');
|
||||
Add('main-menu-view-curves', 'Curves');
|
||||
Add('main-menu-flame-title', 'Flame');
|
||||
Add('main-menu-flame-reset', 'Reset location');
|
||||
Add('main-menu-flame-randomize', 'Randomize');
|
||||
Add('main-menu-flame-randomweights', 'Randomize weights');
|
||||
Add('main-menu-flame-equalweights', 'Equalize weights');
|
||||
Add('main-menu-flame-computeweights', 'Normalize weights');
|
||||
Add('main-menu-flame-calculatecolors', 'Calculate colors');
|
||||
Add('main-menu-flame-randomizecolors', 'Randomize colors');
|
||||
Add('main-menu-flame-rendertodisk', 'Render flame...');
|
||||
Add('main-menu-flame-renderallflames', 'Render all flames...');
|
||||
Add('main-menu-flame-resumeunfinished', 'Resume unfinished render process...');
|
||||
Add('main-menu-flame-generatereport', 'Summarize flame...');
|
||||
Add('main-menu-variation-title', 'Variation');
|
||||
Add('main-menu-variation-random', 'Random');
|
||||
Add('main-menu-variation-builtin', 'Built-in');
|
||||
Add('main-menu-variation-plugins', 'Plugins');
|
||||
Add('main-menu-script-title', 'Script');
|
||||
Add('main-menu-script-run', 'Run script');
|
||||
Add('main-menu-script-run2', 'Run "%s"');
|
||||
Add('main-menu-script-directory', 'Directory');
|
||||
Add('main-menu-script-more', 'More');
|
||||
Add('main-menu-script-stop', 'Stop script');
|
||||
Add('main-menu-script-open', 'Open...');
|
||||
Add('main-menu-script-edit', 'Edit script');
|
||||
Add('main-menu-script-managefaves', 'Manage favorites...');
|
||||
Add('main-menu-script-flametoscript', 'Generate script from flame');
|
||||
Add('main-menu-options-title', 'Tools');
|
||||
Add('main-menu-options-togglemaintoolbar', 'Show toolbar');
|
||||
Add('main-menu-options-togglestatusbar', 'Show status bar');
|
||||
Add('main-menu-options-togglefilelist', 'Show parameter list');
|
||||
Add('main-menu-options-resetfilelistwidth', 'Reset layout');
|
||||
Add('main-menu-options-showoptions', 'Settings...');
|
||||
Add('main-menu-help-title', '?');
|
||||
Add('main-menu-help-contents', 'Contents');
|
||||
Add('main-menu-help-aboutalgorithm', 'About fractal flames...');
|
||||
Add('main-menu-help-aboutapophysis', 'About Apophysis 7x...');
|
||||
Add('main-toolbar-listviewmode-classic', 'Classic view');
|
||||
Add('main-toolbar-listviewmode-icons', 'Thumbnail view');
|
||||
Add('main-toolbar-togglealpha', 'Show transparency');
|
||||
Add('main-toolbar-toggleguides', 'Show guidelines');
|
||||
Add('main-toolbar-modemove', 'Pan camera');
|
||||
Add('main-toolbar-moderotate', 'Rotate camera');
|
||||
Add('main-toolbar-modezoomin', 'Zoom in');
|
||||
Add('main-toolbar-modezoomout', 'Zoom out');
|
||||
Add('main-status-batchgenerate', 'Generating %d of %s...');
|
||||
Add('main-status-batcherror', 'Error creating batch.');
|
||||
Add('main-status-calculatingpalette', 'Calculating palette (%d%)...');
|
||||
Add('main-status-noflam3', 'Unable to find flam3 executable. Please verify your settings.');
|
||||
Add('main-status-nohelpfile', 'Please specify a help file path in the options dialog first.');
|
||||
Add('main-status-variationsorvariables', 'variations or variables');
|
||||
Add('main-status-plugins', 'plugins');
|
||||
Add('main-status-pluginpath-ioerror', 'Failed to write the setting for the plugin directory. Apophysis will use the default setting.');
|
||||
Add('main-status-noloadingerrors', 'Flame loaded without errors');
|
||||
Add('main-status-loadingerrorcount', '%d errors in flame');
|
||||
Add('main-status-morepluginsneeded', 'The flame "%s" requires the following additional %s:');
|
||||
Add('main-status-noautosave', 'No autosave present.');
|
||||
Add('main-report-transformcount', 'Transform count: %d');
|
||||
Add('main-report-finaltransform', 'Has final transform: %s');
|
||||
Add('main-report-usedplugins', 'Used plugins:');
|
||||
Add('main-report-noplugins', '(none)');
|
||||
end;
|
||||
|
||||
procedure Add(key, value: string);
|
||||
var entry : TKeyValuePair;
|
||||
begin
|
||||
Inc(tokenCount);
|
||||
SetLength(language, tokenCount);
|
||||
SetLength(defaultlanguage, tokenCount);
|
||||
entry := TKeyValuePair.Create;
|
||||
entry.key := key;
|
||||
entry.value := value;
|
||||
language[tokenCount - 1] := entry;
|
||||
defaultlanguage[tokenCount - 1] := entry;
|
||||
end;
|
||||
procedure AddNoDefault(key, value: string);
|
||||
var entry : TKeyValuePair;
|
||||
begin
|
||||
Inc(tokenCount);
|
||||
SetLength(language, tokenCount);
|
||||
entry := TKeyValuePair.Create;
|
||||
entry.key := key;
|
||||
entry.value := value;
|
||||
language[tokenCount - 1] := entry;
|
||||
end;
|
||||
|
||||
procedure LoadLanguage(path:string);
|
||||
begin
|
||||
if (path = '') or (not FileExists(path)) then LoadEnglish()
|
||||
else begin
|
||||
tokenCount := 0;
|
||||
if true then begin
|
||||
parser := TParser.Create;
|
||||
ListXmlScanner := TEasyXmlScanner.Create(nil);
|
||||
|
||||
ListXmlScanner.OnStartTag := parser.ListXmlScannerStartTag;
|
||||
ListXmlScanner.OnEndTag := parser.ListXmlScannerEndTag;
|
||||
ListXmlScanner.OnEmptyTag := parser.ListXmlScannerEmptyTag;
|
||||
ListXmlScanner.OnContent := parser.ListXmlScannerContent;
|
||||
|
||||
ListXmlScanner.Filename := path;
|
||||
ListXmlScanner.Execute;
|
||||
|
||||
ListXmlScanner.Destroy;
|
||||
parser.Destroy;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TextByKey(key:string):string;
|
||||
var i: integer;
|
||||
begin
|
||||
|
||||
Result := '#ERR_NO_TEXT#';
|
||||
for i:=0 to tokenCount - 1 do begin
|
||||
if LowerCase(language[i].key) = LowerCase(key) then begin
|
||||
Result := language[i].value;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
// maybe try default language?
|
||||
for i:=0 to tokenCount - 1 do begin
|
||||
if LowerCase(defaultlanguage[i].key) = LowerCase(key) then begin
|
||||
Result := defaultlanguage[i].value;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
constructor TParser.Create;
|
||||
begin
|
||||
self.parentTagnames := TStringList.Create;
|
||||
end;
|
||||
|
||||
procedure TParser.ListXmlScannerStartTag(Sender: TObject; TagName: string; Attributes: TAttrList);
|
||||
begin
|
||||
self.parentTagnames.Add(self.currentTagname);
|
||||
self.currentTagname := TagName;
|
||||
end;
|
||||
procedure TParser.ListXmlScannerEndTag(Sender: TObject; TagName: string);
|
||||
var lastIndex : integer;
|
||||
begin
|
||||
lastIndex := self.parentTagnames.Count - 1;
|
||||
self.currentTagname := self.parentTagnames.Strings[lastIndex];
|
||||
self.parentTagnames.Delete(lastIndex);
|
||||
end;
|
||||
procedure TParser.ListXmlScannerEmptyTag(Sender: TObject; TagName: string; Attributes: TAttrList);
|
||||
var lastIndex : integer;
|
||||
begin
|
||||
self.parentTagnames.Add(self.currentTagname);
|
||||
self.currentTagname := TagName;
|
||||
self.ListXmlScannerContent(Sender, '');
|
||||
lastIndex := self.parentTagnames.Count - 1;
|
||||
self.currentTagname := self.parentTagnames.Strings[lastIndex];
|
||||
self.parentTagnames.Delete(lastIndex);
|
||||
end;
|
||||
procedure TParser.ListXmlScannerContent(Sender: TObject; Content: string);
|
||||
const root: string = 'stringtable';
|
||||
var key, tn: string; i: integer;
|
||||
begin
|
||||
for i:=0 to self.parentTagnames.Count - 1 do begin
|
||||
tn := self.parentTagnames.Strings[i];
|
||||
if not (tn = '') and not (tn = root) then key := key + tn + '-';
|
||||
end;
|
||||
key := key + self.currentTagname;
|
||||
Add(key, Content);
|
||||
end;
|
||||
|
||||
end.
|
||||
340
Core/XFormMan.pas
Normal file
340
Core/XFormMan.pas
Normal file
@ -0,0 +1,340 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 XFormMan;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
BaseVariation, SysUtils, Forms, Windows;
|
||||
|
||||
const
|
||||
NRLOCVAR = 29;
|
||||
var
|
||||
NumBuiltinVars: integer;
|
||||
|
||||
type
|
||||
TFNToVN = record
|
||||
FileName: string;
|
||||
VarName: string;
|
||||
end;
|
||||
|
||||
function NrVar: integer;
|
||||
function Varnames(const index: integer): String;
|
||||
procedure RegisterVariation(Variation: TVariationLoader; supports3D, supportsDC : boolean);
|
||||
function GetNrRegisteredVariations: integer;
|
||||
function GetRegisteredVariation(const Index: integer): TVariationLoader;
|
||||
function GetNrVariableNames: integer;
|
||||
function GetVariableNameAt(const Index: integer): string;
|
||||
function GetVariationIndex(const str: string): integer;
|
||||
function GetVariationIndexFromVariableNameIndex(const Index: integer): integer;
|
||||
procedure VarSupports(index : integer; var supports3D : boolean; var supportsDC : boolean);
|
||||
procedure InitializeXFormMan;
|
||||
procedure DestroyXFormMan;
|
||||
procedure RegisterVariationFile(filename, name: string);
|
||||
function GetFileNameOfVariation(name: string): string;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
Classes;
|
||||
|
||||
var
|
||||
VariationList: TList;
|
||||
VariableNames: TStringlist;
|
||||
loaderNum : integer;
|
||||
Variable2VariationIndex : array of integer;
|
||||
FNToVNList : array of TFNToVN;
|
||||
FNToVNCount: integer;
|
||||
|
||||
procedure InitializeXFormMan;
|
||||
begin
|
||||
VariationList := TList.Create;
|
||||
VariableNames := TStringlist.create;
|
||||
SetLength(Variable2VariationIndex,0);
|
||||
SetLength(FNToVNList, 0);
|
||||
FNToVNCount := 0;
|
||||
end;
|
||||
|
||||
procedure VarSupports(index : integer; var supports3D : boolean; var supportsDC : boolean);
|
||||
const
|
||||
supports3D_arr: array[0..NRLOCVAR-1] of boolean = (
|
||||
true, //'linear',
|
||||
true, //'flatten',
|
||||
true, //'sinusoidal',
|
||||
true, //'spherical',
|
||||
true, //'swirl',
|
||||
true, //'horseshoe',
|
||||
true, //'polar',
|
||||
true, //'disc',
|
||||
true, //'spiral',
|
||||
true, //'hyperbolic',
|
||||
true, //'diamond',
|
||||
true, //'eyefish',
|
||||
true, //'bubble',
|
||||
true, //'cylinder',
|
||||
true, //'noise',
|
||||
true, //'blur',
|
||||
true, //'gaussian_blur',
|
||||
true, //'zblur',
|
||||
true, //'blur3D',
|
||||
true, //'pre_blur',
|
||||
true, //'pre_zscale',
|
||||
true, //'pre_ztranslate',
|
||||
true, //'pre_rotate_x',
|
||||
true, //'pre_rotate_y',
|
||||
true, //'zscale',
|
||||
true, //'ztranslate',
|
||||
true, //'zcone',
|
||||
true, //'post_rotate_x',
|
||||
true //'post_rotate_y',
|
||||
);
|
||||
supportsDC_arr: array[0..NRLOCVAR-1] of boolean = (
|
||||
false, //'linear3D',
|
||||
false, //'linear',
|
||||
false, //'sinusoidal',
|
||||
false, //'spherical',
|
||||
false, //'swirl',
|
||||
false, //'horseshoe',
|
||||
false, //'polar',
|
||||
// false, // 'handkerchief',
|
||||
// false, // 'heart',
|
||||
false, //'disc',
|
||||
false, //'spiral',
|
||||
false, //'hyperbolic',
|
||||
false, //'diamond',
|
||||
// false, // 'ex',
|
||||
// false, // 'julia',
|
||||
// false, // 'bent',
|
||||
// false, // 'waves',
|
||||
// false, // 'fisheye',
|
||||
// false, // 'popcorn',
|
||||
// false, // 'exponential',
|
||||
// false, // 'power',
|
||||
// false, // 'cosine',
|
||||
// false, // 'rings',
|
||||
// false, // 'fan',
|
||||
false, //'eyefish',
|
||||
false, //'bubble',
|
||||
false, //'cylinder',
|
||||
false, //'noise',
|
||||
false, //'blur',
|
||||
false, //'gaussian_blur',
|
||||
false, //'zblur',
|
||||
false, //'blur3D',
|
||||
|
||||
false, //'pre_blur',
|
||||
false, //'pre_zscale',
|
||||
false, //'pre_ztranslate',
|
||||
false, //'pre_rotate_x',
|
||||
false, //'pre_rotate_y',
|
||||
|
||||
false, //'zscale',
|
||||
false, //'ztranslate',
|
||||
false, //'zcone',
|
||||
|
||||
false, //'post_rotate_x',
|
||||
false //'post_rotate_y'
|
||||
);
|
||||
var
|
||||
varl : TVariationLoader;
|
||||
begin
|
||||
|
||||
if (index >= NRLOCVAR) then begin
|
||||
supports3D := TVariationLoader(VariationList.Items[index - NRLOCVAR]).supports3D;
|
||||
supportsDC := TVariationLoader(VariationList.Items[index - NRLOCVAR]).supportsDC;
|
||||
end else begin
|
||||
supports3D := supports3D_arr[index];
|
||||
supportsDC := supportsDC_arr[index];
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure DestroyXFormMan;
|
||||
var i: integer;
|
||||
begin
|
||||
VariableNames.Free;
|
||||
|
||||
// The registered variation loaders are owned here, so we must free them.
|
||||
for i := 0 to VariationList.Count-1 do
|
||||
TVariationLoader(VariationList[i]).Free;
|
||||
VariationList.Free;
|
||||
|
||||
Finalize(Variable2VariationIndex);
|
||||
Finalize(FNToVNList);
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function NrVar: integer;
|
||||
begin
|
||||
Result := NRLOCVAR + VariationList.Count;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
function GetVariationIndexFromVariableNameIndex(const Index: integer): integer;
|
||||
begin
|
||||
if (Index<0) or (Index > High(Variable2VariationIndex)) then
|
||||
Result := -1
|
||||
else
|
||||
Result := Variable2VariationIndex[Index];
|
||||
end;
|
||||
|
||||
function Varnames(const index: integer): String;
|
||||
const
|
||||
cvarnames: array[0..NRLOCVAR-1] of string = (
|
||||
'linear',
|
||||
'flatten',
|
||||
'sinusoidal',
|
||||
'spherical',
|
||||
'swirl',
|
||||
'horseshoe',
|
||||
'polar',
|
||||
// 'handkerchief',
|
||||
// 'heart',
|
||||
'disc',
|
||||
'spiral',
|
||||
'hyperbolic',
|
||||
'diamond',
|
||||
// 'ex',
|
||||
// 'julia',
|
||||
// 'bent',
|
||||
// 'waves',
|
||||
// 'fisheye',
|
||||
// 'popcorn',
|
||||
// 'exponential',
|
||||
// 'power',
|
||||
// 'cosine',
|
||||
// 'rings',
|
||||
// 'fan',
|
||||
'eyefish',
|
||||
'bubble',
|
||||
'cylinder',
|
||||
'noise',
|
||||
'blur',
|
||||
'gaussian_blur',
|
||||
'zblur',
|
||||
'blur3D',
|
||||
|
||||
'pre_blur',
|
||||
'pre_zscale',
|
||||
'pre_ztranslate',
|
||||
'pre_rotate_x',
|
||||
'pre_rotate_y',
|
||||
|
||||
'zscale',
|
||||
'ztranslate',
|
||||
'zcone',
|
||||
|
||||
'post_rotate_x',
|
||||
'post_rotate_y'
|
||||
);
|
||||
begin
|
||||
if Index < NRLOCVAR then
|
||||
Result := cvarnames[Index]
|
||||
else
|
||||
Result := TVariationLoader(VariationList[Index - NRLOCVAR]).GetName;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function GetVariationIndex(const str: string): integer;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
i := NRVAR-1;
|
||||
while (i >= 0) and (Varnames(i) <> str) do Dec(i);
|
||||
Result := i;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
procedure RegisterVariationFile(filename, name: string);
|
||||
begin
|
||||
FNToVNCount := FNToVNCount + 1;
|
||||
SetLength(FNToVNList, FNToVNCount);
|
||||
FNToVNList[FNToVNCount - 1].FileName := filename;
|
||||
FNToVNList[FNToVNCount - 1].VarName := name;
|
||||
end;
|
||||
function GetFileNameOfVariation(name: string): string;
|
||||
var i: integer;
|
||||
begin
|
||||
for i := 0 to FNToVNCount - 1 do begin
|
||||
if FNToVNList[i].VarName = name then begin
|
||||
Result := FNToVNList[i].FileName;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
Result := '';
|
||||
end;
|
||||
|
||||
procedure RegisterVariation(Variation: TVariationLoader; supports3D, supportsDC : boolean);
|
||||
var
|
||||
i: integer;
|
||||
prevNumVariables:integer;
|
||||
begin
|
||||
OutputDebugString(PChar(Variation.GetName));
|
||||
|
||||
VariationList.Add(Variation);
|
||||
Variation.Supports3D := supports3D;
|
||||
Variation.SupportsDC := supportsDC;
|
||||
|
||||
prevNumVariables := GetNrVariableNames;
|
||||
setLength(Variable2VariationIndex, prevNumVariables + Variation.GetNrVariables);
|
||||
for i := 0 to Variation.GetNrVariables - 1 do begin
|
||||
VariableNames.Add(Variation.GetVariableNameAt(i));
|
||||
Variable2VariationIndex[prevNumVariables + i] := NrVar-1;
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function GetNrRegisteredVariations: integer;
|
||||
begin
|
||||
Result := VariationList.count;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function GetRegisteredVariation(const Index: integer): TVariationLoader;
|
||||
begin
|
||||
Result := TVariationLoader(VariationList[Index]);
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function GetNrVariableNames: integer;
|
||||
begin
|
||||
Result := VariableNames.Count;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function GetVariableNameAt(const Index: integer): string;
|
||||
begin
|
||||
Result := VariableNames[Index];
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
initialization
|
||||
InitializeXFormMan;
|
||||
|
||||
finalization
|
||||
DestroyXFormMan;
|
||||
|
||||
end.
|
||||
2833
Flame/ControlPoint.pas
Normal file
2833
Flame/ControlPoint.pas
Normal file
File diff suppressed because it is too large
Load Diff
589
Flame/RndFlame.pas
Normal file
589
Flame/RndFlame.pas
Normal file
@ -0,0 +1,589 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 RndFlame;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
ControlPoint, Xform;
|
||||
|
||||
function RandomFlame(SourceCP: TControlPoint= nil; algorithm: integer = 0): TControlPoint;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
SysUtils, Global, cmap, GradientHlpr, XFormMan, Classes;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure RGBBlend(a, b: integer; var Palette: TColorMap);
|
||||
{ Linear blend between to indices of a palette }
|
||||
var
|
||||
c, v: real;
|
||||
vrange, range: real;
|
||||
i: integer;
|
||||
begin
|
||||
if a = b then
|
||||
begin
|
||||
Exit;
|
||||
end;
|
||||
range := b - a;
|
||||
vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
|
||||
c := Palette[a mod 256][0];
|
||||
v := vrange / range;
|
||||
for i := (a + 1) to (b - 1) do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][0] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
|
||||
c := Palette[a mod 256][1];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][1] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
|
||||
c := Palette[a mod 256][2];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][2] := Round(c);
|
||||
end;
|
||||
end;
|
||||
|
||||
function CreatePalette(strng: string): TColorMap;
|
||||
{ Loads a palette from a gradient string }
|
||||
var
|
||||
Strings: TStringList;
|
||||
index, i: integer;
|
||||
Tokens: TStringList;
|
||||
Indices, Colors: TStringList;
|
||||
a, b: integer;
|
||||
begin
|
||||
Strings := TStringList.Create;
|
||||
Tokens := TStringList.Create;
|
||||
Indices := TStringList.Create;
|
||||
Colors := TStringList.Create;
|
||||
try
|
||||
try
|
||||
Strings.Text := strng;
|
||||
if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
|
||||
if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
|
||||
GetTokens(ReplaceTabs(strings.text), tokens);
|
||||
Tokens.Text := Trim(Tokens.text);
|
||||
i := 0;
|
||||
while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
|
||||
begin
|
||||
if Pos('index=', LowerCase(Tokens[i])) <> 0 then
|
||||
Indices.Add(GetVal(Tokens[i]))
|
||||
else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
|
||||
Colors.Add(GetVal(Tokens[i]));
|
||||
inc(i)
|
||||
end;
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
Result[i][0] := 0;
|
||||
Result[i][1] := 0;
|
||||
Result[i][2] := 0;
|
||||
end;
|
||||
if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
|
||||
for i := 0 to Indices.Count - 1 do
|
||||
begin
|
||||
try
|
||||
index := StrToInt(Indices[i]);
|
||||
while index < 0 do inc(index, 400);
|
||||
index := Round(Index * (255 / 399));
|
||||
indices[i] := IntToStr(index);
|
||||
assert(index>=0);
|
||||
assert(index<256);
|
||||
Result[index][0] := StrToInt(Colors[i]) mod 256;
|
||||
Result[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
|
||||
Result[index][2] := trunc(StrToInt(Colors[i]) / 65536);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
i := 1;
|
||||
repeat
|
||||
a := StrToInt(Trim(Indices[i - 1]));
|
||||
b := StrToInt(Trim(Indices[i]));
|
||||
RGBBlend(a, b, Result);
|
||||
inc(i);
|
||||
until i = Indices.Count;
|
||||
if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
|
||||
begin
|
||||
a := StrToInt(Trim(Indices[Indices.Count - 1]));
|
||||
b := StrToInt(Trim(Indices[0])) + 256;
|
||||
RGBBlend(a, b, Result);
|
||||
end;
|
||||
except on EFormatInvalid do
|
||||
begin
|
||||
// Result := False;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Tokens.Free;
|
||||
Strings.Free;
|
||||
Indices.Free;
|
||||
Colors.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure GetGradientFileGradientsNames(const filename: string; var NamesList: TStringList);
|
||||
var
|
||||
i, p: integer;
|
||||
Title: string;
|
||||
FStrings: TStringList;
|
||||
begin
|
||||
FStrings := TStringList.Create;
|
||||
FStrings.LoadFromFile(filename);
|
||||
try
|
||||
if (Pos('{', FStrings.Text) <> 0) then
|
||||
begin
|
||||
for i := 0 to FStrings.Count - 1 do
|
||||
begin
|
||||
p := Pos('{', FStrings[i]);
|
||||
if (p <> 0) and (Pos('(3D)', FStrings[i]) = 0) then
|
||||
begin
|
||||
Title := Trim(Copy(FStrings[i], 1, p - 1));
|
||||
if Title <> '' then
|
||||
NamesList.Add(Trim(Copy(FStrings[i], 1, p - 1)));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
FStrings.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure RandomGradient(SourceCP, DestCP: TControlPoint);
|
||||
var
|
||||
tmpGrad: string;
|
||||
tmpGrdList: TStringList;
|
||||
begin
|
||||
case randGradient of
|
||||
0:
|
||||
begin
|
||||
cmap_index := Random(NRCMAPS);
|
||||
GetCMap(cmap_index, 1, DestCP.cmap);
|
||||
// cmap_index := DestCP.cmapindex;
|
||||
DestCP.cmapIndex := cmap_index;
|
||||
end;
|
||||
1:
|
||||
begin
|
||||
DestCP.cmap := DefaultPalette;
|
||||
DestCP.cmapIndex := cmap_index;
|
||||
end;
|
||||
2:
|
||||
if assigned(SourceCP) then begin
|
||||
DestCP.cmap := SourceCP.cmap;
|
||||
DestCP.cmapIndex := SourceCP.cmapIndex;
|
||||
end else begin
|
||||
cmap_index := Random(NRCMAPS);
|
||||
GetCMap(cmap_index, 1, DestCP.cmap);
|
||||
DestCP.cmapIndex := cmap_index;
|
||||
end;
|
||||
3:
|
||||
DestCP.cmap := GradientHelper.RandomGradient;
|
||||
4:
|
||||
if FileExists(randGradientFile) then
|
||||
begin
|
||||
tmpGrdList := TStringList.Create;
|
||||
GetGradientFileGradientsNames(randGradientFile, tmpGrdList);
|
||||
tmpGrad := GetGradient(randGradientFile, tmpGrdList.Strings[random(tmpGrdList.Count)]);
|
||||
DestCP.cmap := CreatePalette(tmpGrad);
|
||||
tmpGrdList.Free;
|
||||
end else
|
||||
begin
|
||||
cmap_index := Random(NRCMAPS);
|
||||
GetCMap(cmap_index, 1, DestCP.cmap);
|
||||
DestCP.cmapIndex := cmap_index;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure RandomVariation(cp: TControlPoint);
|
||||
{ Randomise variation parameters }
|
||||
var
|
||||
a, b, i, j: integer;
|
||||
VarPossible: boolean;
|
||||
begin
|
||||
inc(MainSeed);
|
||||
RandSeed := MainSeed;
|
||||
|
||||
VarPossible := false;
|
||||
for j := 0 to NRVAR - 1 do begin
|
||||
VarPossible := VarPossible or Variations[j];
|
||||
end;
|
||||
|
||||
for i := 0 to cp.NumXForms - 1 do begin
|
||||
for j := 0 to NRVAR - 1 do
|
||||
cp.xform[i].SetVariation(j, 0);
|
||||
|
||||
if VarPossible then begin
|
||||
repeat
|
||||
a := random(NRVAR);
|
||||
until Variations[a];
|
||||
|
||||
repeat
|
||||
b := random(NRVAR);
|
||||
until Variations[b];
|
||||
end else begin
|
||||
a := 0;
|
||||
b := 0;
|
||||
end;
|
||||
|
||||
if (a = b) then begin
|
||||
cp.xform[i].SetVariation(a, 1);
|
||||
end else begin
|
||||
cp.xform[i].SetVariation(a, random);
|
||||
cp.xform[i].SetVariation(b, 1 - cp.xform[i].GetVariation(a));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure SetVariation(cp: TControlPoint);
|
||||
{ Set the current Variation }
|
||||
var
|
||||
i, j: integer;
|
||||
begin
|
||||
if Variation = vRandom then begin
|
||||
RandomVariation(cp);
|
||||
end else
|
||||
for i := 0 to cp.NumXForms - 1 do begin
|
||||
for j := 0 to NRVAR - 1 do
|
||||
cp.xform[i].SetVariation(j, 0);
|
||||
cp.xform[i].SetVariation(integer(Variation), 1);
|
||||
end;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
(* --Z-- hmm, exactly the same function exists in module Main
|
||||
|
||||
function TrianglesFromCP(const cp1: TControlPoint; var Triangles: TTriangles): integer;
|
||||
{ Sets up the triangles from the IFS code }
|
||||
var
|
||||
xforms: integer;
|
||||
i, j: integer;
|
||||
temp_x, temp_y, xset, yset: double;
|
||||
left, top, bottom, right: double;
|
||||
a, b, c, d, e, f: double;
|
||||
begin
|
||||
top := 0; bottom := 0; right := 0; left := 0;
|
||||
xforms := NumXForms(cp1);
|
||||
Result := xforms;
|
||||
if not FixedReference then
|
||||
begin
|
||||
for i := 0 to xforms - 1 do
|
||||
begin
|
||||
a := cp1.xform[i].c[0][0];
|
||||
b := cp1.xform[i].c[0][1];
|
||||
c := cp1.xform[i].c[1][0];
|
||||
d := cp1.xform[i].c[1][1];
|
||||
e := cp1.xform[i].c[2][0];
|
||||
f := cp1.xform[i].c[2][1];
|
||||
xset := 1.0;
|
||||
yset := 1.0;
|
||||
for j := 0 to 5 do
|
||||
begin
|
||||
temp_x := xset * a + yset * c + e;
|
||||
temp_y := xset * b + yset * d + f;
|
||||
xset := temp_x;
|
||||
yset := temp_y;
|
||||
end;
|
||||
if (i = 0) then
|
||||
begin
|
||||
left := xset;
|
||||
right := xset;
|
||||
top := yset;
|
||||
bottom := yset;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if (xset < left) then left := xset;
|
||||
if (xset > right) then right := xset;
|
||||
if (yset < top) then top := yset;
|
||||
if (yset > bottom) then bottom := yset;
|
||||
end;
|
||||
end;
|
||||
Triangles[-1].x[0] := left;
|
||||
Triangles[-1].x[1] := right;
|
||||
Triangles[-1].x[2] := right;
|
||||
Triangles[-1].y[0] := bottom;
|
||||
Triangles[-1].y[1] := bottom;
|
||||
Triangles[-1].y[2] := top;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Triangles[-1].x[0] := 0; Triangles[-1].y[0] := 0;
|
||||
Triangles[-1].x[1] := 1; Triangles[-1].y[1] := 0;
|
||||
Triangles[-1].x[2] := 1; Triangles[-1].y[2] := 1.5;
|
||||
end;
|
||||
|
||||
for j := 0 to xforms - 1 do
|
||||
begin
|
||||
a := cp1.xform[j].c[0][0];
|
||||
b := cp1.xform[j].c[0][1];
|
||||
c := cp1.xform[j].c[1][0];
|
||||
d := cp1.xform[j].c[1][1];
|
||||
e := cp1.xform[j].c[2][0];
|
||||
f := cp1.xform[j].c[2][1];
|
||||
for i := 0 to 2 do
|
||||
begin
|
||||
triangles[j].x[i] := Triangles[-1].x[i] * a + Triangles[-1].y[i] *
|
||||
c + e;
|
||||
triangles[j].y[i] := Triangles[-1].x[i] * b + Triangles[-1].y[i] *
|
||||
d + f;
|
||||
end;
|
||||
end;
|
||||
for i := -1 to xforms - 1 do
|
||||
for j := 0 to 2 do
|
||||
triangles[i].y[j] := -triangles[i].y[j];
|
||||
end;
|
||||
*)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure EqualizeWeights(var cp: TControlPoint);
|
||||
var
|
||||
t, i: integer;
|
||||
begin
|
||||
t := cp.NumXForms;
|
||||
for i := 0 to t - 1 do
|
||||
cp.xform[i].density := 1.0 / t;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure NormalizeWeights(var cp: TControlPoint);
|
||||
var
|
||||
i: integer;
|
||||
td: double;
|
||||
begin
|
||||
td := 0.0;
|
||||
for i := 0 to cp.NumXForms - 1 do
|
||||
td := td + cp.xform[i].Density;
|
||||
if (td < 0.001) then
|
||||
EqualizeWeights(cp)
|
||||
else
|
||||
for i := 0 to cp.NumXForms - 1 do
|
||||
cp.xform[i].Density := cp.xform[i].Density / td;
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure ComputeWeights(var cp1: TControlPoint; Triangles: TTriangles; t: integer);
|
||||
{ Caclulates transform weight from triangles }
|
||||
var
|
||||
i: integer;
|
||||
total_area: double;
|
||||
begin
|
||||
total_area := 0.0;
|
||||
for i := 0 to t - 1 do
|
||||
begin
|
||||
cp1.xform[i].Density := triangle_area(Triangles[i]);
|
||||
total_area := total_area + cp1.xform[i].Density;
|
||||
end;
|
||||
for i := 0 to t - 1 do
|
||||
begin
|
||||
cp1.xform[i].Density := cp1.xform[i].Density / total_area;
|
||||
end;
|
||||
NormalizeWeights(cp1);
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure RandomWeights(var cp1: TControlPoint);
|
||||
{ Randomizes xform weights }
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 0 to Transforms - 1 do
|
||||
cp1.xform[i].Density := random;
|
||||
NormalizeWeights(cp1);
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
function RandomFlame(SourceCP: TControlPoint; algorithm: integer): TControlPoint;
|
||||
var
|
||||
Min, Max, i, j, rnd: integer;
|
||||
Triangles: TTriangles;
|
||||
r, s, theta, phi: double;
|
||||
skip: boolean;
|
||||
begin
|
||||
if Assigned(SourceCP) then
|
||||
Result := SourceCP.clone
|
||||
else
|
||||
Result := TControlPoint.Create;
|
||||
|
||||
Min := randMinTransforms;
|
||||
Max := randMaxTransforms;
|
||||
|
||||
inc(MainSeed);
|
||||
RandSeed := MainSeed;
|
||||
transforms := random(Max - (Min - 1)) + Min;
|
||||
repeat
|
||||
try
|
||||
inc(MainSeed);
|
||||
RandSeed := MainSeed;
|
||||
Result.clear;
|
||||
Result.RandomCP(transforms, transforms, false);
|
||||
Result.SetVariation(Variation);
|
||||
inc(MainSeed);
|
||||
RandSeed := MainSeed;
|
||||
|
||||
case algorithm of
|
||||
1: rnd := 0;
|
||||
2: rnd := 7;
|
||||
3: rnd := 9;
|
||||
else
|
||||
if (Variation = vLinear) or (Variation = vRandom) then
|
||||
rnd := random(10)
|
||||
else
|
||||
rnd := 9;
|
||||
end;
|
||||
case rnd of
|
||||
0..6:
|
||||
begin
|
||||
for i := 0 to Transforms - 1 do
|
||||
begin
|
||||
if Random(10) < 9 then
|
||||
Result.xform[i].c[0, 0] := 1
|
||||
else
|
||||
Result.xform[i].c[0, 0] := -1;
|
||||
Result.xform[i].c[0, 1] := 0;
|
||||
Result.xform[i].c[1, 0] := 0;
|
||||
Result.xform[i].c[1, 1] := 1;
|
||||
Result.xform[i].c[2, 0] := 0;
|
||||
Result.xform[i].c[2, 1] := 0;
|
||||
Result.xform[i].color := 0;
|
||||
Result.xform[i].symmetry := 0;
|
||||
Result.xform[i].SetVariation(0, 1);
|
||||
for j := 1 to NRVAR - 1 do
|
||||
Result.xform[i].SetVariation(j, 0);
|
||||
Result.xform[i].Translate(random * 2 - 1, random * 2 - 1);
|
||||
Result.xform[i].Rotate(random * 360);
|
||||
if i > 0 then
|
||||
Result.xform[i].Scale(random * 0.8 + 0.2)
|
||||
else
|
||||
Result.xform[i].Scale(random * 0.4 + 0.6);
|
||||
if Random(2) = 0 then
|
||||
Result.xform[i].Multiply(1, random - 0.5, random - 0.5, 1);
|
||||
end;
|
||||
SetVariation(Result);
|
||||
end;
|
||||
7, 8:
|
||||
begin
|
||||
{ From the source to Chaos: The Software }
|
||||
for i := 0 to Transforms - 1 do begin
|
||||
r := random * 2 - 1;
|
||||
if ((0 <= r) and (r < 0.2)) then
|
||||
r := r + 0.2;
|
||||
if ((r > -0.2) and (r <= 0)) then
|
||||
r := r - 0.2;
|
||||
s := random * 2 - 1;
|
||||
if ((0 <= s) and (s < 0.2)) then
|
||||
s := s + 0.2;
|
||||
if ((s > -0.2) and (s <= 0)) then
|
||||
s := s - -0.2;
|
||||
theta := PI * random;
|
||||
phi := (2 + random) * PI / 4;
|
||||
Result.xform[i].c[0][0] := r * cos(theta);
|
||||
Result.xform[i].c[1][0] := s * (cos(theta) * cos(phi) - sin(theta));
|
||||
Result.xform[i].c[0][1] := r * sin(theta);
|
||||
Result.xform[i].c[1][1] := s * (sin(theta) * cos(phi) + cos(theta));
|
||||
{ the next bit didn't translate so well, so I fudge it}
|
||||
Result.xform[i].c[2][0] := random * 2 - 1;
|
||||
Result.xform[i].c[2][1] := random * 2 - 1;
|
||||
end;
|
||||
for i := 0 to NXFORMS-1 do //NXFORMS - 1 do
|
||||
Result.xform[i].density := 0;
|
||||
for i := 0 to Transforms - 1 do
|
||||
Result.xform[i].density := 1 / Transforms;
|
||||
SetVariation(Result);
|
||||
end;
|
||||
9: begin
|
||||
for i := 0 to NXFORMS-1 do //NXFORMS - 1 do
|
||||
Result.xform[i].density := 0;
|
||||
for i := 0 to Transforms - 1 do
|
||||
Result.xform[i].density := 1 / Transforms;
|
||||
end;
|
||||
end; // case
|
||||
Result.TrianglesFromCp(Triangles);
|
||||
if Random(2) > 0 then
|
||||
ComputeWeights(Result, Triangles, transforms)
|
||||
else
|
||||
EqualizeWeights(Result);
|
||||
except on E: EmathError do
|
||||
begin
|
||||
Continue;
|
||||
end;
|
||||
end;
|
||||
for i := 0 to Transforms - 1 do
|
||||
Result.xform[i].color := i / (transforms - 1);
|
||||
if Result.xform[0].density = 1 then
|
||||
Continue;
|
||||
case SymmetryType of
|
||||
{ Bilateral }
|
||||
1: add_symmetry_to_control_point(Result, -1);
|
||||
{ Rotational }
|
||||
2: add_symmetry_to_control_point(Result, SymmetryOrder);
|
||||
{ Rotational and Reflective }
|
||||
3: add_symmetry_to_control_point(Result, -SymmetryOrder);
|
||||
end;
|
||||
{ elimate flames with transforms that aren't affine }
|
||||
skip := false;
|
||||
for i := 0 to Transforms - 1 do begin
|
||||
if not transform_affine(Triangles[i], Triangles) then
|
||||
skip := True;
|
||||
end;
|
||||
if skip then
|
||||
continue;
|
||||
until not Result.BlowsUP(5000) and (Result.xform[0].density <> 0);
|
||||
|
||||
RandomGradient(SourceCP, Result);
|
||||
|
||||
Result.brightness := defBrightness;
|
||||
Result.gamma := defGamma;
|
||||
Result.gamma_threshold := defGammaThreshold;
|
||||
Result.vibrancy := defVibrancy;
|
||||
Result.sample_density := defSampleDensity;
|
||||
Result.spatial_oversample := defOversample;
|
||||
Result.spatial_filter_radius := defFilterRadius;
|
||||
if KeepBackground and assigned(SourceCP) then begin
|
||||
Result.background[0] := SourceCP.background[0];
|
||||
Result.background[1] := SourceCP.background[1];
|
||||
Result.background[2] := SourceCP.background[2];
|
||||
end else begin
|
||||
Result.background[0] := 0;
|
||||
Result.background[1] := 0;
|
||||
Result.background[2] := 0;
|
||||
end;
|
||||
Result.zoom := 0;
|
||||
Result.Nick := SheepNick;
|
||||
Result.URl := SheepURL;
|
||||
|
||||
Result.xform[Result.NumXForms].Clear;
|
||||
Result.xform[Result.NumXForms].symmetry := 1;
|
||||
end;
|
||||
|
||||
end.
|
||||
1525
Flame/XForm.pas
Normal file
1525
Flame/XForm.pas
Normal file
File diff suppressed because it is too large
Load Diff
1756
Forms/About.dfm
Normal file
1756
Forms/About.dfm
Normal file
File diff suppressed because it is too large
Load Diff
113
Forms/About.pas
Normal file
113
Forms/About.pas
Normal file
@ -0,0 +1,113 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 About;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||
StdCtrls, ExtCtrls, Global, Translation;
|
||||
|
||||
type
|
||||
TAboutForm = class(TForm)
|
||||
btnOK: TButton;
|
||||
Label3: TLabel;
|
||||
Label4: TLabel;
|
||||
Label10: TLabel;
|
||||
Label11: TLabel;
|
||||
lblFlamecom: TLabel;
|
||||
Bevel1: TBevel;
|
||||
Label7: TLabel;
|
||||
Label8: TLabel;
|
||||
Label9: TLabel;
|
||||
Label12: TLabel;
|
||||
Label13: TLabel;
|
||||
Label14: TLabel;
|
||||
Bevel3: TBevel;
|
||||
Label17: TLabel;
|
||||
Label16: TLabel;
|
||||
Label2: TLabel;
|
||||
Bevel2: TBevel;
|
||||
Label19: TLabel;
|
||||
Label5: TLabel;
|
||||
Image1: TImage;
|
||||
procedure btnOKClick(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure lblCreditClick(Sender: TObject);
|
||||
procedure DevelopersClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
URL :String;
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
AboutForm: TAboutForm;
|
||||
|
||||
implementation
|
||||
|
||||
uses Main, ShellAPI;
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
procedure TAboutForm.btnOKClick(Sender: TObject);
|
||||
begin
|
||||
ModalResult := mrOK;
|
||||
end;
|
||||
|
||||
procedure TAboutForm.FormShow(Sender: TObject);
|
||||
begin
|
||||
//lblCredit.Caption := MainCp.Nick;
|
||||
//URL := MainCp.URL;
|
||||
//if URL <> '' then lblCredit.Font.color := clBlue else lblCredit.Font.color := clBlack;
|
||||
end;
|
||||
|
||||
procedure TAboutForm.lblCreditClick(Sender: TObject);
|
||||
begin
|
||||
if URL <> '' then
|
||||
ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(URL),
|
||||
nil, nil, SW_SHOWNORMAL);
|
||||
end;
|
||||
|
||||
procedure TAboutForm.DevelopersClick(Sender: TObject);
|
||||
begin
|
||||
ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(TLabel(Sender).Hint),
|
||||
nil, nil, SW_SHOWNORMAL);
|
||||
end;
|
||||
|
||||
procedure TAboutForm.FormCreate(Sender: TObject);
|
||||
var s1, s2, s3:string;
|
||||
begin
|
||||
btnOK.Caption := TextByKey('common-close');
|
||||
if (LanguageFile <> AvailableLanguages.Strings[0]) and (LanguageFile <> '') then
|
||||
begin
|
||||
LanguageInfo(LanguageFile, s1, s2);
|
||||
s3 := LanguageAuthor(LanguageFile);
|
||||
Label5.Visible := (s1 <> '') and (s3 <> '');
|
||||
Label5.Caption := s1 + ' translation contributed by: ' + s3;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
1765
Forms/Adjust.dfm
Normal file
1765
Forms/Adjust.dfm
Normal file
File diff suppressed because it is too large
Load Diff
2733
Forms/Adjust.pas
Normal file
2733
Forms/Adjust.pas
Normal file
File diff suppressed because it is too large
Load Diff
872
Forms/Browser.dfm
Normal file
872
Forms/Browser.dfm
Normal file
@ -0,0 +1,872 @@
|
||||
object GradientBrowser: TGradientBrowser
|
||||
Left = 494
|
||||
Top = 299
|
||||
Width = 544
|
||||
Height = 335
|
||||
BorderIcons = [biSystemMenu, biMinimize]
|
||||
Caption = 'Gradient Browser'
|
||||
Color = clBtnFace
|
||||
Constraints.MinHeight = 120
|
||||
Constraints.MinWidth = 380
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
Icon.Data = {
|
||||
0000010001001010000001002000680400001600000028000000100000002000
|
||||
0000010020000000000040040000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000045C6F00100000000000000002DA5D654247EACE51F89B8FD1F7D
|
||||
A8FC2385AFFA209DD2A01DA9DF53000000000000000000000000000000000000
|
||||
00000000000000000000000000003AB6E247228CC1F143C2EAFF48C3E7FF4EC9
|
||||
ECFF44C1E2F538A3C7FB1A7CABF9199BD1830000000000000000000000000000
|
||||
000063D2F201000000000000000020B5E9FF34B0DBCE59D2F0FF5CD4F0FF5CD7
|
||||
F2FF5AD6F2FD51CFECFB37AED7F4187BA9FD1A94C98F00000000000000000000
|
||||
000070D8F302000000000000000022B3E7FE1C97C9E751CAE9FF5FD7F2FF0AB3
|
||||
67FF006F00FF008825FF53D1EEFA2E9FCCEE187DACFE0B87BD020000000082DF
|
||||
F4027CDCF40700000000000000006AD4F36C1181B2FD52CAE8FE62DAF3FF23D9
|
||||
71FF00912BFF006000FF62D9F3FF49C3E5EF1280B0FE1B9BCE73000000000000
|
||||
000089E2F42084DFF4421D99C2FD37A4C9FF46C2EBFF65D4F0FB66DAF3FE3EDB
|
||||
8CFF00BA50FF00AB67FF63D9F3FF51CBEBF41E8BB9F81D95C8A7000000000000
|
||||
000076DCF4693BB4DCF78BE2F4B59AE7F7E895E6F6FE95E8F6FE8CE3F5FF85E3
|
||||
F4FF70DEF4FF68DCF4FF6ADBF4FF5CD4EFF4208BB9F72297C9AB000000000000
|
||||
000054CBF3F98EE3F5CFB6F1F8FFB6F1F8FF9EEAF6FE93E9F6FF94E8F6FFB359
|
||||
23FFB30F00FFAB2B00FF73DEF4FB63D7EFEE1D84B4F8279DCE94000000000000
|
||||
000070D4F5FFA4EDF6E6B6F1F8FF2959F3FF00007AFF001FDBFF93E9F6FFB08C
|
||||
64FFB03A00FF610000FF73DEF4F45CC3E3DE2781AEEF64D3F23E000000000000
|
||||
000070D4F5FFACF0F7EBB6F1F8FF5490FFFF0022D9FF000058FFB2F0F8FFB4B6
|
||||
97FFB38D64FFB6AB8CFF78D3ECE8359AC9EC51B6DB8F00000000000000000000
|
||||
00007AD8F5F89EEAF6E6B6F1F8FF6DAFFFFF5590FFFF6DB0FFFFB6F1F8FFA5EC
|
||||
F7FEA7ECF7FE98E7F5F14DB0D9F55DBBDDAB84DFF44000000000000000000000
|
||||
0000A9EFF7786BD4F4FB9DEAF6EEAFF1F7F4B6F1F8FFB6F1F8FFB6F1F8FFA6EE
|
||||
F6F9A0EAF6EF70D2EDE354C6EDF895E7F5580000000000000000000000000000
|
||||
000000000000AAEFF78F5ACFF3F998E8F6E0B6F1F8FFB6F1F8FFB6F1F8FF92E7
|
||||
F6E46CD4F4FA65D2F4E984D4E874000000000000000000000000000000000000
|
||||
00000000000000000000A9EFF7737CD9F6F476D6F5FA72D4F5FD75D6F5FB5ECF
|
||||
F4F190E6F5930000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000000000000000000000000000FFFF
|
||||
0000D80F0000F0070000B0030000B00100003001000080010000800100008001
|
||||
000080010000800300008003000080070000C00F0000E03F0000FFFF0000}
|
||||
OldCreateOrder = False
|
||||
OnClose = FormClose
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnResize = FormResize
|
||||
OnShow = FormShow
|
||||
DesignSize = (
|
||||
536
|
||||
306)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnDefGradient: TSpeedButton
|
||||
Left = 411
|
||||
Top = 7
|
||||
Width = 23
|
||||
Height = 21
|
||||
Hint = 'Open...'
|
||||
Anchors = [akTop, akRight]
|
||||
Flat = True
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -12
|
||||
Font.Name = 'Arial'
|
||||
Font.Style = [fsBold]
|
||||
Glyph.Data = {
|
||||
36030000424D3603000000000000360000002800000010000000100000000100
|
||||
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
|
||||
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
|
||||
607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
|
||||
18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
|
||||
88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
|
||||
8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
|
||||
805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
|
||||
C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
|
||||
7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
|
||||
EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
|
||||
D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
|
||||
98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
|
||||
FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
|
||||
A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
|
||||
A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
|
||||
93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
|
||||
9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
|
||||
ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
|
||||
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
OnClick = btnDefGradientClick
|
||||
end
|
||||
object ListView: TListView
|
||||
Left = 7
|
||||
Top = 7
|
||||
Width = 398
|
||||
Height = 234
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
Columns = <
|
||||
item
|
||||
Caption = 'Title'
|
||||
Width = 150
|
||||
end>
|
||||
HideSelection = False
|
||||
LargeImages = LargeImages
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ParentShowHint = False
|
||||
PopupMenu = PopupMenu
|
||||
ShowHint = True
|
||||
SmallImages = SmallImages
|
||||
SortType = stText
|
||||
TabOrder = 1
|
||||
ViewStyle = vsList
|
||||
OnChange = ListViewChange
|
||||
OnDblClick = SpeedButton1Click
|
||||
OnEdited = ListViewEdited
|
||||
OnInfoTip = ListViewInfoTip
|
||||
OnKeyPress = ListViewKeyPress
|
||||
end
|
||||
object pnlMain: TPanel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 536
|
||||
Height = 4
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 0
|
||||
end
|
||||
object pnlPreview: TPanel
|
||||
Left = 0
|
||||
Top = 268
|
||||
Width = 487
|
||||
Height = 25
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
BevelOuter = bvLowered
|
||||
TabOrder = 2
|
||||
object Image: TImage
|
||||
Left = 1
|
||||
Top = 1
|
||||
Width = 485
|
||||
Height = 23
|
||||
Align = alClient
|
||||
Stretch = True
|
||||
end
|
||||
end
|
||||
object SmallImages: TImageList
|
||||
Left = 8
|
||||
Top = 16
|
||||
Bitmap = {
|
||||
494C010101000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
|
||||
0000000000003600000028000000400000001000000001002000000000000010
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00808080008080
|
||||
8000808080008080800080808000FFFFFF000000000000808000008080000080
|
||||
8000000000007F7F7F0000000000000000007F7F7F0000000000000000007F7F
|
||||
7F000000000000000000BBCCD500BBCCD5000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00000000007F7F
|
||||
7F0000000000000000007F7F7F00000000000080800000808000000000000000
|
||||
0000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFF5F000FFF1
|
||||
E900FFEFE600FFEFE600FFF0E700FFF1E800FFF1E900FFF3EB00FFF3EC00FFF4
|
||||
ED00FFF6F0000000000000000000000000000000000000808000008080000080
|
||||
8000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFF4ED00FFEE
|
||||
E400FFEBDF00FFEBDF00FFEBE000FFECE200FFEDE200FFEEE400FFEFE500FFEF
|
||||
E600FFF1EA00000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFF1E900CD52
|
||||
0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
|
||||
0800FFEDE300000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00000000007F7F
|
||||
7F000000000000000000BBCCD500BBCCD5000000000000000000FFEFE600CD52
|
||||
0800E2651800EB7A3700FFA77200FFD1B200FFF7ED00C2E9FF0042ADF700CD52
|
||||
0800FFE9DC00000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFEDE200CD52
|
||||
0800E1651900E9783500FFA77000FFD1B200FFF7EC00C2E9FF0040ADF700CD52
|
||||
0800FFE5D6000000000000000000000000000000000000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000688DA200688D
|
||||
A200688DA200688DA200688DA200688DA200FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFEBDF00CD52
|
||||
0800E1651800EB783600FFA77000FFD1B200FFF7EC00C2E9FF0042ADF700CD52
|
||||
0800FFE1D000000000000000000000000000FFF1EA0000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
|
||||
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFF5F000FFF1E900FFEFE600FFEFE600FFF0E700FFF1
|
||||
E800FFF1E900FFF3EB00FFF3EC00FFF4ED00FFF6F00000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000FFE9DB00CD52
|
||||
0800E1651900EC793500FFA77000FFD0B200FFF7EC00C2E9FF0040AEF700CD52
|
||||
0800FFDFCD00000000000000000000000000FFE9DC0000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFF1E900CD520800CD520800CD520800CD520800CD52
|
||||
0800CD520800CD520800CD520800CD520800FFEDE30000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00688DA200688DA200688D
|
||||
A200688DA200688DA200688DA200688DA2000000000000000000FFE7D800CD52
|
||||
0800E1651900EB793500FFA57000FFD1B200FFF7EC00C2E9FF0040ADF700CD52
|
||||
0800FFE1D000000000000000000000000000FFE1D00000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00688D
|
||||
A200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFEDE200CD520800E1651900E9783500FFA77000FFD1
|
||||
B200FFF7EC00C2E9FF0040ADF700CD520800FFE5D60000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00BBCCD500000000000000
|
||||
0000000000000000000000000000000000000000000000000000FFE4D500CD52
|
||||
0800E3651A00EB7A3900FFA87400FFD1B300FFF7EC00C4E9FF0044AEF700CD52
|
||||
0800FFE9DC00000000000000000000000000FFE1D00000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFE9DB00CD520800E1651900EC793500FFA77000FFD0
|
||||
B200FFF7EC00C2E9FF0040AEF700CD520800FFDFCD0000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000FFE3D100CD52
|
||||
0800ED793500F9945700FFBC8D00FFE1C500FFFFF90000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00688D
|
||||
A200FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFE4D500CD520800E3651A00EB7A3900FFA87400FFD1
|
||||
B300FFF7EC00C4E9FF0044AEF700CD520800FFE9DC0000000000FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000FFE1CF00CD52
|
||||
0800CD520800CD520800CD520800CD520800CD52080000000000E17D4100EB92
|
||||
5E0000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFE1CF00CD520800CD520800CD520800CD520800CD52
|
||||
0800CD52080000000000E17D4100EB925E0000000000FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00BBCCD500BBCCD5000000000000000000FFE2D100FFD7
|
||||
BF00FFD0B400FFCEB100FFCFB300FFD0B400FFD3B80000000000F5A779000000
|
||||
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF0000000000FFE7DA00FFE2D000FFDECB00FFDECA00FFDDC900FFDE
|
||||
CA00FFDFCD000000000000000000FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000FFE7DA00FFE2
|
||||
D000FFDECB00FFDECA00FFDDC900FFDECA00FFDFCD0000000000000000000000
|
||||
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00
|
||||
FF00FF00FF00FF00FF00FF00FF00FF00FF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00BBCCD500BBCCD500424D3E000000000000003E000000
|
||||
2800000040000000100000000100010000000000800000000000000000000000
|
||||
000000000000000000000000FFFFFF00FFFFCD00000000008003C900FFDECA00
|
||||
8003CB00FFDECA008003DA00FFE2D0008003EA00000000008003EA00DDE6EA00
|
||||
8003EA00DDE6EA008003EA00DDE6EA0080030000000000008003000000000000
|
||||
800300000000000080030000000000008007EA0000000000800F000000000000
|
||||
801F000020000000803F8F1F0000000000000000000000000000000000000000
|
||||
000000000000}
|
||||
end
|
||||
object PopupMenu: TPopupMenu
|
||||
Left = 40
|
||||
Top = 16
|
||||
object DeleteItem: TMenuItem
|
||||
Caption = 'Delete'
|
||||
ShortCut = 16430
|
||||
OnClick = DeleteItemClick
|
||||
end
|
||||
object RenameItem: TMenuItem
|
||||
Caption = 'Rename'
|
||||
ShortCut = 113
|
||||
OnClick = RenameItemClick
|
||||
end
|
||||
end
|
||||
object OpenDialog: TOpenDialog
|
||||
DefaultExt = 'ugr'
|
||||
Filter = 'Gradient files (*.ugr)|*.ugr|Fractint map files (*.map)|*.map'
|
||||
Left = 72
|
||||
Top = 16
|
||||
end
|
||||
object LargeImages: TImageList
|
||||
Height = 32
|
||||
Width = 32
|
||||
Left = 104
|
||||
Top = 16
|
||||
Bitmap = {
|
||||
494C010101000400040020002000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
|
||||
0000000000003600000028000000800000002000000001002000000000000040
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000DDE6EA00DDE6EA0000000000FDEB
|
||||
E000FDE2D300FCCFB300B3644B00C06D5300BB695000BC6A4F00BC6A5100BC6A
|
||||
5100A35B4500B9886F00FCC8A800FCC9AA00FCCAAC00FCD0B600FDD6BC00FDD9
|
||||
C100FEDFCC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEB
|
||||
E000FDE2D300FCCFB300FBC8AA00FAC6A500FAC5A400FBC5A400FBC5A400FBC6
|
||||
A500FBC7A600FBC7A600FCC8A800FCC9AA00FCCAAC00FCD0B600FDD6BC00FDD9
|
||||
C100FEDFCC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F4DA
|
||||
CA00F2D2BD00ECBC9F00EAB59400E9B29000E8AF8D00E9AF8D00E9B08C00E9AF
|
||||
8D00E8AF8D00E9B08D00E8B08D00E8B18E00EAB28F00EAB79900EDBDA000EDC1
|
||||
A600F0C8B00000000000DDE6EA00DDE6EA0023232300BAEBFF00B3EAFF00B0E8
|
||||
FF00ACE7FF00A8E6FF00A5E6FF00A4E4FF009FE1FF009DE1FF009BE2FF0097E0
|
||||
FF0095DFFF0092DDFF008FDDFF008DDDFF008BDBFF0087D9FF0084D8FF0083D8
|
||||
FF007ED6FF007ED3FF0078D1FF00262626000000000000000000000000000000
|
||||
0000FFFEFB00FFFEFA00FFFEF800FFFEF700FFFDF700FFFDF600FFFEF600FFFE
|
||||
F700FFFFF700FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFA00FFFFFB00FFFF
|
||||
FC00FFFFFC00FFFFFC00FFFFFD00FFFFFE000000000000000000000000000000
|
||||
000000000000000000000000000000000000E7A88300EBB69600EDC1A700F0C9
|
||||
B300F3D4C10000000000DDE6EA00DDE6EA002323230023232300232323002323
|
||||
2300232323002323230023232300232323002323230023232300232323002323
|
||||
2300232323002323230023232300232323002323230023232300232323002323
|
||||
2300232323002323230023232300DDE6EA00DDE6EA00DDE6EA0000000000FDEA
|
||||
DF00FCE1D000FBCCB000ED886800F38C6B00E8856500E9856600E9856600EB86
|
||||
6600D97C5F00DCA18300FBC5A400FBC7A700FBC9AA00FCD3B800FDDAC400FDDF
|
||||
CD00FEE7D80000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEA
|
||||
DF00FCE1D000FBCCB000FAC6A700F9C3A200FAC19F00FAC2A000FBC3A100FBC3
|
||||
A300FAC4A300FBC4A300FBC5A400FBC7A700FBC9AA00FCD3B800FDDAC400FDDF
|
||||
CD00FEE7D80000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F4D7
|
||||
C600F1CDB800EBB69600E8AE8C00E7AB8600E7A98200E6A88300E7A98300E7A8
|
||||
8300E6A98200E7A88300E7A98300E7AA86000000000000000000000000000000
|
||||
0000FFFDFA00FFFCF800FFFBF500FFFBF400FFFBF300FFFAF200FFFBF300FFFB
|
||||
F300FFFCF400FFFCF400FFFDF500FFFEF500FFFDF500FFFEF600FFFEF600FFFF
|
||||
F700FFFFF800FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFB00FFFFFC00FFFF
|
||||
FC0000000000000000000000000000000000F9BE9D00F8BF9E00F9C09E00F9C0
|
||||
9F00F9C19F00F9C1A000F9C2A200F9C5A500F9C8AB00F9833C00FF985A00FFAC
|
||||
770000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F1CF
|
||||
BB00EEC5AB00E8AA8500E6A37B00E49F7400E39B7000E39C7100E49B7000E39C
|
||||
7100E39C7100E39B7000E39C7200E49F7500E5A37A00F9833C00FF985A00FFAC
|
||||
770000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00BAEEFC00B7ED
|
||||
FD00B6ECFC00B2E9FB00B0E8FC00ADE8FB00AAE7FC00A7E6FC00A6E5FC003740
|
||||
4500DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDE9
|
||||
DE00FCE0CF00FACAAD00FAC3A400F9C09E00F9BF9C00F9C09D00F9C09D00FAC1
|
||||
A000FAC1A000F9C1A100FAC3A200FAC5A500FBC7A900FCD4BC00FDDDCA00FDE4
|
||||
D500FEECE20000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDE9
|
||||
DE00FCE0CF00FACAAD00FAC3A400F9C09E000000000000000000000000000000
|
||||
0000FFFCF800FFFBF600FFFAF200FFF9F000FFF8EF00FFF7EE00FFF9EE00FFF9
|
||||
EF00FFF9EF00FFF9F000FFFAF000FFFAF200FFFBF200FFFCF300FFFCF300FFFC
|
||||
F400FFFCF400FFFDF500FFFEF500FFFFF600FFFFF700FFFFF700FFFFF700FFFF
|
||||
FA0000000000000000000000000000000000DDE6EA00DDE6EA0000000000FCEA
|
||||
DF00FBE2D200F9CEB400F8C8AB00F9C6A700F9C5A500F9C5A500F9C6A500F8C6
|
||||
A700F9C6A800F9C6A700F9C8A900FAC9AC00FACDB100FF9F6400FFB38100FFC8
|
||||
9F00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FCEA
|
||||
DF00FBE2D200F9CEB400F8C8AB00F9C6A700F9C5A500F9C5A500F9C6A500F8C6
|
||||
A700F9C6A800F9C6A700F9C8A900FAC9AC00FACDB100FF9F6400FFB38100FFC8
|
||||
9F00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F1CE
|
||||
B900EEC4AB00E7AC8800E5A57F00E4A17900E49F7600E49F7600E49F7500E59F
|
||||
7600E49F7700E49F7600E49F7700E5A17900E5A57E00FF9F6400FFB38100FFC8
|
||||
9F00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0023232300C1F1
|
||||
FD00BFEFFD00BAEEFC00B9EDFC00B6ECFC00B2EAFB00AFE9FB00ADE8FB00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FFFBF700FFFAF300FFF8EF00FFF6EC00FFF6EB00FFF5EB00FFF5EA00FFF6
|
||||
EB00FFF6EB00FFF7EB00FFF7ED00FFF8ED00FFF8EE00FFF9EE00FFF9F000FFFA
|
||||
F000FFFAF000FFFAF200FFFBF200FFFBF200FFFCF300FFFCF300FFFDF400FFFD
|
||||
F60000000000000000000000000000000000EEC3A90000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEB
|
||||
E200FCE5D700FAD5BF00F9D1B800F9CEB400F9CDB300F9CDB300F9CEB300F9CF
|
||||
B500F9CFB500FACFB500F9D0B600FAD1B800FAD4BC00FFBA8B00FFCFA9000000
|
||||
0000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDEB
|
||||
E200FCE5D700FAD5BF00F9D1B800F9CEB400F9CDB300F9CDB300F9CEB300F9CF
|
||||
B500F9CFB500FACFB500F9D0B600FAD1B800FAD4BC00FFBA8B00FFCFA9000000
|
||||
0000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000F1CE
|
||||
B900EEC6AE00E9B29200E7AD8800E6A98400E6A78100E7A88100E6A78100E7A7
|
||||
8200E7A78200E6A78200E6A78200E6A984000000000000000000000000000000
|
||||
0000FFFAF600FFF8F200FFF6ED00FFF4E900FFF4E600FFF3E600FFF3E600FFF4
|
||||
E700FFF4E700FFF5E800FFF5E800FFF5E900FFF5E900FFF5EB00FFF6EB00FFF7
|
||||
EB00FFF7EC00FFF8ED00FFF8EE00FFF8EE00FFF9EF00FFF9F000FFFAF000FFFA
|
||||
F200000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDF1
|
||||
E900FDEEE500FCE8DC00FCE6D900FCE5D800FCE5D700FCE5D700FCE5D700FCE6
|
||||
D800FCE6D800FCE6D900FCE6D900FCE7DA00FCE8DC0000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FDF1
|
||||
E900FDEEE500FCE8DC00FCE6D900FCE5D8000000000000000000000000000000
|
||||
0000FFFAF400FFF7F000FFF4EA00FFF2E600FFF1E300FFF0E200FFF0E200FFF1
|
||||
E200FFF2E300FFF2E400FFF2E500FFF3E500FFF3E500FFF4E600FFF5E700FFF4
|
||||
E700FFF5E800FFF5E900FFF5E900FFF5EA00FFF5EA00FFF6EB00FFF7ED00FFF8
|
||||
EF0000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
00000000000000000000DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FFF9F300FFF6EE00FFF2E800FFF0E300FFEEE000FFEEDF00FFEEDE00FFEE
|
||||
DF00FFEEE000FFEFE000FFEFE000FFEFE100FFF0E100FFF1E200FFF1E200FFF2
|
||||
E400FFF2E400FFF2E400FFF3E600FFF3E600FFF4E600FFF5E700FFF5E900FFF6
|
||||
EB0000000000000000000000000000000000FFFFF000FFFFF200FFFFF200FFFF
|
||||
F400FFFFF500FFFFF500FFFFF60000000000DDE6EA00DDE6EA0000000000FFFC
|
||||
F800FFFBF600FFF9F000FFF8EF00FFF7EE00FFF9EF00FFF9EF00FFF9F000FFFA
|
||||
F200FFFBF200FFFCF300FFFCF400FFFCF400FFFDF500FFFFF600FFFFF700FFFF
|
||||
F700FFFFFA0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FFFD
|
||||
FA00FFFCF800FFFBF400FFFBF300FFFAF200FFFBF300FFFCF400FFFCF400FFFE
|
||||
F500FFFDF500FFFEF600FFFFF700FFFFF800FFFFF800FFFFF900FFFFFA00FFFF
|
||||
FB00FFFFFC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA0000000000FFFD
|
||||
FA00FFFCF800FFFBF400FFFBF300FFFAF200FFFBF300FFFCF400FFFCF400FFFE
|
||||
F500FFFDF500FFFEF600FFFFF700FFFFF800FFFFF800FFFFF900FFFFFA00FFFF
|
||||
FB00FFFFFC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFF800FFFEF600FFFFF400FFFF
|
||||
F200FFFFF300FFFFF300FFFFF400FFFFF4000000000000000000000000000000
|
||||
0000FFF8F200FFF5EC00FFF0E500FFEDDF00CD520800CD520800CD520800CD52
|
||||
0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
|
||||
0800CD520800CD520800CD520800CD520800FFF1E300FFF2E300FFF2E400FFF3
|
||||
E60000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FFF7F100FFF3EA00FFEEE300FFECDD00CD520800DA804A00DC7E4400E285
|
||||
4C00EB956200F5AA7D00FEBE9700FFCCB000FFDCC800FFEFE300F7F8F800CEEA
|
||||
FD0092CEF70060B8F3003CA3F000CD520800FFEEDF00FFEEDF00FFF0E100FFF0
|
||||
E30000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000FFFEFB00FFFEFA00FFFEF800FFFEF700FFFDF700FFFDF600FFFEF600FFFE
|
||||
F700FFFFF700FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFA00FFFFFB00FFFF
|
||||
FC00FFFFFC00FFFFFC00FFFFFD00FFFFFE00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000BADDF900ABD5F80097CBF60089C4F5007EBFF40077BCF30076BBF30075BA
|
||||
F30074BAF30075BAF20075BAF30075BAF30074BAF40075BBF40075BAF40074BB
|
||||
F40074BAF40075BBF40075BAF40074BBF40074BBF40076BBF40078BCF4007EBF
|
||||
F50000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FFF6EF00FFF1E900FFECDF00FFE9D900CD520800DD855200DB7C4000E282
|
||||
4800EA925E00F4A77900FDBC9400FFCCAE00FFDCC700FFEFE400F7F8F900CDEA
|
||||
FD008FCDF7005CB5F30038A1F000CD520800FFEBDB00FFECDC00FFEDDD00FFEF
|
||||
E00000000000000000000000000000000000BBCCD500BBCCD500DDE6EA000000
|
||||
0000FFFDFA00FFFCF800FFFBF500FFFBF400FFFBF300FFFAF200FFFBF300FFFB
|
||||
F300FFFCF400FFFCF400FFFDF500FFFEF500FFFDF500FFFEF600FFFEF600FFFF
|
||||
F700FFFFF800FFFFF800FFFFF900FFFFF900FFFFFA00FFFFFB00FFFFFC00FFFF
|
||||
FC0000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000C1DFF900B2D8F9009FCFF70091C8F60087C3F40080C0F4007FBFF4007EBF
|
||||
F3007DBFF4007DBFF3007EBFF3007DBFF3007EBFF3007EBFF3007DBFF4007EBF
|
||||
F4007EBFF4007DBFF4007DBEF3007EBFF4007DBEF3007EBFF40080C0F50086C2
|
||||
F60000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00214F4A00214F4A00214F
|
||||
4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F
|
||||
4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F
|
||||
4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F4A00214F
|
||||
4A00214F4A00214F4A00214F4A00DDE6EA000000000000000000000000000000
|
||||
0000FFF5EE00FFF1E700FFEADD00FFE7D600CD520800DC855000DB7B4100E180
|
||||
4700EA905C00F4A67800FDBC9400FFCBAE00FFDBC700FFEFE300F7F8F800CDEA
|
||||
FD008FCDF7005BB5F40037A1EF00CD520800FFE9D700FFE9D700FFEAD900FFEC
|
||||
DC0000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000FFFCF800FFFBF60000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF7F100FFF3EA00FFF3EA00FFEEE300FFEEE300FFECDD00FFECDD00CD52
|
||||
0800CD520800FBE6DA00FBE6DA00FBDED100FBDED100FBD0B900FBD0B900FBD3
|
||||
C000FBC4A300FBC4A300FBB99100FBB99100FBFAFB00FBFAFB00FBF6F600FBF6
|
||||
F600FBE6DA00FBE6DA00FB996400FB996400FBA87B00FBA87B00FB823F00FBDC
|
||||
CB00FBDCCB00F7C2A500F7C2A500CD520800CD520800FFEEDF00FFEEDF00FFEE
|
||||
DF00FFEEDF00FFF0E100FFF0E100FFF0E300FFF0E30000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500DDE6
|
||||
EA00BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000000000000000
|
||||
0000FFF4ED00FFEFE500FFE9DB00FFE5D300CD520800DC855000DB7C4100E181
|
||||
4800EA905C00F4A67800FDBC9400FFCCAE00FFDCC700FFEFE300F7F8F800CDEA
|
||||
FD008FCDF7005BB5F30037A1EF00CD520800FFE5D300FFE6D400FFE7D500FFE9
|
||||
D80000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
|
||||
0000FFF6EF00FFF1E900FFF1E900FFECDF00FFECDF00FFE9D900FFE9D900CD52
|
||||
0800CD520800FEE6DB00FEE6DB00FEDBC800FEDBC800FED9C200FED9C200FED1
|
||||
B700FEAF8100FEAF8100FEF9F800FEF9F800FEF3EE00FEF3EE00FEFEFE00FEFE
|
||||
FE00FEAB7B00FEAB7B00FEAB7A00FEAB7A00FE975F00FE975F00FE9C6200FEF3
|
||||
F100FEF3F100FBB08600FBB08600CD520800CD520800FFEBDB00FFEBDB00FFEC
|
||||
DC00FFECDC00FFEDDD00FFEDDD00FFEFE000FFEFE00000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
|
||||
EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
|
||||
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
|
||||
A200688DA200688DA200BBCCD500DDE6EA000000000000000000000000000000
|
||||
0000FFF3EC00FFEEE300FFE7D800FFE3D000CD520800DC855000DB7C4000E281
|
||||
4800EA905C00F4A67800FEBC9400FFCCAE00FFDCC700FFEFE300F7F8F800CDEA
|
||||
FD008FCDF7005CB5F30037A1EF00CD520800FFE3CF00FFE3CF00FFE5D100FFE6
|
||||
D50000000000000000000000000000000000FEDBC800FED9C200FED9C200FED1
|
||||
B700FEAF8100FEAF8100FEF9F800FEF9F800FEF3EE00FEF3EE00FEFEFE00FEFE
|
||||
FE00FEAB7B00FEAB7B00FEAB7A00FEAB7A00FE975F00FE975F00FE9C6200FEF3
|
||||
F100FEF3F100FBB08600FBB08600CD520800CD520800FFEBDB00FFEBDB00FFEC
|
||||
DC00FFECDC00FFEDDD00FFEDDD00FFEFE000FFEFE00000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
|
||||
EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
|
||||
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
|
||||
D500BBCCD500BBCCD500688DA200BBCCD500688DA200DDE6EA00BBCCD500BBCC
|
||||
D500688DA200DDE6EA00688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCC
|
||||
D500688DA200DDE6EA00688DA200DDE6EA000000000000000000000000000000
|
||||
0000FFF2EA00FFEDE200FFE5D500FFE0CD00CD520800DC865100DB7C4000E281
|
||||
4700EA905C00F4A67800FEBC9400FFCBAE00FFDCC700FFEFE300F7F8F800CDEA
|
||||
FD008FCDF7005CB5F30036A1EF00CD520800FFE0CC00FFE0CC00FFE1CE00FFE3
|
||||
D10000000000000000000000000000000000FE823900FE823900FEDAC200FED8
|
||||
C300FED8C300FBA27300FBA27300CD520800CD520800FFE9D700FFE9D700FFE9
|
||||
D700FFE9D700FFEAD900FFEAD900FFECDC00FFECDC0000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
|
||||
EA00BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
|
||||
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCCD500BBCC
|
||||
D500688DA200DDE6EA00688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCC
|
||||
D500688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD50053C7
|
||||
FF0051C6FF004FC5FF004CC4FF0049C4FF0047C2FF0044C1FF0042C0FF003FC0
|
||||
FF003DBDFF003AB9FF0038B6FF00214F4A000000000000000000000000000000
|
||||
0000FFF1E900FFEBDF00FFE3D200FFDEC900CD520800DC865100DB7B4100E281
|
||||
4800EB915C00F5A67800FEBB9400FFCCAE00FFDCC700FFEFE400F7F8F900CDEA
|
||||
FD008FCDF7005CB5F40036A1EF00CD520800FFDDC700FFDEC800FFDFCB00FFE2
|
||||
CE0000000000000000000000000000000000FFE9D80000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00BBCCD500688DA200DDE6EA00688DA200DDE6
|
||||
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCCD500BBCC
|
||||
D500688DA200DDE6EA00688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCC
|
||||
D500688DA200DDE6EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD5008BDB
|
||||
FF0082D9FF007BD7FF0077D5FF0073D4FF0071D2FF006ED1FF006AD0FF0068CF
|
||||
FF0065CFFF0063CDFF0061CDFF005FCCFF005DCAFF005AC9FF0058C9FF0055C8
|
||||
FF0053C7FF0050C5FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FFF1E800FFEADE00FFE2D000FFDBC600CD520800DC855100DB7C4100E281
|
||||
4800EB915C00F5A77800FDBC9400FFCBAE00FFDBC700FFEFE300F6F8F800CCEA
|
||||
FD008FCDF7005BB6F30037A1EF00CD520800FFDBC300FFDBC400FFDDC700FFDF
|
||||
CA0000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
|
||||
A200688DA200688DA200BBCCD500BBCCD500688DA200DDE6EA00688DA200DDE6
|
||||
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500688DA200BBCCD500DDE6EA00DDE6
|
||||
EA00688DA200BBCCD500688DA200DDE6EA00688DA200BBCCD500DDE6EA00DDE6
|
||||
EA00688DA200BBCCD500688DA200DDE6EA00DDE6EA00BBCCD500DDE6EA00D9EB
|
||||
FA00D9EAF900D9EAFA00D9EAFA00D9EAFA00D9EBFA00D9EBFA00DAEBF900DBEC
|
||||
FA0000000000DDE6EA00DDE6EA00DDE6EA00232323009FE2FF0098E0FF008DDD
|
||||
FF0084D9FF007ED6FF0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF4ED00FFEFE500FFEFE500FFE9DB00FFE9DB00FFE5D300FFE5D300CD52
|
||||
0800CD520800FEE1CE00FEE1CE00FEE4D8000000000000000000000000000000
|
||||
0000FFF0E700FFE9DC00FFE0CD00FED9C300CD520800DC855000DB7C4100E181
|
||||
4700EA915C00F5A77800FEBB9400FFCCAE00FFDCC800FFEFE300F6F8F800CCEA
|
||||
FD008FCDF7005BB5F30036A1EF00CD520800FFD7BF00FFD8C000FFDAC200FFDC
|
||||
C70000000000000000000000000000000000688DA200BBCCD500688DA200DDE6
|
||||
EA00688DA200DDE6EA00BBCCD500BBCCD500BBCCD500688DA200DDE6EA00BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688DA200688D
|
||||
A200BBCCD500BBCCD500688DA200DDE6EA00BBCCD500688DA200688DA200688D
|
||||
A200BBCCD500BBCCD500688DA200688DA200BBCCD500688DA200BBCCD5000000
|
||||
0000F4F9FE00F1F8FD00EFF5FC00EBF5FC00EAF3FA00EAF2FA00E9F2FA007478
|
||||
7D003A3C3F003A3D3F003A3D3F003A3D3F003A3D3F003A3D3F003A3D3F003A3D
|
||||
3F003A3D3F00E9F3FB0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF4ED00FFEFE500FFEFE500FFE9DB00FFE9DB00FFE5D300FFE5D300CD52
|
||||
0800CD520800FEE1CE00FEE1CE00FEE4D800FEE4D800FEB89000FEB89000FECA
|
||||
A900FEFEFE00FEFEFE00FEEBE100FEEBE100FEFDFE00FEFDFE00FEB78C00FEB7
|
||||
8C00FEA16D00FEA16D00FE975C00FE975C000000000000000000000000000000
|
||||
0000FFEFE500FFE8DA00FEDDCB00FDD7C000CD520800DD855100DB7B4000E181
|
||||
4700EB915C00F5A67700FEBB9400FFCCAE00FFDBC700FFEFE400F6F8F900CCEA
|
||||
FD008FCDF7005BB5F30036A1F000CD520800FFD5BB00FFD5BD00FFD8BF00FFDA
|
||||
C20000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500688DA200DDE6EA00BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500100F
|
||||
0E0000000000CFBEB000FFEAD900FFEBDB00FFEBDB00FFECDC00FFEDDD00FFEF
|
||||
E00000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000FCFDFE00FBFCFE0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF3EC00FFEEE300FFEEE300FFE7D800FFE7D800FFE3D000FFE3D000CD52
|
||||
0800CD520800FEE4D300FEE4D300FEE1D100FEE1D100FEA67500FEA67500FEF6
|
||||
F100FEEFE900FEEFE900FEEBE200FEEBE200FEFBFA00FEFBFA00FE945900FE94
|
||||
5900FEA97C00FEA97C00FE925000FE925000FEFEFE00FEFEFE00FEB98D00FEC3
|
||||
A100FEC3A100FBBC9200FBBC9200CD520800CD520800FFE3CF00FFE3CF00FFE3
|
||||
CF00FFE3CF00FFE5D100FFE5D100FFE6D5000000000000000000000000000000
|
||||
0000FEEEE400FEE6D800FEDDC800FDD5BC00CD520800DD865200DB7C4200E183
|
||||
4900EA925F00F4A77A00FDBD9500FFCCAE00FFDCC800FFEFE400F6F8F800CDEA
|
||||
FD0090CDF7005DB6F30038A1F000CD520800FFD3B800FFD3BA00FFD6BC00FFD8
|
||||
C00000000000000000000000000000000000BBCCD500BBCCD500BBCCD5000000
|
||||
0000FFF5EE00FFF1E700FFEADD00FFE7D600FFE4D100FFE2CF00FFE2CE00FFE2
|
||||
CF00CFB8A80040393400EFD6C300FFE5D100FFE5D200FFE5D200FFE5D300EFD8
|
||||
C700403A3500BFADA00000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF3EC00FFEEE300FFEEE300FFE7D800FFE7D800FFE3D000FFE3D000CD52
|
||||
0800CD520800FEE4D300FEE4D300FEE1D100FEE1D100FEA67500FEA67500FEF6
|
||||
F100FEEFE900FEEFE900FEEBE200FEEBE200FEFBFA00FEFBFA00FE945900FE94
|
||||
5900FEA97C00FEA97C00FE925000FE925000FEFEFE00FEFEFE00FEB98D00FEC3
|
||||
A100FEC3A100FBBC9200FBBC9200CD520800CD520800FFE3CF00FFE3CF00FFE3
|
||||
CF00FFE3CF00FFE5D100FFE5D100FFE6D500FFE6D50000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD5000000000000000000000000000000
|
||||
0000FEEDE200FEE5D600FDDBC500FDD3BA00CD520800DD885600DD804800E388
|
||||
5000EB976600F5AB8100FDBF9B00FFCEB200FFDECB00FFF0E400F6F8F800CFEB
|
||||
FD0096D0F70064B9F30041A6F000CD520800FED2B700FED3BB00FED5BD00FED8
|
||||
C1000000000000000000000000000000000000000000FFFFFF00000000000000
|
||||
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF2EA00FFEDE200FFEDE200FFE5D500FFE5D500FFE0CD00FFE0CD00CD52
|
||||
0800CD520800FEEADD00FEEADD00FEC7A700FEC7A700FEC09B00FEC09B00FEFB
|
||||
FB00FEEAE000FEEAE000FEEFE700FEEFE700FEF0EB00FEF0EB00FE844100FE84
|
||||
4100FEA97800FEA97800FEC8AA00FEC8AA00FEFAFA00FEFAFA00FEAF7F00FEBD
|
||||
9A00FEBD9A00FBB07B00FBB07B00CD520800CD520800FFE0CC00FFE0CC00FFE0
|
||||
CC00FFE0CC00FFE1CE00FFE1CE00FFE3D100FFE3D10000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FEECE100FDE3D500FCD9C300FCD1B500CD520800DE8A5700DF885400E593
|
||||
6000EEA17400F8B38D00FEC6A500FFD3BA00FFE1D000FFF2E700F7F8F900D4ED
|
||||
FE00A0D5F80073C0F50054B0F100CD520800FED2B800FDD4BC00FDD7C000FEDA
|
||||
C50000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
|
||||
0000FFF2EA00FFEDE200FFEDE200FFE5D500FFE5D500FFE0CD00FFE0CD00CD52
|
||||
0800CD520800FEEADD00FEEADD00FEC7A700FEC7A700FEC09B00FEC09B00FEFB
|
||||
FB00FEEAE000FEEAE000FEEFE700FEEFE700FEF0EB00FEF0EB00FE844100FE84
|
||||
4100FEA97800FEA97800FEC8AA00FEC8AA00FEFAFA00FEFAFA00FEAF7F00FEBD
|
||||
9A00FEBD9A00FBB07B00FBB07B00CD520800CD520800FFE0CC00FFE0CC00FFE0
|
||||
CC00FFE0CC00FFE1CE00FFE1CE00FFE3D100FFE3D10000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
|
||||
A200688DA200688DA200688DA200BBCCD500688DA200BBCCD500688DA200BBCC
|
||||
D500688DA200BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200688D
|
||||
A200688DA200688DA200BBCCD500BBCCD5000000000000000000000000000000
|
||||
0000FDEBE000FDE2D300FCD7C100FCCFB300CD520800E2966A00E3976800EA9F
|
||||
7000F1B28D00F8C1A100FED0B400FFD9C500FFE5D700FFF4EC00F8F6F600DBEC
|
||||
F600B2DAF5008DC6EE0073BCEF00CD520800FDD6BC00FDD9C100FDDCC700FEDF
|
||||
CC0000000000000000000000000000000000FEB08600FEDFCB00FEDFCB00FEF7
|
||||
F300FEE7DA00FEE7DA00FEF0EA00FEF0EA00FEEBE100FEEBE100FE813A00FE81
|
||||
3A00FEAD7800FEAD7800FEE4D900FEE4D900FEE3DB00FEE3DB00FED1B000EFC5
|
||||
B400EFC5B400E99B7300E99B7300CD520800CD520800FFDDC700FFDDC700FFDE
|
||||
C800FFDEC800FFDFCB00FFDFCB00FFE2CE00FFE2CE0000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000000000000000
|
||||
0000FDEADF00FCE1D000FBD5BE00FBCCB000CD520800CD520800CD520800CD52
|
||||
0800CD520800CD520800CD520800CD520800CD520800CD520800CD520800CD52
|
||||
0800CD520800CD520800CD520800CD520800FDDAC400FDDFCD00FDE3D300FEE7
|
||||
D80000000000000000000000000000000000FEE3DB00FEE3DB00FED1B000EFC5
|
||||
B400EFC5B400E99B7300E99B7300CD520800CD520800FFDDC700FFDDC700FFDE
|
||||
C800FFDEC800FFDFCB00FFDFCB00FFE2CE00FFE2CE0000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD5000000
|
||||
0000000000000000000000000000000000005BCAFF0058C9FF0056C7FF0053C7
|
||||
FF0051C4FF004DBFFF0049BBFF00214F4A000000000000000000000000000000
|
||||
0000FDE9DE00FCE0CF00FAD4BB00FACAAD00FAC3A400F9C09E00F9BF9C00F9BF
|
||||
9C00F9C09D00F9C09D00FAC09F00FAC1A000FAC1A000F9C1A100F9C2A100FAC3
|
||||
A200FAC5A500FBC7A900FCCCB100FCD4BC00FDDDCA00FDE4D500FDE9DC00FEEC
|
||||
E20000000000000000000000000000000000FFDFCA0000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD5000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000000000000000000000000000
|
||||
0000FCE9DD00FBDFCD00FAD2BB00F9C9AB00F9C2A200F8BF9D00F8BE9A00F8BD
|
||||
9A00F8BE9B00F8BE9C00F9BF9D00F8C09D00F9C09E00F9C09F00F9C09F00F9C2
|
||||
A100FAC4A400FBC7A80000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500FFF7
|
||||
EB00FFF7EC00FFF8ED00FFF8EE00FFF8EE00FFF9EF00FFF9F000FFFAF000FFFA
|
||||
F20000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000FFFBF700FFFAF30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF1E800FFEADE00FFEADE00FFE2D000FFE2D000FFDBC600FFDBC600CD52
|
||||
0800CD520800FEE9DD00FEE9DD00FEA56E000000000000000000000000000000
|
||||
0000FDE9DD00FCE0CF00FAD4BC00F8CAAD00F8C4A400F8C09F00F8BF9D00F9BE
|
||||
9D00F8BF9E00F9C09E00F9C09F00F9C09F00F9C19F00F9C1A000F9C1A000F9C2
|
||||
A200F9C5A500F9C8AB0000000000F9833C00FF985A00FFAC7700FFC195000000
|
||||
000000000000000000000000000000000000BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD5000000
|
||||
0000FFF7F100FFF3EA00FFEEE300FFECDD00CD520800FBE6DA00FBDED100FBD0
|
||||
B900FBD3C000FBC4A300FBB99100FBFAFB00FBF6F600FBE6DA00FB996400FBA8
|
||||
7B00FB823F00FBDCCB0000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF1E800FFEADE00FFEADE00FFE2D000FFE2D000FFDBC600FFDBC600CD52
|
||||
0800CD520800FEE9DD00FEE9DD00FEA56E00FEA56E00FEE5D900FEE5D900FEF6
|
||||
F500FEE4D400FEE4D400FEEBE400FEEBE400FEEEE400FEEEE400FE7A3200FE7A
|
||||
3200FEAB7500FEAB7500FED1B800FED1B8000000000000000000000000000000
|
||||
0000FCEADF00FBE2D200FAD6C100F9CEB400F8C8AB00F9C6A700F8C4A500F9C5
|
||||
A500F9C5A500F9C6A500F8C6A600F8C6A700F9C6A800F9C6A700F9C6A800F9C8
|
||||
A900FAC9AC00FACDB10000000000FF9F6400FFB38100FFC89F00000000000000
|
||||
000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FEFA
|
||||
FA00FEAF7F00FEBD9A00FBB07B00CD520800FFE0CC00FFE0CC00FFE1CE00FFE3
|
||||
D10000000000DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000FFF3EC00FFEEE30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF0E700FFE9DC00FFE9DC00FFE0CD00FFE0CD00FED9C300FED9C300CD52
|
||||
0800CD520800FEE4D600FEE4D600FEA16D00FEA16D00FEE9E100FEE9E100FEF6
|
||||
F300FEEBDF00FEEBDF00FEF1EB00FEF1EB00FEF9FB00FEF9FB00FE824200FE82
|
||||
4200FEA96F00FEA96F00FEBC8D00FEBC8D00FEFEFE00FEFEFE00FEFDFE00FEE2
|
||||
D500FEE2D500FBDED200FBDED200CD520800CD520800FFD7BF00FFD7BF00FFD8
|
||||
C000FFD8C000FFDAC200FFDAC200FFDCC7000000000000000000000000000000
|
||||
0000FDEBE200FCE5D700FADCC900FAD5BF00F9D1B800F9CEB400F9CEB300F9CD
|
||||
B300F9CDB300F9CEB300F9CEB400F9CFB500F9CFB500FACFB500FACFB500F9D0
|
||||
B600FAD1B800FAD4BC0000000000FFBA8B00FFCFA90000000000000000000000
|
||||
000000000000000000000000000000000000BBCCD500BBCCD500BBCCD5000000
|
||||
0000FFEFE500FFE8DA00FEDDCB00FDD7C000CD520800FEE4D700FE9F6600FEE9
|
||||
DD00FEF0E900FEE7DB00FEE7DF00FEFEFE00FEA37300FE8B3D00FEC69200FEE0
|
||||
D600FDFEFE00FEE2D30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFF0E700FFE9DC00FFE9DC00FFE0CD00FFE0CD00FED9C300FED9C300CD52
|
||||
0800CD520800FEE4D600FEE4D600FEA16D00FEA16D00FEE9E100FEE9E100FEF6
|
||||
F300FEEBDF00FEEBDF00FEF1EB00FEF1EB00FEF9FB00FEF9FB00FE824200FE82
|
||||
4200FEA96F00FEA96F00FEBC8D00FEBC8D00FEFEFE00FEFEFE00FEFDFE00FEE2
|
||||
D500FEE2D500FBDED200FBDED200CD520800CD520800FFD7BF00FFD7BF00FFD8
|
||||
C000FFD8C000FFDAC200FFDAC200FFDCC700FFDCC70000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD5000000000000000000000000000000
|
||||
0000FDEEE600FCEADF00FCE4D600FBE0CF00FBDDCB00FADBC800FADBC700FADB
|
||||
C700FADBC800FADBC800FADBC800FADCC900FBDCC900FADCC900FADCC900FADC
|
||||
CA00FBDDCB00FBE0CE0000000000FFD6B3000000000000000000000000000000
|
||||
000000000000000000000000000000000000DDE6EA00DDE6EA00DDE6EA000000
|
||||
0000FDEBE000FDE2D30000000000FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00000000000000
|
||||
0000FFEFE500FFE8DA00FFE8DA00FEDDCB00FEDDCB00FDD7C000FDD7C000CD52
|
||||
0800CD520800FEE4D700FEE4D700FE9F6600FE9F6600FEE9DD00FEE9DD00FEF0
|
||||
E900FEE7DB00FEE7DB00FEE7DF00FEE7DF00FEFEFE00FEFEFE00FEA37300FEA3
|
||||
7300FE8B3D00FE8B3D00FEC69200FEC69200FEE0D600FEE0D600FDFEFE00FEE2
|
||||
D300FEE2D300F1A98A00F1A98A00CD520800CD520800FFD5BB00FFD5BB00FFD5
|
||||
BD00FFD5BD00FFD8BF00FFD8BF00FFDAC200FFDAC20000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA200BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD5000000000000000000000000000000
|
||||
0000FDF1E900FDEEE500FCEAE000FCE8DC00FCE6D900FCE5D800FCE5D700FCE5
|
||||
D700FCE5D700FCE5D700FCE5D800FCE6D800FCE6D800FCE6D900FCE6D900FCE6
|
||||
D900FCE7DA00FCE8DC0000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000DDE6EA00DDE6EA00000000000000
|
||||
0000FFEFE500FFE8DA00FFE8DA00FEDDCB00FEDDCB00FDD7C000FDD7C000CD52
|
||||
0800CD520800FEE4D700FEE4D700FE9F6600FE9F6600FEE9DD00FEE9DD00FEF0
|
||||
E900FEE7DB00FEE7DB00FEE7DF00FEE7DF00FEFEFE00FEFEFE00FEA37300FEA3
|
||||
7300FE8B3D00FE8B3D00FEC69200FEC69200FEE0D600FEE0D600FDFEFE00FEE2
|
||||
D300FEE2D300F1A98A00F1A98A00CD520800CD520800FFD5BB00FFD5BB00FFD5
|
||||
BD00FFD5BD00FFD8BF00FFD8BF00FFDAC200FFDAC20000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA20000000000FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
000000000000000000000000000000000000FE9B6000FEDFCD00FEDFCD00FEF2
|
||||
EF00FEE3D900FEE3D900FEE0D300FEE0D300FEF8F800FEF8F800FEE8E300FEE8
|
||||
E300FE833B00FE833B00FEBB7300FEBB7300FEDFC000FEDFC000F9CEC200FED8
|
||||
CA00FED8CA00FBD2BF00FBD2BF00CD520800CD520800FFD3B800FFD3B800FFD3
|
||||
BA00FFD3BA00FFD6BC00FFD6BC00FFD8C000FFD8C00000000000DDE6EA00DDE6
|
||||
EA00DDE6EA00DDE6EA00DDE6EA00DDE6EA00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00BBCCD500DDE6EA00BBCCD500BBCCD500BBCCD500BBCCD500BBCC
|
||||
D500BBCCD500BBCCD500BBCCD500BBCCD500BBCCD500688DA20000000000FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
|
||||
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00424D3E000000000000003E000000
|
||||
2800000080000000200000000100010000000000000200000000000000000000
|
||||
000000000000000000000000FFFFFF00E0000007000000000000000000000000
|
||||
E00000F7000000000000000000000000E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007FFFFFF00FFFFFF00FFFFFF00
|
||||
E00000070000000000000000FFFFFF00E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007FFFFFF00FFFFFF00FFFFFF00
|
||||
E00000070000000000000000FFFFFF00E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E0000007FFFFFF00FFFFFF00FFFFFF00
|
||||
E00000070000000000000000FFFFFF00E0000007000000000000000000000000
|
||||
E0000007000000000000000000000000E000000F000000000000000000000000
|
||||
E000001F000000000000000000000000E000003F000000000000000000000000
|
||||
E000007F000000000000000000000000E00000FFFFFFFF00FFFFFF00FFFFFF00
|
||||
E00001FF10022F031F022F0320FFFF0000000000000000000000000000000000
|
||||
000000000000}
|
||||
end
|
||||
object TooltipTimer: TTimer
|
||||
OnTimer = TooltipTimerTimer
|
||||
Left = 8
|
||||
Top = 52
|
||||
end
|
||||
end
|
||||
621
Forms/Browser.pas
Normal file
621
Forms/Browser.pas
Normal file
@ -0,0 +1,621 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 Browser;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||
ExtCtrls, ComCtrls, ControlPoint, ToolWin, ImgList, StdCtrls,
|
||||
Cmap, Menus, Global, Buttons, Translation,
|
||||
RenderingInterface;
|
||||
|
||||
const
|
||||
PixelCountMax = 32768;
|
||||
PaletteTooltipTimeout = 1500;
|
||||
|
||||
type
|
||||
TGradientBrowser = class(TForm)
|
||||
SmallImages: TImageList;
|
||||
pnlMain: TPanel;
|
||||
PopupMenu: TPopupMenu;
|
||||
DeleteItem: TMenuItem;
|
||||
RenameItem: TMenuItem;
|
||||
OpenDialog: TOpenDialog;
|
||||
LargeImages: TImageList;
|
||||
TooltipTimer: TTimer;
|
||||
ListView: TListView;
|
||||
pnlPreview: TPanel;
|
||||
Image: TImage;
|
||||
btnDefGradient: TSpeedButton;
|
||||
procedure FormResize(Sender: TObject);
|
||||
procedure ListViewChange(Sender: TObject; Item: TListItem;
|
||||
Change: TItemChange);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure DeleteItemClick(Sender: TObject);
|
||||
procedure RenameItemClick(Sender: TObject);
|
||||
procedure ListViewEdited(Sender: TObject; Item: TListItem;
|
||||
var S: string);
|
||||
procedure btnDefGradientClick(Sender: TObject);
|
||||
procedure SpeedButton1Click(Sender: TObject);
|
||||
procedure ListViewKeyPress(Sender: TObject; var Key: Char);
|
||||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
procedure ListViewInfoTip(Sender: TObject; Item: TListItem;
|
||||
var InfoTip: String);
|
||||
procedure TooltipTimerTimer(Sender: TObject);
|
||||
private
|
||||
procedure DrawPalette;
|
||||
procedure Apply;
|
||||
public
|
||||
PreviewDensity: double;
|
||||
FlameIndex, GradientIndex: Integer;
|
||||
Extension, Identifier, Filename: string;
|
||||
cp: TControlPoint;
|
||||
Palette: TColorMap;
|
||||
zoom: double;
|
||||
Center: array[0..1] of double;
|
||||
Render: TRenderer;
|
||||
procedure ListFileContents;
|
||||
function LoadFractintMap(filen: string): TColorMap;
|
||||
end;
|
||||
|
||||
type
|
||||
EFormatInvalid = class(Exception);
|
||||
pRGBTripleArray = ^TRGBTripleArray;
|
||||
TRGBTripleArray = array[0..PixelCountMax - 1] of TRGBTriple;
|
||||
|
||||
var
|
||||
GradientBrowser: TGradientBrowser;
|
||||
FlameString: string;
|
||||
|
||||
function CreatePalette(strng: string): TColorMap;
|
||||
|
||||
implementation
|
||||
|
||||
uses Main, Options, Editor, {Gradient,} Registry, Adjust, Mutate;
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
|
||||
procedure RGBBlend(a, b: integer; var Palette: TColorMap);
|
||||
{ Linear blend between to indices of a palette }
|
||||
var
|
||||
c, v: real;
|
||||
vrange, range: real;
|
||||
i: integer;
|
||||
begin
|
||||
if a = b then
|
||||
begin
|
||||
Exit;
|
||||
end;
|
||||
range := b - a;
|
||||
vrange := Palette[b mod 256][0] - Palette[a mod 256][0];
|
||||
c := Palette[a mod 256][0];
|
||||
v := vrange / range;
|
||||
for i := (a + 1) to (b - 1) do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][0] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][1] - Palette[a mod 256][1];
|
||||
c := Palette[a mod 256][1];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][1] := Round(c);
|
||||
end;
|
||||
vrange := Palette[b mod 256][2] - Palette[a mod 256][2];
|
||||
c := Palette[a mod 256][2];
|
||||
v := vrange / range;
|
||||
for i := a + 1 to b - 1 do
|
||||
begin
|
||||
c := c + v;
|
||||
Palette[i mod 256][2] := Round(c);
|
||||
end;
|
||||
end;
|
||||
|
||||
function GetVal(token: string): string;
|
||||
var
|
||||
p: integer;
|
||||
begin
|
||||
p := Pos('=', token);
|
||||
Delete(Token, 1, p);
|
||||
Result := Token;
|
||||
end;
|
||||
|
||||
function ReplaceTabs(str: string): string;
|
||||
{Changes tab characters in a string to spaces}
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 1 to Length(str) do
|
||||
begin
|
||||
if str[i] = #9 then
|
||||
begin
|
||||
Delete(str, i, 1);
|
||||
Insert(#32, str, i);
|
||||
end;
|
||||
end;
|
||||
Result := str;
|
||||
end;
|
||||
|
||||
function TGradientBrowser.LoadFractintMap(filen: string): TColorMap;
|
||||
var
|
||||
i: integer;
|
||||
s: string;
|
||||
pal: TColorMap;
|
||||
MapFile: TextFile;
|
||||
begin
|
||||
{ Load a map file }
|
||||
AssignFile(MapFile, Filen);
|
||||
try
|
||||
Reset(MapFile);
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
Read(MapFile, Pal[i][0]);
|
||||
Read(MapFile, Pal[i][1]);
|
||||
Read(MapFile, Pal[i][2]);
|
||||
Read(MapFile, s);
|
||||
end;
|
||||
CloseFile(MapFile);
|
||||
Result := Pal;
|
||||
except
|
||||
on EInOutError do Application.MessageBox(PChar(Format(TextByKey('common-genericopenfailure'), [FileName])), PCHAR('Apophysis'), 16);
|
||||
end;
|
||||
end;
|
||||
|
||||
function CreatePalette(strng: string): TColorMap;
|
||||
{ Loads a palette from a gradient string }
|
||||
var
|
||||
Strings: TStringList;
|
||||
index, i: integer;
|
||||
Tokens: TStringList;
|
||||
Indices, Colors: TStringList;
|
||||
a, b: integer;
|
||||
begin
|
||||
Strings := TStringList.Create;
|
||||
Tokens := TStringList.Create;
|
||||
Indices := TStringList.Create;
|
||||
Colors := TStringList.Create;
|
||||
try
|
||||
try
|
||||
Strings.Text := strng;
|
||||
if Pos('}', Strings.Text) = 0 then raise EFormatInvalid.Create('No closing brace');
|
||||
if Pos('{', Strings[0]) = 0 then raise EFormatInvalid.Create('No opening brace.');
|
||||
GetTokens(ReplaceTabs(strings.text), tokens);
|
||||
Tokens.Text := Trim(Tokens.text);
|
||||
i := 0;
|
||||
while (Pos('}', Tokens[i]) = 0) and (Pos('opacity:', Lowercase(Tokens[i])) = 0) do
|
||||
begin
|
||||
if Pos('index=', LowerCase(Tokens[i])) <> 0 then
|
||||
Indices.Add(GetVal(Tokens[i]))
|
||||
else if Pos('color=', LowerCase(Tokens[i])) <> 0 then
|
||||
Colors.Add(GetVal(Tokens[i]));
|
||||
inc(i)
|
||||
end;
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
Result[i][0] := 0;
|
||||
Result[i][1] := 0;
|
||||
Result[i][2] := 0;
|
||||
end;
|
||||
if Indices.Count = 0 then raise EFormatInvalid.Create('No color info');
|
||||
for i := 0 to Indices.Count - 1 do
|
||||
begin
|
||||
try
|
||||
index := StrToInt(Indices[i]);
|
||||
while index < 0 do inc(index, 400);
|
||||
index := Round(Index * (255 / 399));
|
||||
indices[i] := IntToStr(index);
|
||||
assert(index>=0);
|
||||
assert(index<256);
|
||||
Result[index][0] := StrToInt(Colors[i]) mod 256;
|
||||
Result[index][1] := trunc(StrToInt(Colors[i]) / 256) mod 256;
|
||||
Result[index][2] := trunc(StrToInt(Colors[i]) / 65536);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
i := 1;
|
||||
repeat
|
||||
a := StrToInt(Trim(Indices[i - 1]));
|
||||
b := StrToInt(Trim(Indices[i]));
|
||||
RGBBlend(a, b, Result);
|
||||
inc(i);
|
||||
until i = Indices.Count;
|
||||
if (Indices[0] <> '0') or (Indices[Indices.Count - 1] <> '255') then
|
||||
begin
|
||||
a := StrToInt(Trim(Indices[Indices.Count - 1]));
|
||||
b := StrToInt(Trim(Indices[0])) + 256;
|
||||
RGBBlend(a, b, Result);
|
||||
end;
|
||||
except on EFormatInvalid do
|
||||
begin
|
||||
// Result := False;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
Tokens.Free;
|
||||
Strings.Free;
|
||||
Indices.Free;
|
||||
Colors.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.DrawPalette;
|
||||
var
|
||||
i, j: integer;
|
||||
Row: pRGBTripleArray;
|
||||
BitMap: TBitMap;
|
||||
begin
|
||||
BitMap := TBitMap.Create;
|
||||
try
|
||||
Bitmap.PixelFormat := pf24bit;
|
||||
BitMap.Width := 256;
|
||||
BitMap.Height := 1;
|
||||
for j := 0 to Bitmap.Height - 1 do
|
||||
begin
|
||||
Row := Bitmap.Scanline[j];
|
||||
for i := 0 to Bitmap.Width - 1 do
|
||||
begin
|
||||
with Row[i] do
|
||||
begin
|
||||
rgbtRed := Palette[i][0];
|
||||
rgbtGreen := Palette[i][1];
|
||||
rgbtBlue := Palette[i][2];
|
||||
end
|
||||
end
|
||||
end;
|
||||
Image.Picture.Graphic := Bitmap;
|
||||
Image.Refresh;
|
||||
finally
|
||||
BitMap.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.ListFileContents;
|
||||
{ List identifiers in file }
|
||||
var
|
||||
i, p: integer;
|
||||
Title: string;
|
||||
ListItem: TListItem;
|
||||
FStrings: TStringList;
|
||||
begin
|
||||
FStrings := TStringList.Create;
|
||||
FStrings.LoadFromFile(filename);
|
||||
try
|
||||
ListView.Items.BeginUpdate;
|
||||
ListView.Items.Clear;
|
||||
if Lowercase(ExtractFileExt(filename)) = '.map' then
|
||||
begin
|
||||
ListItem := ListView.Items.Add;
|
||||
Listitem.Caption := Trim(filename);
|
||||
end
|
||||
else
|
||||
if (Pos('{', FStrings.Text) <> 0) then
|
||||
begin
|
||||
for i := 0 to FStrings.Count - 1 do
|
||||
begin
|
||||
p := Pos('{', FStrings[i]);
|
||||
if (p <> 0) and (Pos('(3D)', FStrings[i]) = 0) then
|
||||
begin
|
||||
Title := Trim(Copy(FStrings[i], 1, p - 1));
|
||||
if Title <> '' then
|
||||
begin { Otherwise bad format }
|
||||
ListItem := ListView.Items.Add;
|
||||
Listitem.Caption := Trim(Copy(FStrings[i], 1, p - 1));
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
ListView.Items.EndUpdate;
|
||||
ListView.Selected := ListView.Items[0];
|
||||
finally
|
||||
FStrings.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.ListViewChange(Sender: TObject; Item: TListItem;
|
||||
Change: TItemChange);
|
||||
var
|
||||
Tokens, FStrings: TStringList;
|
||||
EntryStrings: TStringList;
|
||||
i: integer;
|
||||
begin
|
||||
Application.ProcessMessages;
|
||||
FStrings := TStringList.Create;
|
||||
EntryStrings := TStringList.Create;
|
||||
Tokens := TStringList.Create;
|
||||
try
|
||||
if Lowercase(ExtractFileExt(filename)) = '.map' then
|
||||
begin
|
||||
Palette := LoadFractintMap(filename);
|
||||
DrawPalette;
|
||||
end
|
||||
else
|
||||
if (ListView.SelCount <> 0) and (ListView.Selected.Caption <> Identifier) then
|
||||
begin
|
||||
Identifier := ListView.Selected.Caption;
|
||||
FStrings.LoadFromFile(Filename);
|
||||
for i := 0 to FStrings.count - 1 do
|
||||
if Pos(Lowercase(ListView.Selected.Caption) + ' ', Trim(Lowercase(FStrings[i]))) = 1 then break;
|
||||
EntryStrings.Add(FStrings[i]);
|
||||
repeat
|
||||
inc(i);
|
||||
EntryStrings.Add(FStrings[i]);
|
||||
until Pos('}', FStrings[i]) <> 0;
|
||||
Palette := CreatePalette(EntryStrings.Text);
|
||||
DrawPalette;
|
||||
end;
|
||||
finally
|
||||
EntryStrings.Free;
|
||||
FStrings.Free;
|
||||
Tokens.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.FormCreate(Sender: TObject);
|
||||
begin
|
||||
self.Caption := TextByKey('gradientbrowser-title');
|
||||
btnDefGradient.Hint := TextByKey('common-browse');
|
||||
DeleteItem.Caption := TextByKey('common-delete');
|
||||
RenameItem.Caption := TextByKey('common-rename');
|
||||
PreviewDensity := prevMediumQuality;
|
||||
cp := TControlPoint.Create;
|
||||
cp.gamma := defGamma;
|
||||
cp.brightness := defBrightness;
|
||||
cp.vibrancy := defVibrancy;
|
||||
cp.spatial_oversample := defOversample;
|
||||
cp.spatial_filter_radius := defFilterRadius;
|
||||
Render := TRenderer.Create;
|
||||
FlameIndex := 0;
|
||||
GradientIndex := 0;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
Render.Free;
|
||||
cp.Free;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.FormShow(Sender: TObject);
|
||||
var
|
||||
Registry: TRegistry;
|
||||
begin
|
||||
{ Read posution from registry }
|
||||
Registry := TRegistry.Create;
|
||||
try
|
||||
Registry.RootKey := HKEY_CURRENT_USER;
|
||||
if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Browser', False) then
|
||||
begin
|
||||
if Registry.ValueExists('Left') then
|
||||
GradientBrowser.Left := Registry.ReadInteger('Left');
|
||||
if Registry.ValueExists('Top') then
|
||||
GradientBrowser.Top := Registry.ReadInteger('Top');
|
||||
if Registry.ValueExists('Width') then
|
||||
GradientBrowser.Width := Registry.ReadInteger('Width');
|
||||
if Registry.ValueExists('Height') then
|
||||
GradientBrowser.Height := Registry.ReadInteger('Height');
|
||||
end;
|
||||
Registry.CloseKey;
|
||||
finally
|
||||
Registry.Free;
|
||||
end;
|
||||
if FileExists(filename) then ListFileContents;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.DeleteItemClick(Sender: TObject);
|
||||
var
|
||||
c: boolean;
|
||||
begin
|
||||
if ListView.SelCount <> 0 then
|
||||
begin
|
||||
if ConfirmDelete then
|
||||
c := Application.MessageBox(
|
||||
PChar(Format(TextByKey('common-confirmdelete'), [ListView.Selected.Caption])), 'Apophysis', 36) = IDYES
|
||||
else
|
||||
c := True;
|
||||
if c then
|
||||
if ListView.Focused and (ListView.SelCount <> 0) then
|
||||
begin
|
||||
Application.ProcessMessages;
|
||||
if DeleteEntry(ListView.Selected.Caption, Filename) then
|
||||
begin
|
||||
ListView.Items.Delete(ListView.Selected.Index);
|
||||
ListView.Selected := ListView.ItemFocused;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.RenameItemClick(Sender: TObject);
|
||||
begin
|
||||
if ListView.SelCount <> 0 then
|
||||
ListView.Items[ListView.Selected.Index].EditCaption;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.ListViewEdited(Sender: TObject; Item: TListItem;
|
||||
var S: string);
|
||||
begin
|
||||
// if s <> Item.Caption then
|
||||
// if not RenameIFS(Item.Caption, s, Filename) then
|
||||
// s := Item.Caption;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.btnDefGradientClick(Sender: TObject);
|
||||
var
|
||||
fn:string;
|
||||
begin
|
||||
OpenDialog.InitialDir := BrowserPath;
|
||||
OpenDialog.Filter := Format('%s|*.gradient;*.ugr|%s|*.map|%s|*.*',
|
||||
[TextByKey('common-filter-gradientfiles'),
|
||||
TextByKey('common-filter-fractintfiles'),
|
||||
TextByKey('common-filter-allfiles')]);
|
||||
OpenDialog.FileName := '';
|
||||
if OpenSaveFileDialog(GradientBrowser, OpenDialog.DefaultExt, OpenDialog.Filter, OpenDialog.InitialDir, TextByKey('common-browse'), fn, true, false, false, true) then
|
||||
//if OpenDialog.Execute then
|
||||
begin
|
||||
Filename := fn; //OpenDialog.FileName;
|
||||
GradientFile := Filename;
|
||||
BrowserPath := ExtractFilePath(fn); //ExtractFilePath(OpenDialog.FileName);
|
||||
ListFileContents;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.Apply;
|
||||
begin
|
||||
MainForm.StopThread;
|
||||
MainForm.UpdateUndo;
|
||||
MainCp.cmap := Palette;
|
||||
MainCP.cmapindex := -1;
|
||||
if EditForm.Visible then EditForm.UpdateDisplay;
|
||||
if AdjustForm.Visible then AdjustForm.UpdateDisplay;
|
||||
if MutateForm.Visible then MutateForm.UpdateDisplay;
|
||||
MainForm.RedrawTimer.enabled := true;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.SpeedButton1Click(Sender: TObject);
|
||||
begin
|
||||
Apply;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.ListViewKeyPress(Sender: TObject;
|
||||
var Key: Char);
|
||||
begin
|
||||
if Key = #13 then Apply;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.FormClose(Sender: TObject;
|
||||
var Action: TCloseAction);
|
||||
var
|
||||
Registry: TRegistry;
|
||||
begin
|
||||
{ Write position to registry }
|
||||
Registry := TRegistry.Create;
|
||||
try
|
||||
Registry.RootKey := HKEY_CURRENT_USER;
|
||||
{ Defaults }
|
||||
if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Browser', True) then
|
||||
begin
|
||||
Registry.WriteInteger('Top', GradientBrowser.Top);
|
||||
Registry.WriteInteger('Left', GradientBrowser.Left);
|
||||
Registry.WriteInteger('Width', GradientBrowser.Width);
|
||||
Registry.WriteInteger('Height', GradientBrowser.Height);
|
||||
end;
|
||||
finally
|
||||
Registry.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.ListViewInfoTip(Sender: TObject;
|
||||
Item: TListItem; var InfoTip: String);
|
||||
var
|
||||
i, j: integer;
|
||||
Row: pRGBTripleArray;
|
||||
Bitmap: TBitmap;
|
||||
pal: TColorMap;
|
||||
EntryStrings, FStrings: TStringList;
|
||||
rect: TRect;
|
||||
begin
|
||||
BitMap := TBitMap.create;
|
||||
Bitmap.PixelFormat := pf24bit;
|
||||
BitMap.Width := 256;
|
||||
BitMap.Height := 100;
|
||||
|
||||
FStrings := TStringList.Create;
|
||||
EntryStrings := TStringList.Create;
|
||||
try
|
||||
if Lowercase(ExtractFileExt(filename)) = '.map' then
|
||||
begin
|
||||
pal := LoadFractintMap(filename);
|
||||
end
|
||||
else
|
||||
begin
|
||||
Identifier := Item.Caption;
|
||||
FStrings.LoadFromFile(Filename);
|
||||
for i := 0 to FStrings.count - 1 do
|
||||
if Pos(Lowercase(Item.Caption) + ' ', Trim(Lowercase(FStrings[i]))) = 1 then break;
|
||||
EntryStrings.Add(FStrings[i]);
|
||||
repeat
|
||||
inc(i);
|
||||
EntryStrings.Add(FStrings[i]);
|
||||
until Pos('}', FStrings[i]) <> 0;
|
||||
pal := CreatePalette(EntryStrings.Text);
|
||||
end;
|
||||
finally
|
||||
EntryStrings.Free;
|
||||
FStrings.Free;
|
||||
end;
|
||||
|
||||
for j := 0 to Bitmap.Height - 1 do
|
||||
begin
|
||||
Row := Bitmap.Scanline[j];
|
||||
for i := 0 to Bitmap.Width - 1 do
|
||||
begin
|
||||
with Row[i] do
|
||||
begin
|
||||
rgbtRed := pal[i][0];
|
||||
rgbtGreen := pal[i][1];
|
||||
rgbtBlue := pal[i][2];
|
||||
end
|
||||
end
|
||||
end;
|
||||
rect.TopLeft := Item.Position;
|
||||
rect.BottomRight.X := rect.TopLeft.X + 100;
|
||||
rect.BottomRight.Y := rect.TopLeft.Y + 16;
|
||||
with ListView do
|
||||
begin
|
||||
Canvas.Rectangle(Rect);
|
||||
//Canvas.TextOut(Rect.Left, Rect.Top, Item.Caption);
|
||||
//Rect.Left := (Rect.Left + rect.Right) div 3;
|
||||
Canvas.StretchDraw(Rect, Bitmap);
|
||||
end;
|
||||
BitMap.Free;
|
||||
InfoTip := '';
|
||||
TooltipTimer.Interval := PaletteTooltipTimeout;
|
||||
TooltipTimer.Enabled := true;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.TooltipTimerTimer(Sender: TObject);
|
||||
begin
|
||||
ListView.Repaint;
|
||||
TooltipTimer.Enabled := false;
|
||||
end;
|
||||
|
||||
procedure TGradientBrowser.FormResize(Sender: TObject);
|
||||
begin
|
||||
Listview.Width := self.ClientWidth - 4;
|
||||
btnDefGradient.Left := self.ClientWidth - 2 - btnDefGradient.Width;
|
||||
ListView.Height := self.ClientHeight - pnlPreview.Height - 6;
|
||||
btnDefGradient.Top := self.ClientHeight - pnlPreview.Height - 2 + pnlPreview.Height div 2 - btnDefGradient.Height div 2;
|
||||
ListView.Top := 2;
|
||||
ListView.Left := 2;
|
||||
pnlPreview.Top := self.ClientHeight - pnlPreview.Height - 2;
|
||||
pnlPreview.Left := 2;
|
||||
pnlPreview.Width := self.ClientWidth - btnDefGradient.Width - 6;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
125
Forms/Curves.dfm
Normal file
125
Forms/Curves.dfm
Normal file
@ -0,0 +1,125 @@
|
||||
object CurvesForm: TCurvesForm
|
||||
Left = 197
|
||||
Top = 111
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Curves'
|
||||
ClientHeight = 492
|
||||
ClientWidth = 489
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -13
|
||||
Font.Name = 'System'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
OnClose = FormClose
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 16
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Top = 16
|
||||
Width = 75
|
||||
Height = 13
|
||||
Caption = 'Selected curve:'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
end
|
||||
object CurvesPanel: TPanel
|
||||
Left = 8
|
||||
Top = 68
|
||||
Width = 473
|
||||
Height = 414
|
||||
BevelOuter = bvNone
|
||||
Color = clBlack
|
||||
ParentBackground = False
|
||||
TabOrder = 0
|
||||
end
|
||||
object cbChannel: TComboBox
|
||||
Left = 8
|
||||
Top = 35
|
||||
Width = 185
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ItemIndex = 0
|
||||
ParentFont = False
|
||||
TabOrder = 1
|
||||
Text = 'Overall'
|
||||
OnChange = cbChannelChange
|
||||
Items.Strings = (
|
||||
'Overall'
|
||||
'Red'
|
||||
'Green'
|
||||
'Blue')
|
||||
end
|
||||
object tbWeightLeft: TScrollBar
|
||||
Left = 326
|
||||
Top = 8
|
||||
Width = 155
|
||||
Height = 21
|
||||
Max = 160
|
||||
PageSize = 0
|
||||
Position = 80
|
||||
TabOrder = 2
|
||||
OnChange = tbWeightChange
|
||||
OnScroll = tbWeightScroll
|
||||
end
|
||||
object tbWeightRight: TScrollBar
|
||||
Left = 326
|
||||
Top = 35
|
||||
Width = 155
|
||||
Height = 21
|
||||
Max = 160
|
||||
PageSize = 0
|
||||
Position = 80
|
||||
TabOrder = 3
|
||||
OnChange = tbWeightChange
|
||||
OnScroll = tbWeightScroll
|
||||
end
|
||||
object Panel2: TPanel
|
||||
Left = 199
|
||||
Top = 8
|
||||
Width = 121
|
||||
Height = 21
|
||||
Cursor = crHandPoint
|
||||
BevelOuter = bvLowered
|
||||
Caption = ' First CP weight:'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 199
|
||||
Top = 35
|
||||
Width = 121
|
||||
Height = 21
|
||||
Cursor = crHandPoint
|
||||
BevelOuter = bvLowered
|
||||
Caption = ' Second CP weight:'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 5
|
||||
end
|
||||
end
|
||||
123
Forms/Curves.pas
Normal file
123
Forms/Curves.pas
Normal file
@ -0,0 +1,123 @@
|
||||
unit Curves;
|
||||
|
||||
interface
|
||||
|
||||
uses Windows, Classes, Graphics, Forms, Controls, CurvesControl, Vcl.ExtCtrls,
|
||||
Vcl.StdCtrls, Vcl.ComCtrls, ControlPoint, Registry, Global;
|
||||
|
||||
type
|
||||
TCurvesForm = class(TForm)
|
||||
CurvesPanel: TPanel;
|
||||
cbChannel: TComboBox;
|
||||
tbWeightLeft: TScrollBar;
|
||||
tbWeightRight: TScrollBar;
|
||||
Panel2: TPanel;
|
||||
Panel1: TPanel;
|
||||
Label1: TLabel;
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure cbChannelChange(Sender: TObject);
|
||||
procedure tbWeightChange(Sender: TObject);
|
||||
procedure tbWeightScroll(Sender: TObject; ScrollCode: TScrollCode;
|
||||
var ScrollPos: Integer);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
private
|
||||
{ Private declarations }
|
||||
published
|
||||
CurvesControl: TCurvesControl;
|
||||
public
|
||||
procedure SetCp(cp: TControlPoint);
|
||||
end;
|
||||
|
||||
var
|
||||
CurvesForm: TCurvesForm;
|
||||
|
||||
implementation
|
||||
|
||||
uses Main;
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
procedure TCurvesForm.tbWeightScroll(Sender: TObject; ScrollCode: TScrollCode;
|
||||
var ScrollPos: Integer);
|
||||
begin
|
||||
if ScrollCode = scEndScroll then
|
||||
CurvesControl.UpdateFlame;
|
||||
end;
|
||||
|
||||
procedure TCurvesForm.SetCp(cp: TControlPoint);
|
||||
begin
|
||||
if CurvesControl = nil then Exit;
|
||||
CurvesControl.SetCp(cp);
|
||||
end;
|
||||
|
||||
procedure TCurvesForm.cbChannelChange(Sender: TObject);
|
||||
begin
|
||||
if CurvesControl = nil then Exit;
|
||||
CurvesControl.ActiveChannel := TCurvesChannel(cbChannel.ItemIndex);
|
||||
tbWeightLeft.Position := Round(CurvesControl.WeightLeft * 10);
|
||||
tbWeightRight.Position := Round(CurvesControl.WeightRight * 10);
|
||||
end;
|
||||
|
||||
procedure TCurvesForm.FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
var
|
||||
Registry: TRegistry;
|
||||
begin
|
||||
{ Write position to registry }
|
||||
Registry := TRegistry.Create;
|
||||
try
|
||||
Registry.RootKey := HKEY_CURRENT_USER;
|
||||
if Registry.OpenKey('\Software\' + APP_NAME + '\Forms\Curves', True) then
|
||||
begin
|
||||
Registry.WriteInteger('Top', self.Top);
|
||||
Registry.WriteInteger('Left', self.Left);
|
||||
end;
|
||||
finally
|
||||
Registry.Free;
|
||||
end;
|
||||
// bStop := True;
|
||||
end;
|
||||
|
||||
procedure TCurvesForm.FormCreate(Sender: TObject);
|
||||
begin
|
||||
//
|
||||
end;
|
||||
|
||||
procedure TCurvesForm.FormShow(Sender: TObject);
|
||||
var Registry: TRegistry;
|
||||
begin
|
||||
if not (assigned(curvesControl)) then
|
||||
begin
|
||||
CurvesControl := TCurvesControl.Create(self);
|
||||
CurvesControl.Align := alClient;
|
||||
CurvesControl.Parent := CurvesPanel;
|
||||
end;
|
||||
|
||||
Registry := TRegistry.Create;
|
||||
try
|
||||
Registry.RootKey := HKEY_CURRENT_USER;
|
||||
if Registry.OpenKey('Software\' + APP_NAME + '\Forms\Curves', False) then
|
||||
begin
|
||||
if Registry.ValueExists('Left') then
|
||||
self.Left := Registry.ReadInteger('Left');
|
||||
if Registry.ValueExists('Top') then
|
||||
self.Top := Registry.ReadInteger('Top');
|
||||
Registry.CloseKey;
|
||||
end;
|
||||
finally
|
||||
Registry.Free;
|
||||
end;
|
||||
|
||||
tbWeightLeft.Position := Round(CurvesControl.WeightLeft * 10);
|
||||
tbWeightRight.Position := Round(CurvesControl.WeightRight * 10);
|
||||
|
||||
SetCp(MainCp);
|
||||
end;
|
||||
|
||||
procedure TCurvesForm.tbWeightChange(Sender: TObject);
|
||||
begin
|
||||
CurvesControl.WeightLeft := tbWeightLeft.Position / 10.0;
|
||||
CurvesControl.WeightRight := tbWeightRight.Position / 10.0;
|
||||
end;
|
||||
|
||||
end.
|
||||
3543
Forms/Editor.dfm
Normal file
3543
Forms/Editor.dfm
Normal file
File diff suppressed because it is too large
Load Diff
5995
Forms/Editor.pas
Normal file
5995
Forms/Editor.pas
Normal file
File diff suppressed because it is too large
Load Diff
553
Forms/FormExport.dfm
Normal file
553
Forms/FormExport.dfm
Normal file
@ -0,0 +1,553 @@
|
||||
object ExportDialog: TExportDialog
|
||||
Left = 313
|
||||
Top = 276
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Export Flame'
|
||||
ClientHeight = 392
|
||||
ClientWidth = 496
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
DesignSize = (
|
||||
496
|
||||
392)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnOK: TButton
|
||||
Left = 398
|
||||
Top = 182
|
||||
Width = 89
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = '&OK'
|
||||
Default = True
|
||||
ModalResult = 1
|
||||
TabOrder = 0
|
||||
OnClick = btnOKClick
|
||||
end
|
||||
object btnCancel: TButton
|
||||
Left = 398
|
||||
Top = 210
|
||||
Width = 89
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Cancel'
|
||||
ModalResult = 2
|
||||
TabOrder = 1
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 8
|
||||
Top = 5
|
||||
Width = 481
|
||||
Height = 57
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = ' Destination '
|
||||
TabOrder = 2
|
||||
DesignSize = (
|
||||
481
|
||||
57)
|
||||
object btnBrowse: TSpeedButton
|
||||
Left = 448
|
||||
Top = 19
|
||||
Width = 24
|
||||
Height = 24
|
||||
Hint = 'Browse...'
|
||||
Anchors = [akTop, akRight]
|
||||
Flat = True
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Arial'
|
||||
Font.Style = [fsBold]
|
||||
Glyph.Data = {
|
||||
36030000424D3603000000000000360000002800000010000000100000000100
|
||||
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
|
||||
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
|
||||
607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
|
||||
18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
|
||||
88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
|
||||
8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
|
||||
805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
|
||||
C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
|
||||
7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
|
||||
EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
|
||||
D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
|
||||
98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
|
||||
FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
|
||||
A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
|
||||
A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
|
||||
93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
|
||||
9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
|
||||
ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
|
||||
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
OnClick = btnBrowseClick
|
||||
end
|
||||
object Label10: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'File name'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 1
|
||||
end
|
||||
object txtFilename: TEdit
|
||||
Left = 112
|
||||
Top = 20
|
||||
Width = 337
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
object GroupBox3: TGroupBox
|
||||
Left = 256
|
||||
Top = 66
|
||||
Width = 233
|
||||
Height = 105
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = ' Quality '
|
||||
TabOrder = 3
|
||||
DesignSize = (
|
||||
233
|
||||
105)
|
||||
object udOversample: TUpDown
|
||||
Left = 212
|
||||
Top = 68
|
||||
Width = 12
|
||||
Height = 21
|
||||
Anchors = [akTop, akRight]
|
||||
Associate = txtOversample
|
||||
Min = 1
|
||||
Max = 4
|
||||
Position = 2
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label4: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 113
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Density'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
end
|
||||
object txtDensity: TEdit
|
||||
Left = 120
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 0
|
||||
OnChange = txtDensityChange
|
||||
end
|
||||
object Label5: TPanel
|
||||
Left = 8
|
||||
Top = 44
|
||||
Width = 113
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Filter radius'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 5
|
||||
end
|
||||
object txtFilterRadius: TEdit
|
||||
Left = 120
|
||||
Top = 44
|
||||
Width = 105
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 1
|
||||
OnChange = txtFilterRadiusChange
|
||||
end
|
||||
object Label3: TPanel
|
||||
Left = 8
|
||||
Top = 68
|
||||
Width = 113
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Oversample'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 6
|
||||
end
|
||||
object txtOversample: TEdit
|
||||
Left = 120
|
||||
Top = 68
|
||||
Width = 92
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
ReadOnly = True
|
||||
TabOrder = 2
|
||||
Text = '2'
|
||||
OnChange = txtOversampleChange
|
||||
end
|
||||
end
|
||||
object GroupBox2: TGroupBox
|
||||
Left = 8
|
||||
Top = 66
|
||||
Width = 241
|
||||
Height = 105
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = ' Size '
|
||||
TabOrder = 4
|
||||
DesignSize = (
|
||||
241
|
||||
105)
|
||||
object Label13: TLabel
|
||||
Left = 184
|
||||
Top = 36
|
||||
Width = 26
|
||||
Height = 13
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = 'pixels'
|
||||
Visible = False
|
||||
end
|
||||
object Label16: TLabel
|
||||
Left = 168
|
||||
Top = 22
|
||||
Width = 15
|
||||
Height = 36
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = '}'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -32
|
||||
Font.Name = 'Times New Roman'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
Visible = False
|
||||
end
|
||||
object chkMaintain: TCheckBox
|
||||
Left = 8
|
||||
Top = 76
|
||||
Width = 225
|
||||
Height = 17
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = 'Maintain aspect ratio'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 0
|
||||
OnClick = chkMaintainClick
|
||||
end
|
||||
object Label1: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Width'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label2: TPanel
|
||||
Left = 8
|
||||
Top = 44
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Height'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
end
|
||||
object cbHeight: TComboBox
|
||||
Left = 112
|
||||
Top = 44
|
||||
Width = 121
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
OnChange = txtHeightChange
|
||||
Items.Strings = (
|
||||
'200'
|
||||
'240'
|
||||
'480'
|
||||
'600'
|
||||
'768'
|
||||
'1024'
|
||||
'1200'
|
||||
'2048'
|
||||
'2400')
|
||||
end
|
||||
object cbWidth: TComboBox
|
||||
Left = 112
|
||||
Top = 20
|
||||
Width = 121
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
ItemHeight = 13
|
||||
TabOrder = 1
|
||||
OnChange = txtWidthChange
|
||||
Items.Strings = (
|
||||
'320'
|
||||
'640'
|
||||
'800'
|
||||
'1024'
|
||||
'1280'
|
||||
'1600'
|
||||
'1920'
|
||||
'2048'
|
||||
'2560'
|
||||
'3200')
|
||||
end
|
||||
end
|
||||
object GroupBox4: TGroupBox
|
||||
Left = 8
|
||||
Top = 176
|
||||
Width = 377
|
||||
Height = 113
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = ' Parameters '
|
||||
TabOrder = 5
|
||||
DesignSize = (
|
||||
377
|
||||
113)
|
||||
object udStrips: TUpDown
|
||||
Left = 172
|
||||
Top = 52
|
||||
Width = 12
|
||||
Height = 21
|
||||
Associate = txtStrips
|
||||
Min = 1
|
||||
Max = 512
|
||||
Position = 1
|
||||
TabOrder = 2
|
||||
end
|
||||
object Label7: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Buffer depth'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 7
|
||||
end
|
||||
object Label8: TPanel
|
||||
Left = 8
|
||||
Top = 52
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Strips'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 8
|
||||
end
|
||||
object Label9: TPanel
|
||||
Left = 8
|
||||
Top = 84
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'DE Radius'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 9
|
||||
end
|
||||
object txtEstimator: TEdit
|
||||
Left = 112
|
||||
Top = 84
|
||||
Width = 73
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
Text = '5'
|
||||
OnChange = txtEstimatorChange
|
||||
end
|
||||
object txtStrips: TEdit
|
||||
Left = 112
|
||||
Top = 52
|
||||
Width = 60
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
Text = '1'
|
||||
OnChange = txtBatchesChange
|
||||
end
|
||||
object cmbDepth: TComboBox
|
||||
Left = 112
|
||||
Top = 20
|
||||
Width = 73
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
ItemHeight = 13
|
||||
TabOrder = 0
|
||||
OnChange = cmbDepthChange
|
||||
Items.Strings = (
|
||||
'16-bit'
|
||||
'32-bit'
|
||||
'32-bit float'
|
||||
'64-bit')
|
||||
end
|
||||
object Label14: TPanel
|
||||
Left = 192
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Gamma threshold'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 10
|
||||
end
|
||||
object Label12: TPanel
|
||||
Left = 192
|
||||
Top = 52
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'DE Curve'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 11
|
||||
end
|
||||
object Label11: TPanel
|
||||
Left = 192
|
||||
Top = 84
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'DE Minimum'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 12
|
||||
end
|
||||
object txtGammaTreshold: TEdit
|
||||
Left = 296
|
||||
Top = 20
|
||||
Width = 73
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 6
|
||||
Text = '0.01'
|
||||
OnChange = txtGammaTresholdChange
|
||||
end
|
||||
object txtEstimatorCurve: TEdit
|
||||
Left = 296
|
||||
Top = 52
|
||||
Width = 73
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 5
|
||||
Text = '0.6'
|
||||
OnChange = txtEstimatorCurveChange
|
||||
end
|
||||
object txtEstimatorMin: TEdit
|
||||
Left = 296
|
||||
Top = 84
|
||||
Width = 73
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 4
|
||||
Text = '0'
|
||||
OnChange = txtEstimatorMinChange
|
||||
end
|
||||
end
|
||||
object chkRender: TCheckBox
|
||||
Left = 400
|
||||
Top = 246
|
||||
Width = 89
|
||||
Height = 43
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Render'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 6
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 8
|
||||
Top = 296
|
||||
Width = 481
|
||||
Height = 89
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
BevelKind = bkSoft
|
||||
BevelOuter = bvNone
|
||||
Color = clInfoBk
|
||||
TabOrder = 7
|
||||
OnResize = Panel1Resize
|
||||
DesignSize = (
|
||||
477
|
||||
85)
|
||||
object Label6: TLabel
|
||||
Left = 8
|
||||
Top = 4
|
||||
Width = 453
|
||||
Height = 24
|
||||
Alignment = taCenter
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
AutoSize = False
|
||||
Caption = 'WARNING!'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clInfoText
|
||||
Font.Height = -19
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
end
|
||||
object Label15: TLabel
|
||||
Left = 8
|
||||
Top = 25
|
||||
Width = 447
|
||||
Height = 26
|
||||
Alignment = taCenter
|
||||
Anchors = [akLeft, akRight]
|
||||
Caption =
|
||||
'Fractals created with this version of Apophysis are not supporte' +
|
||||
'd by the external renderer! To render 2D-only fractals, download' +
|
||||
' the latest version of FLAM3 from http://www.flam3.com'
|
||||
Color = clInfoBk
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clInfoText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ParentColor = False
|
||||
ParentFont = False
|
||||
WordWrap = True
|
||||
end
|
||||
end
|
||||
object SaveDialog: TSaveDialog
|
||||
DefaultExt = 'jpg'
|
||||
Filter =
|
||||
'JPEG Image (*.jpg)|*.jpg|PPM Image (*.ppm)|*.ppm|PNG Images (*.p' +
|
||||
'ng)|*.png'
|
||||
Left = 464
|
||||
Top = 264
|
||||
end
|
||||
end
|
||||
346
Forms/FormExport.pas
Normal file
346
Forms/FormExport.pas
Normal file
@ -0,0 +1,346 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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, ExtCtrls, Translation;
|
||||
|
||||
type
|
||||
TExportDialog = class(TForm)
|
||||
btnOK: TButton;
|
||||
btnCancel: TButton;
|
||||
GroupBox1: TGroupBox;
|
||||
btnBrowse: TSpeedButton;
|
||||
txtFilename: TEdit;
|
||||
SaveDialog: TSaveDialog;
|
||||
GroupBox3: TGroupBox;
|
||||
txtOversample: TEdit;
|
||||
txtFilterRadius: TEdit;
|
||||
txtDensity: TEdit;
|
||||
udOversample: TUpDown;
|
||||
GroupBox2: TGroupBox;
|
||||
chkMaintain: TCheckBox;
|
||||
cbWidth: TComboBox;
|
||||
cbHeight: TComboBox;
|
||||
GroupBox4: TGroupBox;
|
||||
cmbDepth: TComboBox;
|
||||
chkRender: TCheckBox;
|
||||
txtStrips: TEdit;
|
||||
udStrips: TUpDown;
|
||||
txtEstimator: TEdit;
|
||||
txtEstimatorMin: TEdit;
|
||||
txtEstimatorCurve: TEdit;
|
||||
txtGammaTreshold: TEdit;
|
||||
Panel1: TPanel;
|
||||
Label6: TLabel;
|
||||
Label15: TLabel;
|
||||
Label13: TLabel;
|
||||
Label16: TLabel;
|
||||
Label4: TPanel;
|
||||
Label5: TPanel;
|
||||
Label3: TPanel;
|
||||
Label1: TPanel;
|
||||
Label2: TPanel;
|
||||
Label7: TPanel;
|
||||
Label8: TPanel;
|
||||
Label9: TPanel;
|
||||
Label14: TPanel;
|
||||
Label12: TPanel;
|
||||
Label11: TPanel;
|
||||
Label10: TPanel;
|
||||
procedure Panel1Resize(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
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);
|
||||
procedure txtEstimatorChange(Sender: TObject);
|
||||
procedure txtEstimatorMinChange(Sender: TObject);
|
||||
procedure txtEstimatorCurveChange(Sender: TObject);
|
||||
procedure txtJittersChange(Sender: TObject);
|
||||
procedure txtGammaTresholdChange(Sender: TObject);
|
||||
procedure lblFlam3LinkClick(Sender: TObject);
|
||||
private
|
||||
FloatFormatSettings: TFormatSettings;
|
||||
public
|
||||
Filename: string;
|
||||
ImageWidth, ImageHeight, Oversample, Batches, Strips: Integer;
|
||||
Sample_Density, Filter_Radius: double;
|
||||
Estimator, EstimatorMin, EstimatorCurve: double;
|
||||
GammaTreshold: double;
|
||||
Jitters: integer;
|
||||
end;
|
||||
|
||||
var
|
||||
ExportDialog: TExportDialog;
|
||||
Ratio: double;
|
||||
|
||||
implementation
|
||||
uses Global, Main, ShellAPI;
|
||||
|
||||
{$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 := Format('Portable Pixmap (*.ppm)|*.ppm|%s|*.jpg;*.jpeg|%s|*.png|%s|*.*',
|
||||
[TextByKey('common-filter-jpeg'), TextByKey('common-filter-png'),
|
||||
TextByKey('common-filter-allfiles')]);
|
||||
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;
|
||||
Batches := 1;
|
||||
Estimator := 9.0;
|
||||
EstimatorMin := 0.0;
|
||||
EstimatorCurve := 0.4;
|
||||
Jitters := 1;
|
||||
GammaTreshold := MainCP.gamma_threshold; //0.01;
|
||||
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FloatFormatSettings);
|
||||
txtEstimator.Text := FloatToStr(Estimator, FloatFormatSettings);
|
||||
txtEstimatorMin.Text := FloatToStr(EstimatorMin, FloatFormatSettings);
|
||||
txtEstimatorCurve.Text := FloatToStr(EstimatorCurve, FloatFormatSettings);
|
||||
// txtJitters.Text := IntToStr(Jitters);
|
||||
txtGammaTreshold.Text := FloatToStr(GammaTreshold, FloatFormatSettings);
|
||||
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;
|
||||
|
||||
procedure TExportDialog.txtEstimatorChange(Sender: TObject);
|
||||
begin
|
||||
Estimator := 0;
|
||||
try
|
||||
Estimator := StrToFloat(txtEstimator.Text, FloatFormatSettings);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TExportDialog.txtEstimatorMinChange(Sender: TObject);
|
||||
begin
|
||||
EstimatorMin := 0;
|
||||
try
|
||||
EstimatorMin := StrToFloat(txtEstimatorMin.Text, FloatFormatSettings);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TExportDialog.txtEstimatorCurveChange(Sender: TObject);
|
||||
begin
|
||||
EstimatorCurve := 0;
|
||||
try
|
||||
EstimatorCurve := StrToFloat(txtEstimatorCurve.Text, FloatFormatSettings);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TExportDialog.txtJittersChange(Sender: TObject);
|
||||
begin
|
||||
{
|
||||
Jitters := 0;
|
||||
try
|
||||
Jitters := StrToInt(txtJitters.Text);
|
||||
except
|
||||
end;
|
||||
}
|
||||
end;
|
||||
|
||||
procedure TExportDialog.txtGammaTresholdChange(Sender: TObject);
|
||||
begin
|
||||
//GammaTreshold := 0.01;
|
||||
try
|
||||
GammaTreshold := StrToFloat(txtGammaTreshold.Text, FloatFormatSettings);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TExportDialog.lblFlam3LinkClick(Sender: TObject);
|
||||
begin
|
||||
ShellExecute(ValidParentForm(Self).Handle, 'open', PChar(TLabel(Sender).Hint),
|
||||
nil, nil, SW_SHOWNORMAL);
|
||||
end;
|
||||
|
||||
procedure TExportDialog.FormCreate(Sender: TObject);
|
||||
begin
|
||||
btnOK.Caption := TextByKey('common-ok');
|
||||
btnCancel.Caption := TextByKey('common-cancel');
|
||||
Label1.Caption := TextByKey('common-width');
|
||||
Label2.Caption := TextByKey('common-height');
|
||||
GroupBox2.Caption := TextByKey('common-size');
|
||||
Label13.Caption := TextByKey('common-pixels');
|
||||
chkMaintain.Caption := TextByKey('common-keepaspect');
|
||||
GroupBox1.Caption := TextByKey('common-destination');
|
||||
Label10.Caption := TextByKey('common-filename');
|
||||
btnBrowse.Hint := TextByKey('common-browse');
|
||||
GroupBox3.Caption := TextByKey('common-quality');
|
||||
Label5.Caption := TextByKey('common-filterradius');
|
||||
Label4.Caption := TextByKey('common-density');
|
||||
Label3.Caption := TextByKey('common-oversample');
|
||||
Label14.Caption := TextByKey('common-gammathreshold');
|
||||
self.Caption := TextByKey('main-menu-file-exportflame');
|
||||
GroupBox4.Caption := TextByKey('export-paramoptions-title');
|
||||
Label7.Caption := TextByKey('export-paramoptions-bufferdepth');
|
||||
Label8.Caption := TextByKey('export-paramoptions-strips');
|
||||
Label9.Caption := TextByKey('export-paramoptions-estimatorradius');
|
||||
Label12.Caption := TextByKey('export-paramoptions-estimatorcurve');
|
||||
Label11.Caption := TextByKey('export-paramoptions-estimatormin');
|
||||
chkRender.Caption := TextByKey('export-paramoptions-dorender');
|
||||
Label6.Caption := TextByKey('export-paramoptions-warningtitle');
|
||||
Label15.Caption := TextByKey('export-paramoptions-warningtext');
|
||||
end;
|
||||
|
||||
procedure TExportDialog.Panel1Resize(Sender: TObject);
|
||||
begin
|
||||
Label15.Top := (Panel1.Height - 30) div 2 - Label15.Height div 2 + 25;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
553
Forms/FormExportC.dfm
Normal file
553
Forms/FormExportC.dfm
Normal file
@ -0,0 +1,553 @@
|
||||
object ExportCDialog: TExportCDialog
|
||||
Left = 313
|
||||
Top = 276
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Export Flame'
|
||||
ClientHeight = 134
|
||||
ClientWidth = 496
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
DesignSize = (
|
||||
496
|
||||
134)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object btnOK: TButton
|
||||
Left = 254
|
||||
Top = 98
|
||||
Width = 115
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = '&OK'
|
||||
Default = True
|
||||
ModalResult = 1
|
||||
TabOrder = 0
|
||||
OnClick = btnOKClick
|
||||
end
|
||||
object btnCancel: TButton
|
||||
Left = 376
|
||||
Top = 98
|
||||
Width = 111
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Cancel'
|
||||
ModalResult = 2
|
||||
TabOrder = 1
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 8
|
||||
Top = 237
|
||||
Width = 481
|
||||
Height = 57
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = ' Destination '
|
||||
TabOrder = 2
|
||||
Visible = False
|
||||
DesignSize = (
|
||||
481
|
||||
57)
|
||||
object btnBrowse: TSpeedButton
|
||||
Left = 448
|
||||
Top = 19
|
||||
Width = 24
|
||||
Height = 24
|
||||
Hint = 'Browse...'
|
||||
Anchors = [akTop, akRight]
|
||||
Flat = True
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Arial'
|
||||
Font.Style = [fsBold]
|
||||
Glyph.Data = {
|
||||
36030000424D3603000000000000360000002800000010000000100000000100
|
||||
18000000000000030000120B0000120B00000000000000000000FF00FFFF00FF
|
||||
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF75848F66808F
|
||||
607987576E7B4E626F4456613948522E3A43252E351B222914191E0E12160E13
|
||||
18FF00FFFF00FFFF00FF77879289A1AB6AB2D4008FCD008FCD008FCD048CC708
|
||||
88BE0F82B4157CA91B779F1F7296224B5C87A2ABFF00FFFF00FF7A8A957EBED3
|
||||
8AA4AE7EDCFF5FCFFF55CBFF4CC4FA41BCF537B3F02EAAEB24A0E5138CD42367
|
||||
805E696DFF00FFFF00FF7D8E9879D2EC8BA4AD89C2CE71D8FF65D3FF5CCEFF51
|
||||
C9FE49C1FA3FB9F534B0EE29A8E91085CD224B5B98B2BAFF00FF80919C81D7EF
|
||||
7DC5E08CA6B080DDFE68D3FF67D4FF62D1FF58CDFF4EC7FC46BEF73BB6F231AC
|
||||
EC2569817A95A1FF00FF83959F89DCF18CE2FF8DA8B18CBAC774D8FF67D4FF67
|
||||
D4FF67D4FF5FD0FF54CDFF4BC5FC41BBF72EA2DB51677498B2BA869AA392E1F2
|
||||
98E8FD80C4DE8EA7B081DEFD84E0FF84E0FF84E0FF84E0FF81DFFF7BDDFF74D8
|
||||
FF6BD6FF56A9D18F9BA4889CA59AE6F39FEBFB98E8FE8BACB98BACB98AAAB788
|
||||
A6B386A3AF839FAA819AA67F95A17C919D7A8E99798B957788938BA0A8A0EAF6
|
||||
A6EEF99FEBFB98E8FE7ADAFF67D4FF67D4FF67D4FF67D4FF67D4FF67D4FF7788
|
||||
93FF00FFFF00FFFF00FF8EA2ABA7EEF6ABF0F7A6EEF99FEBFB98E8FD71D4FB89
|
||||
9EA78699A382949F7E909A7A8C97778893FF00FFFF00FFFF00FF8FA4ACA0D2DA
|
||||
ABF0F7ABF0F7A6EEF99FEBFB8DA1AAB5CBD0FF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFBDCED48FA4AC8FA4AC8FA4AC8FA4AC8FA4ACB5CBD0FF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF
|
||||
FF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00
|
||||
FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF
|
||||
00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FFFF00FF}
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
OnClick = btnBrowseClick
|
||||
end
|
||||
object Label10: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'File name'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 1
|
||||
end
|
||||
object txtFilename: TEdit
|
||||
Left = 112
|
||||
Top = 20
|
||||
Width = 337
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
object GroupBox3: TGroupBox
|
||||
Left = 256
|
||||
Top = 10
|
||||
Width = 233
|
||||
Height = 79
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = ' Quality '
|
||||
TabOrder = 3
|
||||
DesignSize = (
|
||||
233
|
||||
79)
|
||||
object udOversample: TUpDown
|
||||
Left = 212
|
||||
Top = 44
|
||||
Width = 12
|
||||
Height = 21
|
||||
Anchors = [akTop, akRight]
|
||||
Associate = txtOversample
|
||||
Min = 1
|
||||
Max = 4
|
||||
Position = 2
|
||||
TabOrder = 2
|
||||
end
|
||||
object Label5: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 113
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Filter radius'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object txtFilterRadius: TEdit
|
||||
Left = 120
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 0
|
||||
OnChange = txtFilterRadiusChange
|
||||
end
|
||||
object Label3: TPanel
|
||||
Left = 8
|
||||
Top = 44
|
||||
Width = 113
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Oversample'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
end
|
||||
object txtOversample: TEdit
|
||||
Left = 120
|
||||
Top = 44
|
||||
Width = 92
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
ReadOnly = True
|
||||
TabOrder = 1
|
||||
Text = '2'
|
||||
OnChange = txtOversampleChange
|
||||
end
|
||||
end
|
||||
object GroupBox2: TGroupBox
|
||||
Left = 8
|
||||
Top = 10
|
||||
Width = 241
|
||||
Height = 111
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = ' Size '
|
||||
TabOrder = 4
|
||||
DesignSize = (
|
||||
241
|
||||
111)
|
||||
object Label13: TLabel
|
||||
Left = 184
|
||||
Top = 36
|
||||
Width = 26
|
||||
Height = 13
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = 'pixels'
|
||||
Visible = False
|
||||
end
|
||||
object Label16: TLabel
|
||||
Left = 168
|
||||
Top = 22
|
||||
Width = 15
|
||||
Height = 36
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = '}'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -32
|
||||
Font.Name = 'Times New Roman'
|
||||
Font.Style = []
|
||||
ParentFont = False
|
||||
Visible = False
|
||||
end
|
||||
object chkMaintain: TCheckBox
|
||||
Left = 8
|
||||
Top = 76
|
||||
Width = 225
|
||||
Height = 17
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = 'Maintain aspect ratio'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 0
|
||||
OnClick = chkMaintainClick
|
||||
end
|
||||
object Label1: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Width'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 3
|
||||
end
|
||||
object Label2: TPanel
|
||||
Left = 8
|
||||
Top = 44
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Height'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 4
|
||||
end
|
||||
object cbHeight: TComboBox
|
||||
Left = 112
|
||||
Top = 44
|
||||
Width = 121
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
ItemHeight = 13
|
||||
TabOrder = 2
|
||||
OnChange = txtHeightChange
|
||||
Items.Strings = (
|
||||
'200'
|
||||
'240'
|
||||
'480'
|
||||
'600'
|
||||
'768'
|
||||
'1024'
|
||||
'1200'
|
||||
'2048'
|
||||
'2400')
|
||||
end
|
||||
object cbWidth: TComboBox
|
||||
Left = 112
|
||||
Top = 20
|
||||
Width = 121
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
ItemHeight = 13
|
||||
TabOrder = 1
|
||||
OnChange = txtWidthChange
|
||||
Items.Strings = (
|
||||
'320'
|
||||
'640'
|
||||
'800'
|
||||
'1024'
|
||||
'1280'
|
||||
'1600'
|
||||
'1920'
|
||||
'2048'
|
||||
'2560'
|
||||
'3200')
|
||||
end
|
||||
end
|
||||
object GroupBox4: TGroupBox
|
||||
Left = 8
|
||||
Top = 392
|
||||
Width = 377
|
||||
Height = 113
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
Caption = ' Parameters '
|
||||
TabOrder = 5
|
||||
Visible = False
|
||||
DesignSize = (
|
||||
377
|
||||
113)
|
||||
object udStrips: TUpDown
|
||||
Left = 172
|
||||
Top = 52
|
||||
Width = 12
|
||||
Height = 21
|
||||
Associate = txtStrips
|
||||
Min = 1
|
||||
Max = 512
|
||||
Position = 1
|
||||
TabOrder = 2
|
||||
end
|
||||
object Label7: TPanel
|
||||
Left = 8
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Buffer depth'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 7
|
||||
end
|
||||
object Label8: TPanel
|
||||
Left = 8
|
||||
Top = 52
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Strips'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 8
|
||||
end
|
||||
object Label9: TPanel
|
||||
Left = 8
|
||||
Top = 84
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'DE Radius'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 9
|
||||
end
|
||||
object txtEstimator: TEdit
|
||||
Left = 112
|
||||
Top = 84
|
||||
Width = 73
|
||||
Height = 21
|
||||
TabOrder = 3
|
||||
Text = '5'
|
||||
end
|
||||
object txtStrips: TEdit
|
||||
Left = 112
|
||||
Top = 52
|
||||
Width = 60
|
||||
Height = 21
|
||||
TabOrder = 1
|
||||
Text = '1'
|
||||
end
|
||||
object cmbDepth: TComboBox
|
||||
Left = 112
|
||||
Top = 20
|
||||
Width = 73
|
||||
Height = 21
|
||||
Style = csDropDownList
|
||||
ItemHeight = 13
|
||||
TabOrder = 0
|
||||
Items.Strings = (
|
||||
'16-bit'
|
||||
'32-bit'
|
||||
'32-bit float'
|
||||
'64-bit')
|
||||
end
|
||||
object Label14: TPanel
|
||||
Left = 192
|
||||
Top = 20
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Gamma threshold'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 10
|
||||
end
|
||||
object Label12: TPanel
|
||||
Left = 192
|
||||
Top = 52
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'DE Curve'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 11
|
||||
end
|
||||
object Label11: TPanel
|
||||
Left = 192
|
||||
Top = 84
|
||||
Width = 105
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'DE Minimum'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 12
|
||||
end
|
||||
object txtGammaTreshold: TEdit
|
||||
Left = 296
|
||||
Top = 20
|
||||
Width = 73
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 6
|
||||
Text = '0.01'
|
||||
OnChange = txtGammaTresholdChange
|
||||
end
|
||||
object txtEstimatorCurve: TEdit
|
||||
Left = 296
|
||||
Top = 52
|
||||
Width = 73
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 5
|
||||
Text = '0.6'
|
||||
end
|
||||
object txtEstimatorMin: TEdit
|
||||
Left = 296
|
||||
Top = 84
|
||||
Width = 73
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 4
|
||||
Text = '0'
|
||||
end
|
||||
end
|
||||
object chkRender: TCheckBox
|
||||
Left = 392
|
||||
Top = 398
|
||||
Width = 89
|
||||
Height = 43
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Render'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 6
|
||||
Visible = False
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 8
|
||||
Top = 296
|
||||
Width = 481
|
||||
Height = 89
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
BevelKind = bkSoft
|
||||
BevelOuter = bvNone
|
||||
Color = clInfoBk
|
||||
TabOrder = 7
|
||||
Visible = False
|
||||
DesignSize = (
|
||||
477
|
||||
85)
|
||||
object Label6: TLabel
|
||||
Left = 8
|
||||
Top = 4
|
||||
Width = 453
|
||||
Height = 24
|
||||
Alignment = taCenter
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
AutoSize = False
|
||||
Caption = 'WARNING!'
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clInfoText
|
||||
Font.Height = -19
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = [fsBold]
|
||||
ParentFont = False
|
||||
end
|
||||
object Label15: TLabel
|
||||
Left = 8
|
||||
Top = 25
|
||||
Width = 447
|
||||
Height = 26
|
||||
Alignment = taCenter
|
||||
Anchors = [akLeft, akRight]
|
||||
Caption =
|
||||
'Fractals created with this version of Apophysis are not supporte' +
|
||||
'd by the external renderer! To render 2D-only fractals, download' +
|
||||
' the latest version of FLAM3 from http://www.flam3.com'
|
||||
Color = clInfoBk
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clInfoText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ParentColor = False
|
||||
ParentFont = False
|
||||
WordWrap = True
|
||||
end
|
||||
end
|
||||
object txtDensity: TEdit
|
||||
Left = 120
|
||||
Top = 212
|
||||
Width = 105
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
TabOrder = 8
|
||||
Visible = False
|
||||
OnChange = txtDensityChange
|
||||
end
|
||||
object Label4: TPanel
|
||||
Left = 8
|
||||
Top = 212
|
||||
Width = 113
|
||||
Height = 21
|
||||
Cursor = crArrow
|
||||
BevelOuter = bvLowered
|
||||
Caption = 'Density'
|
||||
ParentShowHint = False
|
||||
ShowHint = True
|
||||
TabOrder = 9
|
||||
Visible = False
|
||||
end
|
||||
object SaveDialog: TSaveDialog
|
||||
DefaultExt = 'jpg'
|
||||
Filter =
|
||||
'JPEG Image (*.jpg)|*.jpg|PPM Image (*.ppm)|*.ppm|PNG Images (*.p' +
|
||||
'ng)|*.png'
|
||||
Left = 464
|
||||
Top = 264
|
||||
end
|
||||
end
|
||||
257
Forms/FormExportC.pas
Normal file
257
Forms/FormExportC.pas
Normal file
@ -0,0 +1,257 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 FormExportC;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||
StdCtrls, Buttons, ComCtrls, ExtCtrls, Translation;
|
||||
|
||||
type
|
||||
TExportCDialog = class(TForm)
|
||||
btnOK: TButton;
|
||||
btnCancel: TButton;
|
||||
GroupBox1: TGroupBox;
|
||||
btnBrowse: TSpeedButton;
|
||||
txtFilename: TEdit;
|
||||
SaveDialog: TSaveDialog;
|
||||
GroupBox3: TGroupBox;
|
||||
txtOversample: TEdit;
|
||||
txtFilterRadius: TEdit;
|
||||
udOversample: TUpDown;
|
||||
GroupBox2: TGroupBox;
|
||||
chkMaintain: TCheckBox;
|
||||
cbWidth: TComboBox;
|
||||
cbHeight: TComboBox;
|
||||
GroupBox4: TGroupBox;
|
||||
cmbDepth: TComboBox;
|
||||
chkRender: TCheckBox;
|
||||
txtStrips: TEdit;
|
||||
udStrips: TUpDown;
|
||||
txtEstimator: TEdit;
|
||||
txtEstimatorMin: TEdit;
|
||||
txtEstimatorCurve: TEdit;
|
||||
txtGammaTreshold: TEdit;
|
||||
Panel1: TPanel;
|
||||
Label6: TLabel;
|
||||
Label15: TLabel;
|
||||
Label13: TLabel;
|
||||
Label16: TLabel;
|
||||
Label5: TPanel;
|
||||
Label3: TPanel;
|
||||
Label1: TPanel;
|
||||
Label2: TPanel;
|
||||
Label7: TPanel;
|
||||
Label8: TPanel;
|
||||
Label9: TPanel;
|
||||
Label14: TPanel;
|
||||
Label12: TPanel;
|
||||
Label11: TPanel;
|
||||
Label10: TPanel;
|
||||
txtDensity: TEdit;
|
||||
Label4: TPanel;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
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 txtGammaTresholdChange(Sender: TObject);
|
||||
private
|
||||
FloatFormatSettings: TFormatSettings;
|
||||
Estimator, EstimatorMin, EstimatorCurve: double;
|
||||
Jitters, Batches, Strips: integer;
|
||||
public
|
||||
Filename: string;
|
||||
ImageWidth, ImageHeight, Oversample: Integer;
|
||||
Sample_Density, Filter_Radius: double;
|
||||
GammaTreshold: double;
|
||||
end;
|
||||
|
||||
var
|
||||
ExportCDialog: TExportCDialog;
|
||||
Ratio: double;
|
||||
|
||||
implementation
|
||||
uses Global, Main, ShellAPI;
|
||||
|
||||
{$R *.DFM}
|
||||
|
||||
procedure TExportCDialog.btnBrowseClick(Sender: TObject);
|
||||
begin
|
||||
SaveDialog.InitialDir := ExtractFileDir(txtFilename.text);
|
||||
SaveDialog.Filename := txtFilename.Text;
|
||||
SaveDialog.DefaultExt := 'png';
|
||||
SaveDialog.filterIndex := ExportFileFormat;
|
||||
SaveDialog.Filter := Format('%s|*.png|%s|*.*',
|
||||
[TextByKey('common-filter-png'),
|
||||
TextByKey('common-filter-allfiles')]);
|
||||
if SaveDialog.Execute then
|
||||
begin
|
||||
ExportFileFormat := SaveDialog.FilterIndex;
|
||||
renderPath := ExtractFilePath(SaveDialog.Filename);
|
||||
end;
|
||||
|
||||
end;
|
||||
|
||||
procedure TExportCDialog.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;
|
||||
Batches := 1;
|
||||
Estimator := 9.0;
|
||||
EstimatorMin := 0.0;
|
||||
EstimatorCurve := 0.4;
|
||||
Jitters := 1;
|
||||
GammaTreshold := MainCP.gamma_threshold; //0.01;
|
||||
GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FloatFormatSettings);
|
||||
txtEstimator.Text := FloatToStr(Estimator, FloatFormatSettings);
|
||||
txtEstimatorMin.Text := FloatToStr(EstimatorMin, FloatFormatSettings);
|
||||
txtEstimatorCurve.Text := FloatToStr(EstimatorCurve, FloatFormatSettings);
|
||||
// txtJitters.Text := IntToStr(Jitters);
|
||||
txtGammaTreshold.Text := FloatToStr(GammaTreshold, FloatFormatSettings);
|
||||
end;
|
||||
|
||||
procedure TExportCDialog.btnOKClick(Sender: TObject);
|
||||
begin
|
||||
Filename := txtFilename.text;
|
||||
ImageWidth := StrToInt(cbWidth.Text);
|
||||
ImageHeight := StrToInt(cbHeight.Text);
|
||||
end;
|
||||
|
||||
procedure TExportCDialog.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 TExportCDialog.chkMaintainClick(Sender: TObject);
|
||||
begin
|
||||
Ratio := ImageWidth / ImageHeight;
|
||||
end;
|
||||
|
||||
procedure TExportCDialog.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 TExportCDialog.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 TExportCDialog.txtFilterRadiusChange(Sender: TObject);
|
||||
begin
|
||||
try
|
||||
Filter_Radius := StrToFloat(txtFilterRadius.Text);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TExportCDialog.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 TExportCDialog.txtGammaTresholdChange(Sender: TObject);
|
||||
begin
|
||||
//GammaTreshold := 0.01;
|
||||
try
|
||||
GammaTreshold := StrToFloat(txtGammaTreshold.Text, FloatFormatSettings);
|
||||
except
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TExportCDialog.FormCreate(Sender: TObject);
|
||||
begin
|
||||
btnOK.Caption := TextByKey('common-ok');
|
||||
btnCancel.Caption := TextByKey('common-cancel');
|
||||
Label1.Caption := TextByKey('common-width');
|
||||
Label2.Caption := TextByKey('common-height');
|
||||
GroupBox2.Caption := TextByKey('common-size');
|
||||
Label13.Caption := TextByKey('common-pixels');
|
||||
chkMaintain.Caption := TextByKey('common-keepaspect');
|
||||
GroupBox1.Caption := TextByKey('common-destination');
|
||||
Label10.Caption := TextByKey('common-filename');
|
||||
btnBrowse.Hint := TextByKey('common-browse');
|
||||
GroupBox3.Caption := TextByKey('common-quality');
|
||||
Label5.Caption := TextByKey('common-filterradius');
|
||||
Label4.Caption := TextByKey('common-density');
|
||||
Label3.Caption := TextByKey('common-oversample');
|
||||
Label14.Caption := TextByKey('common-gammathreshold');
|
||||
self.Caption := TextByKey('main-menu-file-exportchaotica');
|
||||
GroupBox4.Caption := TextByKey('export-paramoptions-title');
|
||||
Label7.Caption := TextByKey('export-paramoptions-bufferdepth');
|
||||
Label8.Caption := TextByKey('export-paramoptions-strips');
|
||||
Label9.Caption := TextByKey('export-paramoptions-estimatorradius');
|
||||
Label12.Caption := TextByKey('export-paramoptions-estimatorcurve');
|
||||
Label11.Caption := TextByKey('export-paramoptions-estimatormin');
|
||||
chkRender.Caption := TextByKey('export-paramoptions-dorender');
|
||||
Label6.Caption := TextByKey('export-paramoptions-warningtitle');
|
||||
Label15.Caption := TextByKey('export-paramoptions-warningtext');
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
115
Forms/FormFavorites.dfm
Normal file
115
Forms/FormFavorites.dfm
Normal file
@ -0,0 +1,115 @@
|
||||
object FavoritesForm: TFavoritesForm
|
||||
Left = 493
|
||||
Top = 541
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Favorite Scripts'
|
||||
ClientHeight = 275
|
||||
ClientWidth = 352
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'MS Sans Serif'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnShow = FormShow
|
||||
DesignSize = (
|
||||
352
|
||||
275)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object PageControl1: TPageControl
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 338
|
||||
Height = 231
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
TabOrder = 0
|
||||
end
|
||||
object ListView: TListView
|
||||
Left = 16
|
||||
Top = 16
|
||||
Width = 218
|
||||
Height = 215
|
||||
Anchors = [akLeft, akTop, akRight, akBottom]
|
||||
Columns = <
|
||||
item
|
||||
AutoSize = True
|
||||
Caption = 'Name'
|
||||
end>
|
||||
HideSelection = False
|
||||
ReadOnly = True
|
||||
RowSelect = True
|
||||
ShowColumnHeaders = False
|
||||
TabOrder = 1
|
||||
ViewStyle = vsReport
|
||||
OnChange = ListViewChange
|
||||
end
|
||||
object btnAdd: TButton
|
||||
Left = 241
|
||||
Top = 16
|
||||
Width = 99
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = '&Add'
|
||||
TabOrder = 2
|
||||
TabStop = False
|
||||
OnClick = btnAddClick
|
||||
end
|
||||
object btnRemove: TButton
|
||||
Left = 241
|
||||
Top = 48
|
||||
Width = 99
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = '&Remove'
|
||||
TabOrder = 3
|
||||
TabStop = False
|
||||
OnClick = btnRemoveClick
|
||||
end
|
||||
object btnMoveUp: TButton
|
||||
Left = 241
|
||||
Top = 80
|
||||
Width = 99
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Move &Up'
|
||||
TabOrder = 4
|
||||
TabStop = False
|
||||
OnClick = btnMoveUpClick
|
||||
end
|
||||
object btnMoveDown: TButton
|
||||
Left = 241
|
||||
Top = 112
|
||||
Width = 99
|
||||
Height = 25
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Move &Down'
|
||||
TabOrder = 5
|
||||
TabStop = False
|
||||
OnClick = btnMoveDownClick
|
||||
end
|
||||
object btnOK: TButton
|
||||
Left = 193
|
||||
Top = 246
|
||||
Width = 75
|
||||
Height = 25
|
||||
Anchors = [akRight, akBottom]
|
||||
Caption = '&OK'
|
||||
TabOrder = 6
|
||||
OnClick = btnOKClick
|
||||
end
|
||||
object btnCancel: TButton
|
||||
Left = 273
|
||||
Top = 246
|
||||
Width = 75
|
||||
Height = 25
|
||||
Anchors = [akRight, akBottom]
|
||||
Caption = '&Cancel'
|
||||
TabOrder = 7
|
||||
OnClick = btnCancelClick
|
||||
end
|
||||
end
|
||||
224
Forms/FormFavorites.pas
Normal file
224
Forms/FormFavorites.pas
Normal file
@ -0,0 +1,224 @@
|
||||
{
|
||||
Apophysis Copyright (C) 2001-2004 Mark Townsend
|
||||
Apophysis Copyright (C) 2005-2006 Ronald Hordijk, Piotr Borys, Peter Sdobnov
|
||||
Apophysis Copyright (C) 2007-2008 Piotr Borys, Peter Sdobnov
|
||||
|
||||
Apophysis "3D hack" Copyright (C) 2007-2008 Peter Sdobnov
|
||||
Apophysis "7X" Copyright (C) 2009-2010 Georg Kiehne
|
||||
|
||||
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 FormFavorites;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
|
||||
StdCtrls, ExtCtrls, ComCtrls, Translation;
|
||||
|
||||
type
|
||||
TFavoritesForm = class(TForm)
|
||||
PageControl1: TPageControl;
|
||||
ListView: TListView;
|
||||
btnAdd: TButton;
|
||||
btnRemove: TButton;
|
||||
btnMoveUp: TButton;
|
||||
btnMoveDown: TButton;
|
||||
btnOK: TButton;
|
||||
btnCancel: TButton;
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure btnCancelClick(Sender: TObject);
|
||||
procedure btnOKClick(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure btnAddClick(Sender: TObject);
|
||||
procedure btnRemoveClick(Sender: TObject);
|
||||
procedure ListViewChange(Sender: TObject; Item: TListItem;
|
||||
Change: TItemChange);
|
||||
procedure btnMoveUpClick(Sender: TObject);
|
||||
procedure btnMoveDownClick(Sender: TObject);
|
||||