normalize weights removed
removed duplicate functions some bugs fixed, some bugs added some other changes, can't remember them all ;)
This commit is contained in:
parent
17e6f74a65
commit
a058009ad0
@ -708,9 +708,11 @@ object AdjustForm: TAdjustForm
|
||||
end
|
||||
object cmbPalette: TComboBox
|
||||
Left = 72
|
||||
Top = 79
|
||||
Top = 78
|
||||
Width = 206
|
||||
Height = 19
|
||||
Height = 21
|
||||
BevelInner = bvLowered
|
||||
BevelOuter = bvRaised
|
||||
Style = csOwnerDrawFixed
|
||||
Color = clBlack
|
||||
DropDownCount = 20
|
||||
@ -719,7 +721,7 @@ object AdjustForm: TAdjustForm
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
ItemHeight = 13
|
||||
ItemHeight = 15
|
||||
ParentFont = False
|
||||
ParentShowHint = False
|
||||
ShowHint = False
|
||||
@ -816,105 +818,114 @@ object AdjustForm: TAdjustForm
|
||||
object TabSheet4: TTabSheet
|
||||
Caption = 'Image Size'
|
||||
ImageIndex = 3
|
||||
object Bevel2: TBevel
|
||||
Left = 4
|
||||
Top = 4
|
||||
Width = 137
|
||||
Height = 93
|
||||
Shape = bsFrame
|
||||
end
|
||||
object Bevel1: TBevel
|
||||
Left = 148
|
||||
Top = 4
|
||||
Width = 148
|
||||
Height = 93
|
||||
Shape = bsFrame
|
||||
end
|
||||
object Label2: TLabel
|
||||
Left = 58
|
||||
Left = 14
|
||||
Top = 15
|
||||
Width = 28
|
||||
Height = 13
|
||||
Caption = 'Width'
|
||||
end
|
||||
object Label3: TLabel
|
||||
Left = 58
|
||||
Top = 39
|
||||
Left = 14
|
||||
Top = 41
|
||||
Width = 31
|
||||
Height = 13
|
||||
Caption = 'Height'
|
||||
end
|
||||
object Bevel1: TBevel
|
||||
Left = 48
|
||||
Top = 4
|
||||
Width = 137
|
||||
Height = 93
|
||||
Shape = bsFrame
|
||||
end
|
||||
object Bevel2: TBevel
|
||||
Left = 192
|
||||
Top = 4
|
||||
Width = 148
|
||||
Height = 93
|
||||
Shape = bsFrame
|
||||
end
|
||||
object chkMaintain: TCheckBox
|
||||
Left = 56
|
||||
Top = 68
|
||||
Width = 121
|
||||
Height = 17
|
||||
Caption = 'Maintain aspect ratio'
|
||||
TabOrder = 0
|
||||
OnClick = chkMaintainClick
|
||||
end
|
||||
object btnPreset1: TButton
|
||||
Left = 200
|
||||
Left = 156
|
||||
Top = 12
|
||||
Width = 105
|
||||
Height = 25
|
||||
Caption = 'Preset 1'
|
||||
TabOrder = 1
|
||||
TabOrder = 0
|
||||
OnClick = btnPreset1Click
|
||||
end
|
||||
object btnPreset2: TButton
|
||||
Left = 200
|
||||
Left = 156
|
||||
Top = 38
|
||||
Width = 105
|
||||
Height = 25
|
||||
Caption = 'Preset 2'
|
||||
TabOrder = 2
|
||||
TabOrder = 1
|
||||
OnClick = btnPreset2Click
|
||||
end
|
||||
object btnPreset3: TButton
|
||||
Left = 200
|
||||
Left = 156
|
||||
Top = 64
|
||||
Width = 105
|
||||
Height = 25
|
||||
Caption = 'Preset 3'
|
||||
TabOrder = 3
|
||||
TabOrder = 2
|
||||
OnClick = btnPreset3Click
|
||||
end
|
||||
object btnSet1: TButton
|
||||
Left = 304
|
||||
Left = 260
|
||||
Top = 12
|
||||
Width = 27
|
||||
Height = 25
|
||||
Caption = 'Set'
|
||||
TabOrder = 4
|
||||
TabOrder = 3
|
||||
OnClick = btnSet1Click
|
||||
end
|
||||
object btnSet2: TButton
|
||||
Left = 304
|
||||
Left = 260
|
||||
Top = 38
|
||||
Width = 27
|
||||
Height = 25
|
||||
Caption = 'Set'
|
||||
TabOrder = 5
|
||||
TabOrder = 4
|
||||
OnClick = btnSet2Click
|
||||
end
|
||||
object btnSet3: TButton
|
||||
Left = 304
|
||||
Left = 260
|
||||
Top = 64
|
||||
Width = 27
|
||||
Height = 25
|
||||
Caption = 'Set'
|
||||
TabOrder = 6
|
||||
TabOrder = 5
|
||||
OnClick = btnSet3Click
|
||||
end
|
||||
object btnApplySize: TBitBtn
|
||||
Left = 302
|
||||
Top = 72
|
||||
Width = 75
|
||||
Height = 25
|
||||
Caption = 'Apply'
|
||||
TabOrder = 6
|
||||
OnClick = btnApplySizeClick
|
||||
end
|
||||
object chkMaintain: TCheckBox
|
||||
Left = 14
|
||||
Top = 70
|
||||
Width = 121
|
||||
Height = 19
|
||||
Caption = 'Maintain aspect ratio'
|
||||
TabOrder = 7
|
||||
OnClick = chkMaintainClick
|
||||
end
|
||||
object txtWidth: TComboBox
|
||||
Left = 104
|
||||
Left = 60
|
||||
Top = 12
|
||||
Width = 73
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 7
|
||||
TabOrder = 8
|
||||
Text = '512'
|
||||
OnChange = txtWidthChange
|
||||
OnKeyPress = txtSizeKeyPress
|
||||
@ -926,13 +937,13 @@ object AdjustForm: TAdjustForm
|
||||
'1280')
|
||||
end
|
||||
object txtHeight: TComboBox
|
||||
Left = 104
|
||||
Top = 36
|
||||
Left = 60
|
||||
Top = 38
|
||||
Width = 73
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 8
|
||||
TabOrder = 9
|
||||
Text = '384'
|
||||
OnChange = txtHeightChange
|
||||
OnKeyPress = txtSizeKeyPress
|
||||
|
@ -111,23 +111,24 @@ type
|
||||
ApplicationEvents: TApplicationEvents;
|
||||
lblOffset: TLabel;
|
||||
TabSheet4: TTabSheet;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
chkMaintain: TCheckBox;
|
||||
btnPreset1: TButton;
|
||||
btnPreset2: TButton;
|
||||
btnPreset3: TButton;
|
||||
btnSet1: TButton;
|
||||
btnSet2: TButton;
|
||||
btnSet3: TButton;
|
||||
txtWidth: TComboBox;
|
||||
txtHeight: TComboBox;
|
||||
Bevel1: TBevel;
|
||||
Bevel2: TBevel;
|
||||
btnUndo: TSpeedButton;
|
||||
btnRedo: TSpeedButton;
|
||||
chkTransparent: TCheckBox;
|
||||
btnColorPreset: TSpeedButton;
|
||||
Bevel1: TBevel;
|
||||
btnApplySize: TBitBtn;
|
||||
Label2: TLabel;
|
||||
Label3: TLabel;
|
||||
chkMaintain: TCheckBox;
|
||||
txtWidth: TComboBox;
|
||||
txtHeight: TComboBox;
|
||||
Bevel2: TBevel;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
@ -194,7 +195,7 @@ type
|
||||
|
||||
// --Z-- // gradient functions
|
||||
procedure cmbPaletteChange(Sender: TObject);
|
||||
procedure DrawPalette;
|
||||
// procedure DrawPalette;
|
||||
procedure mnuReverseClick(Sender: TObject);
|
||||
procedure mnuInvertClick(Sender: TObject);
|
||||
procedure btnMenuClick(Sender: TObject);
|
||||
@ -243,6 +244,7 @@ type
|
||||
procedure btnRedoClick(Sender: TObject);
|
||||
procedure GradientImageDblClick(Sender: TObject);
|
||||
procedure btnColorPresetClick(Sender: TObject);
|
||||
procedure btnApplySizeClick(Sender: TObject);
|
||||
|
||||
private
|
||||
Resetting: boolean;
|
||||
@ -320,7 +322,6 @@ begin
|
||||
pw := PrevPnl.Width - 2;
|
||||
ph := PrevPnl.Height - 2;
|
||||
cp.copy(MainCp);
|
||||
// --Z-- actually this isn not correct: // if cp.width > cp.height then
|
||||
if (cp.width / cp.height) > (PrevPnl.Width / PrevPnl.Height) then
|
||||
begin
|
||||
PreviewImage.Width := pw;
|
||||
@ -361,16 +362,17 @@ begin
|
||||
|
||||
GetMainWindowSize;
|
||||
|
||||
Resetting := False;
|
||||
DrawPreview;
|
||||
|
||||
// gradient
|
||||
if cp.cmapindex >= 0 then
|
||||
cmbPalette.ItemIndex := cp.cmapindex;
|
||||
ScrollBar.Position := 0;
|
||||
// ScrollBar.Position := 0;
|
||||
Palette := cp.cmap;
|
||||
BackupPal := cp.cmap;
|
||||
DrawPalette;
|
||||
|
||||
Resetting := False;
|
||||
DrawPreview;
|
||||
|
||||
//DrawPalette;
|
||||
end;
|
||||
|
||||
procedure TAdjustForm.UpdateFlame;
|
||||
@ -388,6 +390,10 @@ begin
|
||||
end;
|
||||
|
||||
procedure TAdjustForm.DrawPreview;
|
||||
var
|
||||
i: integer;
|
||||
Row: pRGBTripleArray;
|
||||
BitMap: TBitMap;
|
||||
begin
|
||||
if not Resetting then begin
|
||||
Render.Stop;
|
||||
@ -406,7 +412,30 @@ begin
|
||||
|
||||
PreviewImage.Refresh; // --Z-- why was commented out? ;-)
|
||||
|
||||
DrawPalette; // (?)
|
||||
//--begin DrawPalette
|
||||
BitMap := TBitMap.Create;
|
||||
try
|
||||
Bitmap.PixelFormat := pf24bit;
|
||||
BitMap.Width := 256;
|
||||
BitMap.Height := 1;
|
||||
|
||||
Row := Bitmap.Scanline[0];
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
with Row[i] do
|
||||
begin
|
||||
rgbtRed := Palette[i][0];
|
||||
rgbtGreen := Palette[i][1];
|
||||
rgbtBlue := Palette[i][2];
|
||||
end;
|
||||
end;
|
||||
|
||||
GradientImage.Picture.Graphic := Bitmap;
|
||||
GradientImage.Refresh;
|
||||
finally
|
||||
BitMap.Free;
|
||||
end;
|
||||
//--end DrawPalette
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1004,7 +1033,7 @@ begin
|
||||
|
||||
MainCp.CmapIndex := cmbPalette.ItemIndex;
|
||||
MainCp.cmap := Palette;
|
||||
BackupPal := Palette;
|
||||
// BackupPal := Palette;
|
||||
if EditForm.visible then EditForm.UpdateDisplay;
|
||||
if MutateForm.Visible then MutateForm.UpdateDisplay;
|
||||
|
||||
@ -1046,10 +1075,10 @@ begin
|
||||
|
||||
Palette := Pal;
|
||||
BackupPal := Pal;
|
||||
DrawPalette;
|
||||
// DrawPalette;
|
||||
|
||||
cp.copy(MainCp);
|
||||
//? DrawPreview;
|
||||
{//?} DrawPreview;
|
||||
end;
|
||||
|
||||
procedure HSVToRGB(H, S, V: real; var Rb, Gb, Bb: integer);
|
||||
@ -1204,6 +1233,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{
|
||||
procedure TAdjustForm.DrawPalette;
|
||||
var
|
||||
i: integer;
|
||||
@ -1235,16 +1265,19 @@ begin
|
||||
BitMap.Free;
|
||||
end;
|
||||
end;
|
||||
}
|
||||
|
||||
procedure TAdjustForm.cmbPaletteChange(Sender: TObject);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
if Resetting then exit;
|
||||
|
||||
i := cmbPalette.ItemIndex;
|
||||
GetCmap(i, 1, Palette);
|
||||
BackupPal := Palette;
|
||||
ScrollBar.Position := 0;
|
||||
DrawPalette;
|
||||
//DrawPalette;
|
||||
// MainForm.UpdateUndo;
|
||||
Apply;
|
||||
end;
|
||||
@ -1393,7 +1426,7 @@ begin
|
||||
if ScrollCode = scEndScroll then
|
||||
begin
|
||||
GradientChanged:=false;
|
||||
//Apply;
|
||||
Apply;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -1680,9 +1713,9 @@ begin
|
||||
|
||||
for i := 0 to 255 do
|
||||
begin
|
||||
Palette[i][0] := BackupPal[(255 + i - offset) and $FF][0];
|
||||
Palette[i][1] := BackupPal[(255 + i - offset) and $FF][1];
|
||||
Palette[i][2] := BackupPal[(255 + i - offset) and $FF][2];
|
||||
Palette[i][0] := BackupPal[(256 + i - offset) and $FF][0];
|
||||
Palette[i][1] := BackupPal[(256 + i - offset) and $FF][1];
|
||||
Palette[i][2] := BackupPal[(256 + i - offset) and $FF][2];
|
||||
end;
|
||||
cp.CmapIndex := cmbPalette.ItemIndex;
|
||||
cp.cmap := Palette;
|
||||
@ -1773,9 +1806,6 @@ procedure TAdjustForm.SetMainWindowSize;
|
||||
var
|
||||
xtot, ytot: integer;
|
||||
begin
|
||||
// xdif := MainForm.Width - MainForm.Image.Width;
|
||||
// ydif := MainForm.Height - MainForm.Image.Height;
|
||||
|
||||
xtot := ImageWidth + (MainForm.Width - MainForm.Image.Width);
|
||||
ytot := ImageHeight + (MainForm.Height - MainForm.Image.Height);
|
||||
if xtot > Screen.Width then
|
||||
@ -1878,5 +1908,10 @@ begin
|
||||
cmbPaletteChange(Sender);
|
||||
end;
|
||||
|
||||
procedure TAdjustForm.btnApplySizeClick(Sender: TObject);
|
||||
begin
|
||||
SetMainWindowSize;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -470,6 +470,7 @@ 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;
|
||||
|
@ -21,17 +21,48 @@ unit ControlPoint;
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Windows, Cmap, Xform, XFormMan;
|
||||
Classes, Windows, Cmap, XForm, XFormMan;
|
||||
|
||||
const
|
||||
EPS = 1E-10;
|
||||
|
||||
NXFORMS = 100; // --Z-- I don't like limitations! 8-[]
|
||||
|
||||
SUB_BATCH_SIZE = 10000;
|
||||
PREFILTER_WHITE = (1 shl 26);
|
||||
FILTER_CUTOFF = 1.8;
|
||||
BRIGHT_ADJUST = 2.3;
|
||||
FUSE = 15;
|
||||
|
||||
// ---- MyTypes ----
|
||||
|
||||
type
|
||||
TTriangle = record
|
||||
x: array[0..2] of double;
|
||||
y: array[0..2] of double;
|
||||
end;
|
||||
TTriangles = array[-1..NXFORMS] of TTriangle;
|
||||
TSPoint = record
|
||||
x: double;
|
||||
y: double;
|
||||
end;
|
||||
TMapPalette = record
|
||||
Red: array[0..255] of byte;
|
||||
Green: array[0..255] of byte;
|
||||
Blue: array[0..255] of byte;
|
||||
end;
|
||||
TColorMaps = record
|
||||
Identifier: string;
|
||||
UGRFile: string;
|
||||
end;
|
||||
pPixArray = ^TPixArray;
|
||||
TPixArray = array[0..1279, 0..1023, 0..3] of integer;
|
||||
pPreviewPixArray = ^TPreviewPixArray;
|
||||
TPreviewPixArray = array[0..159, 0..119, 0..3] of integer;
|
||||
TFileType = (ftIfs, ftFla, ftXML);
|
||||
|
||||
// -----
|
||||
|
||||
type //?
|
||||
PLongintArray = ^TLongintArray;
|
||||
TLongintArray = array[0..8192] of Longint;
|
||||
@ -121,6 +152,15 @@ type
|
||||
|
||||
function HasNewVariants: boolean;
|
||||
|
||||
// CP-specific functions moved from unit Main
|
||||
function NumXForms: integer;
|
||||
function TrianglesFromCP(var Triangles: TTriangles): integer;
|
||||
procedure EqualizeWeights;
|
||||
procedure NormalizeWeights;
|
||||
procedure RandomizeWeights;
|
||||
procedure ComputeWeights(Triangles: TTriangles; t: integer);
|
||||
procedure GetFromTriangles(const Triangles: TTriangles; const t: integer);
|
||||
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
|
||||
@ -1783,5 +1823,185 @@ begin
|
||||
end;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// --Z-- cp-specific functions moved here from MainForm
|
||||
//
|
||||
|
||||
function TControlPoint.NumXForms: integer;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
//...
|
||||
Result := NXFORMS;
|
||||
for i := 0 to NXFORMS - 1 do
|
||||
begin
|
||||
if xform[i].density = 0 then
|
||||
begin
|
||||
Result := i;
|
||||
Break;
|
||||
end;
|
||||
end;
|
||||
Result := i;
|
||||
end;
|
||||
|
||||
function TControlPoint.TrianglesFromCP(var Triangles: TTriangles): integer;
|
||||
{ Sets up the triangles from the IFS code }
|
||||
var
|
||||
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;
|
||||
Result := NumXForms;
|
||||
if ReferenceMode > 0 then
|
||||
begin
|
||||
for i := 0 to Result-1 do
|
||||
begin
|
||||
a := xform[i].c[0][0];
|
||||
b := xform[i].c[0][1];
|
||||
c := xform[i].c[1][0];
|
||||
d := xform[i].c[1][1];
|
||||
e := xform[i].c[2][0];
|
||||
f := 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;
|
||||
|
||||
if ReferenceMode = 1 then
|
||||
begin
|
||||
Triangles[-1].x[0] := right-left;
|
||||
Triangles[-1].y[0] := 0;
|
||||
Triangles[-1].x[1] := 0;
|
||||
Triangles[-1].y[1] := 0;
|
||||
Triangles[-1].x[2] := 0;
|
||||
Triangles[-1].y[2] := -(top-bottom);
|
||||
end
|
||||
else begin
|
||||
Triangles[-1].x[0] := right;
|
||||
Triangles[-1].y[0] := -bottom;
|
||||
Triangles[-1].x[1] := left;
|
||||
Triangles[-1].y[1] := -bottom;
|
||||
Triangles[-1].x[2] := left;
|
||||
Triangles[-1].y[2] := -top;
|
||||
end;
|
||||
end
|
||||
else
|
||||
begin
|
||||
Triangles[-1].x[0] := 1; Triangles[-1].y[0] := 0; // "x"
|
||||
Triangles[-1].x[1] := 0; Triangles[-1].y[1] := 0; // "0"
|
||||
Triangles[-1].x[2] := 0; Triangles[-1].y[2] := -1; // "y"
|
||||
end;
|
||||
|
||||
for j := 0 to Result-1 do
|
||||
begin
|
||||
a := xform[j].c[0][0];
|
||||
b := xform[j].c[0][1];
|
||||
c := xform[j].c[1][0];
|
||||
d := xform[j].c[1][1];
|
||||
e := xform[j].c[2][0];
|
||||
f := 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 j := -1 to Result-1 do
|
||||
for i := 0 to 2 do
|
||||
triangles[j].y[i] := -triangles[j].y[i];
|
||||
end;
|
||||
|
||||
procedure TControlPoint.EqualizeWeights;
|
||||
var
|
||||
t, i: integer;
|
||||
begin
|
||||
t := NumXForms;
|
||||
for i := 0 to t - 1 do
|
||||
xform[i].density := 0.5;
|
||||
end;
|
||||
|
||||
procedure TControlPoint.NormalizeWeights;
|
||||
var
|
||||
i: integer;
|
||||
td: double;
|
||||
begin
|
||||
td := 0.0;
|
||||
for i := 0 to NumXForms - 1 do
|
||||
td := td + xform[i].Density;
|
||||
if (td < 0.001) then
|
||||
EqualizeWeights
|
||||
else
|
||||
for i := 0 to NumXForms - 1 do
|
||||
xform[i].Density := xform[i].Density / td;
|
||||
end;
|
||||
|
||||
procedure TControlPoint.RandomizeWeights;
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 0 to Transforms - 1 do
|
||||
xform[i].Density := Random;
|
||||
end;
|
||||
|
||||
procedure TControlPoint.ComputeWeights(Triangles: TTriangles; t: integer);
|
||||
// Caclulate transform weight from triangle areas
|
||||
var
|
||||
i: integer;
|
||||
total_area: double;
|
||||
begin
|
||||
total_area := 0;
|
||||
for i := 0 to t - 1 do
|
||||
begin
|
||||
xform[i].Density := triangle_area(Triangles[i]);
|
||||
total_area := total_area + xform[i].Density;
|
||||
end;
|
||||
for i := 0 to t - 1 do
|
||||
begin
|
||||
xform[i].Density := xform[i].Density / total_area;
|
||||
end;
|
||||
//? cp1.NormalizeWeights;
|
||||
end;
|
||||
|
||||
procedure TControlPoint.GetFromTriangles(const Triangles: TTriangles; const t: integer);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 0 to t-1 do
|
||||
begin
|
||||
solve3(Triangles[-1].x[0], -Triangles[-1].y[0], Triangles[i].x[0],
|
||||
Triangles[-1].x[1], -Triangles[-1].y[1], Triangles[i].x[1],
|
||||
Triangles[-1].x[2], -Triangles[-1].y[2], Triangles[i].x[2],
|
||||
xform[i].c[0][0], xform[i].c[1][0], xform[i].c[2][0]);
|
||||
|
||||
solve3(Triangles[-1].x[0], -Triangles[-1].y[0], -Triangles[i].y[0],
|
||||
Triangles[-1].x[1], -Triangles[-1].y[1], -Triangles[i].y[1],
|
||||
Triangles[-1].x[2], -Triangles[-1].y[2], -Triangles[i].y[2],
|
||||
xform[i].c[0][1], xform[i].c[1][1], xform[i].c[2][1]);
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
|
@ -335,7 +335,7 @@ type
|
||||
// --Z-- functions moved from outside (?)
|
||||
procedure ShowSelectedInfo;
|
||||
procedure Scale(var fx, fy: double; x, y: integer);
|
||||
procedure ReadjustWeights(var cp: TControlPoint);
|
||||
// procedure ReadjustWeights(var cp: TControlPoint);
|
||||
|
||||
public
|
||||
cp: TControlPoint;
|
||||
@ -620,8 +620,10 @@ begin
|
||||
PreviewImage.refresh;
|
||||
end;
|
||||
|
||||
(*
|
||||
procedure TEditForm.ReadjustWeights(var cp: TControlPoint);
|
||||
{ Thanks to Rudy...code from Chaos}
|
||||
{ Thanks to Rudy...code from Chaos }
|
||||
// --Z-- and thanks to me for removing this! ;-)
|
||||
var
|
||||
total, othertotals, excess: double;
|
||||
t, i: integer;
|
||||
@ -645,6 +647,7 @@ begin
|
||||
//z cp.xform[i].density := cp.xform[i].density - cp.xform[i].density / othertotals * excess;
|
||||
cp.xform[i].density := cp.xform[i].density * excess; // --Z--
|
||||
end;
|
||||
*)
|
||||
|
||||
procedure TEditForm.ShowSelectedInfo;
|
||||
var
|
||||
@ -783,8 +786,8 @@ begin
|
||||
cp.xform[i].c[0][1], cp.xform[i].c[1][1], cp.xform[i].c[2][1]);
|
||||
end;
|
||||
|
||||
GetXForms(cp, MainTriangles, transforms);
|
||||
if not chkPreserve.checked then ComputeWeights(cp, MainTriangles, transforms);
|
||||
cp.GetFromTriangles(MainTriangles, transforms);
|
||||
// if not chkPreserve.checked then ComputeWeights(cp, MainTriangles, transforms);
|
||||
DrawPreview;
|
||||
ShowSelectedInfo;
|
||||
TriangleView.Refresh;;
|
||||
@ -794,8 +797,8 @@ procedure TEditForm.UpdateFlame(DrawMain: boolean);
|
||||
begin
|
||||
//; MainForm.StopThread;
|
||||
StatusBar.Panels[2].Text := Format('Zoom: %f', [GraphZoom]);
|
||||
GetXForms(cp, MainTriangles, transforms);
|
||||
if not chkPreserve.Checked then ComputeWeights(cp, MainTriangles, transforms);
|
||||
cp.GetFromTriangles(MainTriangles, transforms);
|
||||
// if not chkPreserve.Checked then ComputeWeights(cp, MainTriangles, transforms);
|
||||
DrawPreview;
|
||||
ShowSelectedInfo;
|
||||
TriangleView.Refresh;
|
||||
@ -970,7 +973,6 @@ begin
|
||||
end;
|
||||
// draw axis
|
||||
Pen.Color := GridColor1;
|
||||
// Pen.Style := psSolid;
|
||||
ax := integer(round(ix - gCenterX*sc));
|
||||
ay := integer(round(iy + gCentery*sc));
|
||||
MoveTo(ax, 0);
|
||||
@ -981,15 +983,17 @@ begin
|
||||
{Reference Triangle}
|
||||
Pen.Style := psDot;
|
||||
Pen.color := pnlReference.Color;
|
||||
brush.Color := gridColor1 shr 1 and $7f7f7f;
|
||||
a := ToScreen(MainTriangles[-1].x[0], MainTriangles[-1].y[0]);
|
||||
b := ToScreen(MainTriangles[-1].x[1], MainTriangles[-1].y[1]);
|
||||
c := ToScreen(MainTriangles[-1].x[2], MainTriangles[-1].y[2]);
|
||||
Polyline([a, b, c, a]);
|
||||
|
||||
brush.Color := pnlBackColor.Color;
|
||||
Font.color := Pen.color;
|
||||
TextOut(c.x-9, c.y-12, 'C');
|
||||
TextOut(b.x-8, b.y+1, 'B');
|
||||
TextOut(a.x+2, a.y+1, 'A');
|
||||
TextOut(b.x+2, b.y+1, 'B');
|
||||
TextOut(c.x+2, c.y+1, 'C');
|
||||
|
||||
Pen.Style := psSolid;
|
||||
|
||||
@ -1036,24 +1040,17 @@ begin
|
||||
dx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.x;
|
||||
dy := MainTriangles[SelectedTriangle].y[SelectedCorner] - Pivot.y;
|
||||
d := Hypot(dx, dy);
|
||||
// d := dist(Pivot.x, Pivot.y,
|
||||
// MainTriangles[SelectedTriangle].x[SelectedCorner], MainTriangles[SelectedTriangle].y[SelectedCorner]);
|
||||
end
|
||||
else begin
|
||||
// d := MinDouble;
|
||||
dx := MainTriangles[SelectedTriangle].x[0] - Pivot.x;
|
||||
dy := MainTriangles[SelectedTriangle].y[0] - Pivot.y;
|
||||
d := Hypot(dx, dy);
|
||||
for i := 1 to 2 do
|
||||
begin
|
||||
// tx := MainTriangles[SelectedTriangle].x[i] - Pivot.x;
|
||||
// ty := MainTriangles[SelectedTriangle].y[i] - Pivot.y;
|
||||
d1 := Hypot(tx, ty);
|
||||
d1 := dist(Pivot.x, Pivot.y, MainTriangles[SelectedTriangle].x[i], MainTriangles[SelectedTriangle].y[i]);
|
||||
if d1 > d then begin
|
||||
d := d1;
|
||||
// dx := tx;
|
||||
// dy := ty;
|
||||
end;
|
||||
end;
|
||||
d1 := Hypot(dx, dy);
|
||||
@ -1705,7 +1702,8 @@ begin
|
||||
Transforms := Transforms + 1;
|
||||
MainTriangles[Transforms - 1] := MainTriangles[-1];
|
||||
SelectedTriangle := Transforms - 1;
|
||||
ComputeWeights(cp, MainTriangles, transforms);
|
||||
// ComputeWeights(cp, MainTriangles, transforms);
|
||||
cp.xform[Transforms - 1].density := 0.5;
|
||||
cp.xform[Transforms - 1].vars[0] := 1;
|
||||
for i := 1 to NRVAR - 1 do
|
||||
cp.xform[Transforms - 1].vars[i] := 0;
|
||||
@ -1725,7 +1723,8 @@ begin
|
||||
MainForm.UpdateUndo;
|
||||
Transforms := Transforms + 1;
|
||||
MainTriangles[Transforms - 1] := MainTriangles[SelectedTriangle];
|
||||
ComputeWeights(cp, MainTriangles, transforms);
|
||||
// ComputeWeights(cp, MainTriangles, transforms);
|
||||
cp.xform[Transforms - 1].density := cp.xform[SelectedTriangle].density;
|
||||
for i := 0 to NRVAR - 1 do
|
||||
cp.xform[Transforms - 1].vars[i] := cp.xform[SelectedTriangle].vars[i];
|
||||
SelectedTriangle := Transforms - 1;
|
||||
@ -1802,7 +1801,7 @@ begin
|
||||
else if Sender = txtP then
|
||||
begin
|
||||
cp.xform[SelectedTriangle].density := StrToFloat(TEdit(Sender).Text);
|
||||
ReadjustWeights(cp);
|
||||
//ReadjustWeights(cp);
|
||||
TEdit(Sender).Text := Format('%.6g', [cp.xform[SelectedTriangle].density]);
|
||||
end;
|
||||
MainForm.UpdateUndo;
|
||||
@ -1864,7 +1863,7 @@ begin
|
||||
else if Sender = txtP then
|
||||
begin
|
||||
cp.xform[SelectedTriangle].density := StrToFloat(TEdit(Sender).Text);
|
||||
ReadjustWeights(cp);
|
||||
//ReadjustWeights(cp);
|
||||
TEdit(Sender).Text := Format('%.6g', [cp.xform[SelectedTriangle].density]);
|
||||
end;
|
||||
MainForm.UpdateUndo;
|
||||
@ -1905,7 +1904,7 @@ begin
|
||||
begin
|
||||
MainForm.UpdateUndo;
|
||||
cp.xform[SelectedTriangle].density := NewVal;
|
||||
ReadjustWeights(cp);
|
||||
//ReadjustWeights(cp);
|
||||
UpdateFlame(True);
|
||||
end;
|
||||
end;
|
||||
@ -1937,7 +1936,7 @@ begin
|
||||
begin
|
||||
MainForm.UpdateUndo;
|
||||
cp.xform[SelectedTriangle].density := NewVal;
|
||||
ReadjustWeights(cp);
|
||||
//ReadjustWeights(cp);
|
||||
UpdateFlame(True);
|
||||
end;
|
||||
end;
|
||||
@ -2195,7 +2194,7 @@ begin
|
||||
4: cp.xform[SelectedTriangle].c[2][0] := NewVal; //e
|
||||
5: cp.xform[SelectedTriangle].c[2][1] := NewVal; //f
|
||||
end;
|
||||
MainForm.TrianglesFromCP(cp, MainTriangles);
|
||||
cp.TrianglesFromCP(MainTriangles);
|
||||
ShowSelectedInfo;
|
||||
UpdateFlame(true);
|
||||
end;
|
||||
@ -2256,7 +2255,7 @@ begin
|
||||
4: cp.xform[SelectedTriangle].c[2][0] := NewVal; //e
|
||||
5: cp.xform[SelectedTriangle].c[2][1] := NewVal; //f
|
||||
end;
|
||||
MainForm.TrianglesFromCP(cp, MainTriangles);
|
||||
cp.TrianglesFromCP(MainTriangles);
|
||||
ShowSelectedInfo;
|
||||
UpdateFlame(true);
|
||||
end;
|
||||
@ -2356,7 +2355,7 @@ begin
|
||||
v := StrToFloat(txtXFormColor.Text);
|
||||
except on EConvertError do
|
||||
begin
|
||||
txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);//FLoatToStr(cp.xform[SelectedTriangle].color);
|
||||
txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
@ -2380,7 +2379,7 @@ begin
|
||||
v := StrToFloat(txtXFormColor.Text);
|
||||
except on EConvertError do
|
||||
begin
|
||||
txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);//FLoattoStr(cp.xform[SelectedTriangle].color);
|
||||
txtXformColor.text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
@ -111,7 +111,7 @@ var
|
||||
VariationOptions: int64;
|
||||
{ For random gradients }
|
||||
MinNodes, MaxNodes, MinHue, MaxHue, MinSat, MaxSat, MinLum, MaxLum: integer;
|
||||
FixedReference: boolean;
|
||||
ReferenceMode: integer;//FixedReference: boolean;
|
||||
BatchSize: Integer;
|
||||
Compatibility: integer; //0 = original, 1 = Drave's
|
||||
Favorites: TStringList;
|
||||
@ -183,6 +183,7 @@ 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);
|
||||
@ -193,6 +194,12 @@ begin
|
||||
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;
|
||||
|
@ -319,7 +319,7 @@ type
|
||||
procedure ParseXML(var cp1: TControlPoint; const params: PCHAR);
|
||||
function SaveFlame(cp1: TControlPoint; title, filename: string): boolean;
|
||||
function SaveXMLFlame(const cp1: TControlPoint; title, filename: string): boolean;
|
||||
function TrianglesFromCP(const cp1: TControlPoint; var Triangles: TTriangles): integer;
|
||||
//function TrianglesFromCP(const cp1: TControlPoint; var Triangles: TTriangles): integer;
|
||||
procedure DisplayHint(Sender: TObject);
|
||||
procedure OnProgress(prog: double);
|
||||
procedure DrawFlame;
|
||||
@ -345,17 +345,16 @@ type
|
||||
procedure ListXML(FileName: string; sel: integer);
|
||||
function EntryExists(En, Fl: string): boolean;
|
||||
function XMLEntryExists(title, filename: string): boolean;
|
||||
procedure ComputeWeights(var cp1: TControlPoint; Triangles: TTriangles; t: integer);
|
||||
//procedure ComputeWeights(var cp1: TControlPoint; Triangles: TTriangles; t: integer);
|
||||
function DeleteEntry(Entry, FileName: string): boolean;
|
||||
function CleanIdentifier(ident: string): string;
|
||||
function CleanUPRTitle(ident: string): string;
|
||||
procedure GetXForms(var cp1: TControlPoint; const Triangles: TTriangles; const t: integer);
|
||||
function GradientString(c: TColorMap): string;
|
||||
function PackVariations: cardinal;
|
||||
procedure UnpackVariations(v: integer);
|
||||
function NumXForms(const cp: TControlPoint): integer;
|
||||
procedure NormalizeWeights(var cp: TControlPoint);
|
||||
procedure EqualizeWeights(var cp: TControlPoint);
|
||||
//procedure NormalizeWeights(var cp: TControlPoint);
|
||||
//procedure EqualizeWeights(var cp: TControlPoint);
|
||||
procedure MultMatrix(var s: TMatrix; const m: TMatrix);
|
||||
procedure ListFlames(FileName: string; sel: integer);
|
||||
procedure ListIFS(FileName: string; sel: integer);
|
||||
@ -473,6 +472,7 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
{
|
||||
procedure EqualizeWeights(var cp: TControlPoint);
|
||||
var
|
||||
t, i: integer;
|
||||
@ -496,6 +496,7 @@ begin
|
||||
for i := 0 to NumXForms(cp) - 1 do
|
||||
cp.xform[i].Density := cp.xform[i].Density / td;
|
||||
end;
|
||||
}
|
||||
|
||||
function PackVariations: cardinal;
|
||||
{ Packs the variation options into an integer with Linear as lowest bit }
|
||||
@ -1365,7 +1366,7 @@ begin
|
||||
pal := ''; hue := '';
|
||||
// if sheep then
|
||||
// begin
|
||||
pal := 'palette="' + IntToStr(cp1.cmapindex) + '" ';
|
||||
if cp1.cmapindex >= 0 then pal := 'palette="' + IntToStr(cp1.cmapindex) + '" ';
|
||||
hue := 'hue="' + format('%g', [cp1.hue_rotation]) + '" ';
|
||||
// end;
|
||||
if Trim(SheepNick) <> '' then nick := 'nick="' + Trim(SheepNick) + '"';
|
||||
@ -1832,113 +1833,9 @@ end;
|
||||
|
||||
{ ************************** IFS and triangle stuff ************************* }
|
||||
|
||||
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;
|
||||
{ ---Z--- moved to ControlPoint ---Z--- }
|
||||
|
||||
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 TMainForm.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] := 1; Triangles[-1].y[0] := 0; // "x"
|
||||
Triangles[-1].x[1] := 0; Triangles[-1].y[1] := 0; // "0"
|
||||
Triangles[-1].x[2] := 0; Triangles[-1].y[2] := -1; // "y"
|
||||
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;
|
||||
{ // unused function, hmmm...
|
||||
|
||||
procedure CP_compute(var cp1: TControlPoint; t1, t0: TTriangle; const i: integer);
|
||||
begin
|
||||
@ -1952,25 +1849,7 @@ begin
|
||||
t0.x[2], t0.y[2], t1.y[2],
|
||||
cp1.xform[i].c[0][1], cp1.xform[i].c[1][1], cp1.xform[i].c[2][1]);
|
||||
end;
|
||||
|
||||
procedure GetXForms(var cp1: TControlPoint; const Triangles: TTriangles; const t: integer);
|
||||
var
|
||||
i: integer;
|
||||
begin
|
||||
for i := 0 to t - 1 do
|
||||
begin
|
||||
solve3(Triangles[-1].x[0], -Triangles[-1].y[0], Triangles[i].x[0],
|
||||
Triangles[-1].x[1], -Triangles[-1].y[1], Triangles[i].x[1],
|
||||
Triangles[-1].x[2], -Triangles[-1].y[2], Triangles[i].x[2],
|
||||
cp1.xform[i].c[0][0], cp1.xform[i].c[1][0], cp1.xform[i].c[2][0]);
|
||||
|
||||
solve3(Triangles[-1].x[0], -Triangles[-1].y[0], -Triangles[i].y[0],
|
||||
Triangles[-1].x[1], -Triangles[-1].y[1], -Triangles[i].y[1],
|
||||
Triangles[-1].x[2], -Triangles[-1].y[2], -Triangles[i].y[2],
|
||||
cp1.xform[i].c[0][1], cp1.xform[i].c[1][1], cp1.xform[i].c[2][1]);
|
||||
end;
|
||||
|
||||
end;
|
||||
}
|
||||
|
||||
function FlameToString(Title: string): string;
|
||||
{ Creates a string containing the formated flame parameter set }
|
||||
@ -2200,7 +2079,8 @@ procedure TMainForm.mnuNormalWeightsClick(Sender: TObject);
|
||||
begin
|
||||
StopThread;
|
||||
UpdateUndo;
|
||||
ComputeWeights(MainCp, MainTriangles, transforms);
|
||||
// TODO: ...something
|
||||
// ComputeWeights(MainCp, MainTriangles, transforms);
|
||||
RedrawTimer.Enabled := True;
|
||||
UpdateWindows;
|
||||
end;
|
||||
@ -2211,7 +2091,7 @@ begin
|
||||
UpdateUndo;
|
||||
inc(MainSeed);
|
||||
RandSeed := MainSeed;
|
||||
RandomWeights(MainCp);
|
||||
MainCp.RandomizeWeights;
|
||||
RedrawTimer.Enabled := True;
|
||||
UpdateWindows;
|
||||
end;
|
||||
@ -2338,7 +2218,7 @@ begin
|
||||
inc(RandomIndex);
|
||||
MainCp.name := RandomPrefix + RandomDate + '-' +
|
||||
IntToStr(RandomIndex);
|
||||
Transforms := TrianglesFromCP(MainCp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
|
||||
if AdjustForm.visible then
|
||||
AdjustForm.UpdateDisplay;
|
||||
@ -2353,7 +2233,7 @@ procedure TMainForm.mnuEqualizeClick(Sender: TObject);
|
||||
begin
|
||||
StopThread;
|
||||
UpdateUndo;
|
||||
EqualizeWeights(maincp);
|
||||
MainCP.EqualizeWeights;
|
||||
RedrawTimer.Enabled := True;
|
||||
UpdateWindows;
|
||||
end;
|
||||
@ -2817,7 +2697,7 @@ begin
|
||||
btnUndo.Enabled := false;
|
||||
btnRedo.enabled := false;
|
||||
|
||||
Transforms := TrianglesFromCP(MainCp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
|
||||
UndoIndex := 0;
|
||||
UndoMax := 0;
|
||||
@ -2942,7 +2822,7 @@ begin
|
||||
// Zoom := maincp.zoom;
|
||||
Center[0] := maincp.Center[0];
|
||||
Center[1] := maincp.Center[1];
|
||||
NormalizeWeights(maincp);
|
||||
MainCP.NormalizeWeights;
|
||||
mnuSaveUndo.Enabled := false;
|
||||
mnuUndo.Enabled := False;
|
||||
mnuPopUndo.Enabled := False;
|
||||
@ -2956,7 +2836,7 @@ begin
|
||||
AdjustForm.btnRedo.enabled := false;
|
||||
btnUndo.Enabled := false;
|
||||
btnRedo.enabled := false;
|
||||
Transforms := TrianglesFromCP(maincp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
// Fix Apophysis 1.0 parameters with negative color parameteres!
|
||||
for i := 0 to Transforms - 1 do
|
||||
if maincp.xform[i].color < 0 then maincp.xform[i].color := 0;
|
||||
@ -3054,8 +2934,8 @@ begin
|
||||
Center[0] := maincp.Center[0];
|
||||
Center[1] := maincp.Center[1];
|
||||
// cp.CalcBoundbox;
|
||||
NormalizeWeights(maincp);
|
||||
Transforms := TrianglesFromCP(maincp, MainTriangles);
|
||||
MainCP.NormalizeWeights;
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
// Trim undo index from title
|
||||
maincp.name := Copy(Fstrings[0], 6, length(Fstrings[0]) - 7);
|
||||
|
||||
@ -3306,6 +3186,7 @@ begin
|
||||
StopThread;
|
||||
UpdateUndo;
|
||||
maincp.cmap := Pal;
|
||||
maincp.cmapindex := -1;
|
||||
AdjustForm.UpdateDisplay;
|
||||
|
||||
if EditForm.Visible then EditForm.UpdateDisplay;
|
||||
@ -3613,7 +3494,7 @@ begin
|
||||
center[1] := maincp.center[1];
|
||||
RedrawTimer.Enabled := True;
|
||||
Application.ProcessMessages;
|
||||
Transforms := TrianglesFromCP(maincp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
UpdateWindows;
|
||||
end;
|
||||
finally
|
||||
@ -3752,7 +3633,7 @@ begin
|
||||
if nxform < NXFORMS then
|
||||
for i := nxform to NXFORMS - 1 do
|
||||
cp1.xform[i].density := 0;
|
||||
NormalizeWeights(cp1);
|
||||
cp1.NormalizeWeights;
|
||||
// Check for symmetry parameter
|
||||
if ParseCp.symmetry <> 0 then
|
||||
begin
|
||||
@ -3766,7 +3647,7 @@ begin
|
||||
if Clipboard.HasFormat(CF_TEXT) then begin
|
||||
UpdateUndo;
|
||||
ParseXML(MainCP, PCHAR(Clipboard.AsText));
|
||||
Transforms := TrianglesFromCP(MainCp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
Statusbar.Panels[2].Text := MainCp.name;
|
||||
if ResizeOnLoad then ResizeWindow;
|
||||
RedrawTimer.Enabled := True;
|
||||
@ -3782,10 +3663,7 @@ begin
|
||||
txt := Trim(FlameToXML(Maincp, false, true));
|
||||
Clipboard.SetTextBuf(PChar(txt));
|
||||
mnuPaste.enabled := true;
|
||||
//z btnPaste.enabled := true;
|
||||
|
||||
// GradientForm.mnuPaste.enabled := False;
|
||||
// GradientForm.btnPaste.enabled := False;
|
||||
AdjustForm.mnuPaste.enabled := False;
|
||||
AdjustForm.btnPaste.enabled := False;
|
||||
end;
|
||||
|
@ -119,7 +119,7 @@ begin
|
||||
MainForm.StopThread;
|
||||
MainForm.UpdateUndo;
|
||||
MainCp.Copy(cps[0]);
|
||||
Transforms := MainForm.TrianglesFromCP(MainCp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
MainCp.cmap := cmap;
|
||||
MainCp.name := name;
|
||||
MainCp.nick := nick;
|
||||
|
@ -17,9 +17,9 @@
|
||||
}
|
||||
unit MyTypes;
|
||||
|
||||
|
||||
interface
|
||||
uses ControlPoint;
|
||||
|
||||
{uses ControlPoint;
|
||||
|
||||
type
|
||||
TTriangle = record
|
||||
@ -45,7 +45,7 @@ type
|
||||
pPreviewPixArray = ^TPreviewPixArray;
|
||||
TPreviewPixArray = array[0..159, 0..119, 0..3] of integer;
|
||||
TFileType = (ftIfs, ftFla, ftXML);
|
||||
|
||||
}
|
||||
implementation
|
||||
|
||||
end.
|
||||
|
@ -5,7 +5,7 @@ object OptionsForm: TOptionsForm
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Options'
|
||||
ClientHeight = 296
|
||||
ClientWidth = 470
|
||||
ClientWidth = 467
|
||||
Color = clBtnFace
|
||||
Font.Charset = ANSI_CHARSET
|
||||
Font.Color = clWindowText
|
||||
@ -42,7 +42,7 @@ object OptionsForm: TOptionsForm
|
||||
object Tabs: TPageControl
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 449
|
||||
Width = 451
|
||||
Height = 249
|
||||
ActivePage = GeneralPage
|
||||
TabOrder = 0
|
||||
@ -51,86 +51,44 @@ object OptionsForm: TOptionsForm
|
||||
HelpContext = 1
|
||||
Caption = 'General'
|
||||
object chkConfirmDel: TCheckBox
|
||||
Left = 208
|
||||
Top = 8
|
||||
Left = 144
|
||||
Top = 139
|
||||
Width = 97
|
||||
Height = 17
|
||||
HelpContext = 1005
|
||||
Caption = 'Confirm delete'
|
||||
TabOrder = 2
|
||||
end
|
||||
object GroupBox13: TGroupBox
|
||||
Left = 8
|
||||
Top = 2
|
||||
Width = 193
|
||||
Height = 71
|
||||
Caption = 'Smooth palette'
|
||||
TabOrder = 0
|
||||
object Label8: TLabel
|
||||
Left = 10
|
||||
Top = 18
|
||||
Width = 78
|
||||
Height = 13
|
||||
Caption = 'Number of tries:'
|
||||
end
|
||||
object Label10: TLabel
|
||||
Left = 26
|
||||
Top = 42
|
||||
Width = 53
|
||||
Height = 13
|
||||
Caption = 'Try length:'
|
||||
end
|
||||
object txtNumtries: TEdit
|
||||
Left = 96
|
||||
Top = 16
|
||||
Width = 73
|
||||
Height = 21
|
||||
HelpContext = 1002
|
||||
TabOrder = 0
|
||||
Text = '50'
|
||||
end
|
||||
object txtTryLength: TEdit
|
||||
Left = 96
|
||||
Top = 40
|
||||
Width = 73
|
||||
Height = 21
|
||||
HelpContext = 1003
|
||||
TabOrder = 1
|
||||
Text = '10000'
|
||||
end
|
||||
TabOrder = 1
|
||||
end
|
||||
object JPEG: TGroupBox
|
||||
Left = 8
|
||||
Top = 74
|
||||
Top = 72
|
||||
Width = 121
|
||||
Height = 57
|
||||
Caption = 'JPEG Quality'
|
||||
TabOrder = 1
|
||||
object txtJPEGQuality: TEdit
|
||||
TabOrder = 0
|
||||
object txtJPEGquality: TComboBox
|
||||
Left = 16
|
||||
Top = 24
|
||||
Width = 73
|
||||
Width = 89
|
||||
Height = 21
|
||||
HelpContext = 1004
|
||||
ItemHeight = 13
|
||||
ItemIndex = 2
|
||||
TabOrder = 0
|
||||
Text = '80'
|
||||
Text = '100'
|
||||
Items.Strings = (
|
||||
'60'
|
||||
'80'
|
||||
'100'
|
||||
'120')
|
||||
end
|
||||
end
|
||||
object chkFixedReference: TCheckBox
|
||||
Left = 208
|
||||
Top = 24
|
||||
Width = 145
|
||||
Height = 17
|
||||
Caption = 'Fixed reference triangle'
|
||||
TabOrder = 3
|
||||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 136
|
||||
Top = 74
|
||||
Left = 8
|
||||
Top = 4
|
||||
Width = 121
|
||||
Height = 57
|
||||
Caption = 'Batch size'
|
||||
TabOrder = 4
|
||||
TabOrder = 2
|
||||
object txtBatchSize: TEdit
|
||||
Left = 16
|
||||
Top = 24
|
||||
@ -154,60 +112,29 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
end
|
||||
object chkResize: TCheckBox
|
||||
Left = 208
|
||||
Top = 40
|
||||
Left = 144
|
||||
Top = 157
|
||||
Width = 169
|
||||
Height = 17
|
||||
Caption = 'Resize on load'
|
||||
TabOrder = 5
|
||||
end
|
||||
object GroupBox15: TGroupBox
|
||||
Left = 8
|
||||
Top = 134
|
||||
Width = 129
|
||||
Height = 83
|
||||
Caption = 'PNG Transparency'
|
||||
TabOrder = 6
|
||||
object RadioButton1: TRadioButton
|
||||
Left = 12
|
||||
Top = 16
|
||||
Width = 113
|
||||
Height = 17
|
||||
Caption = 'No transparency'
|
||||
TabOrder = 0
|
||||
end
|
||||
object RadioButton2: TRadioButton
|
||||
Left = 12
|
||||
Top = 32
|
||||
Width = 113
|
||||
Height = 17
|
||||
Caption = 'Like Flame3'
|
||||
TabOrder = 1
|
||||
end
|
||||
object RadioButton3: TRadioButton
|
||||
Left = 12
|
||||
Top = 48
|
||||
Width = 113
|
||||
Height = 17
|
||||
Caption = 'Like Flamesong'
|
||||
TabOrder = 2
|
||||
end
|
||||
TabOrder = 3
|
||||
end
|
||||
object GroupBox16: TGroupBox
|
||||
Left = 140
|
||||
Left = 8
|
||||
Top = 134
|
||||
Width = 117
|
||||
Height = 51
|
||||
Width = 121
|
||||
Height = 59
|
||||
Caption = 'Nr processors'
|
||||
TabOrder = 7
|
||||
TabOrder = 4
|
||||
object cbNrTheads: TComboBox
|
||||
Left = 12
|
||||
Top = 20
|
||||
Left = 16
|
||||
Top = 24
|
||||
Width = 89
|
||||
Height = 21
|
||||
ItemHeight = 13
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text = '200'
|
||||
Text = 'Off'
|
||||
Items.Strings = (
|
||||
'Off'
|
||||
'2'
|
||||
@ -215,21 +142,46 @@ object OptionsForm: TOptionsForm
|
||||
'8')
|
||||
end
|
||||
end
|
||||
object cbShowTransparancy: TCheckBox
|
||||
object chkShowTransparency: TCheckBox
|
||||
Left = 144
|
||||
Top = 196
|
||||
Top = 175
|
||||
Width = 169
|
||||
Height = 17
|
||||
Caption = 'Show Transparancy'
|
||||
TabOrder = 8
|
||||
Caption = 'Show Transparency'
|
||||
TabOrder = 5
|
||||
end
|
||||
object rgReferenceMode: TRadioGroup
|
||||
Left = 280
|
||||
Top = 4
|
||||
Width = 153
|
||||
Height = 69
|
||||
Caption = 'Reference Triangle'
|
||||
ItemIndex = 0
|
||||
Items.Strings = (
|
||||
'Normal'
|
||||
'Proportional'
|
||||
'Wandering (old-style)')
|
||||
TabOrder = 6
|
||||
end
|
||||
object rgTransparency: TRadioGroup
|
||||
Left = 136
|
||||
Top = 4
|
||||
Width = 137
|
||||
Height = 69
|
||||
Caption = 'PNG Transparency'
|
||||
Items.Strings = (
|
||||
'No transparency'
|
||||
'Flam3-style'
|
||||
'Flamesong-style')
|
||||
TabOrder = 7
|
||||
end
|
||||
end
|
||||
object DisplayPage: TTabSheet
|
||||
Caption = 'Display'
|
||||
object GroupBox2: TGroupBox
|
||||
Left = 184
|
||||
Top = 8
|
||||
Width = 250
|
||||
Top = 4
|
||||
Width = 193
|
||||
Height = 97
|
||||
Caption = 'Preview density'
|
||||
TabOrder = 1
|
||||
@ -257,34 +209,31 @@ object OptionsForm: TOptionsForm
|
||||
object txtLowQuality: TEdit
|
||||
Left = 112
|
||||
Top = 16
|
||||
Width = 121
|
||||
Width = 65
|
||||
Height = 21
|
||||
HelpContext = 1012
|
||||
TabOrder = 0
|
||||
Text = 'txtLowQuality'
|
||||
end
|
||||
object txtMediumQuality: TEdit
|
||||
Left = 112
|
||||
Top = 40
|
||||
Width = 121
|
||||
Width = 65
|
||||
Height = 21
|
||||
HelpContext = 1013
|
||||
TabOrder = 1
|
||||
Text = 'txtMediumQuality'
|
||||
end
|
||||
object txtHighQuality: TEdit
|
||||
Left = 112
|
||||
Top = 64
|
||||
Width = 121
|
||||
Width = 65
|
||||
Height = 21
|
||||
HelpContext = 1014
|
||||
TabOrder = 2
|
||||
Text = 'txtHighQuality'
|
||||
end
|
||||
end
|
||||
object grpRendering: TGroupBox
|
||||
Left = 8
|
||||
Top = 6
|
||||
Top = 4
|
||||
Width = 169
|
||||
Height = 169
|
||||
Caption = 'Rendering'
|
||||
@ -648,9 +597,9 @@ object OptionsForm: TOptionsForm
|
||||
ImageIndex = 5
|
||||
object grpGradient: TRadioGroup
|
||||
Left = 8
|
||||
Top = 8
|
||||
Top = 4
|
||||
Width = 137
|
||||
Height = 121
|
||||
Height = 97
|
||||
HelpContext = 1029
|
||||
Caption = 'On random flame'
|
||||
ItemIndex = 0
|
||||
@ -662,28 +611,28 @@ object OptionsForm: TOptionsForm
|
||||
TabOrder = 0
|
||||
end
|
||||
object GroupBox3: TGroupBox
|
||||
Left = 152
|
||||
Top = 8
|
||||
Left = 153
|
||||
Top = 4
|
||||
Width = 281
|
||||
Height = 193
|
||||
Height = 189
|
||||
Caption = 'Randomize'
|
||||
TabOrder = 1
|
||||
object Label18: TLabel
|
||||
Left = 8
|
||||
Left = 16
|
||||
Top = 24
|
||||
Width = 128
|
||||
Height = 13
|
||||
Caption = 'Minimum number of nodes:'
|
||||
end
|
||||
object Label19: TLabel
|
||||
Left = 8
|
||||
Left = 16
|
||||
Top = 56
|
||||
Width = 128
|
||||
Height = 13
|
||||
Caption = 'Maximum number of nodes'
|
||||
end
|
||||
object Label31: TLabel
|
||||
Left = 8
|
||||
Left = 16
|
||||
Top = 88
|
||||
Width = 64
|
||||
Height = 13
|
||||
@ -697,7 +646,7 @@ object OptionsForm: TOptionsForm
|
||||
Caption = 'and'
|
||||
end
|
||||
object Label33: TLabel
|
||||
Left = 8
|
||||
Left = 16
|
||||
Top = 120
|
||||
Width = 95
|
||||
Height = 13
|
||||
@ -711,7 +660,7 @@ object OptionsForm: TOptionsForm
|
||||
Caption = 'and'
|
||||
end
|
||||
object Label35: TLabel
|
||||
Left = 8
|
||||
Left = 16
|
||||
Top = 152
|
||||
Width = 95
|
||||
Height = 13
|
||||
@ -745,8 +694,8 @@ object OptionsForm: TOptionsForm
|
||||
OnChange = txtMaxNodesChange
|
||||
end
|
||||
object txtMinHue: TEdit
|
||||
Left = 112
|
||||
Top = 88
|
||||
Left = 117
|
||||
Top = 85
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1032
|
||||
@ -756,7 +705,7 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
object txtMaxHue: TEdit
|
||||
Left = 208
|
||||
Top = 88
|
||||
Top = 85
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1033
|
||||
@ -765,8 +714,8 @@ object OptionsForm: TOptionsForm
|
||||
OnChange = txtMaxHueChange
|
||||
end
|
||||
object txtMinSat: TEdit
|
||||
Left = 112
|
||||
Top = 120
|
||||
Left = 117
|
||||
Top = 117
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1034
|
||||
@ -776,7 +725,7 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
object txtMaxSat: TEdit
|
||||
Left = 208
|
||||
Top = 120
|
||||
Top = 117
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1035
|
||||
@ -785,8 +734,8 @@ object OptionsForm: TOptionsForm
|
||||
OnChange = txtMaxSatChange
|
||||
end
|
||||
object txtMinLum: TEdit
|
||||
Left = 112
|
||||
Top = 152
|
||||
Left = 117
|
||||
Top = 149
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1036
|
||||
@ -796,7 +745,7 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
object txtMaxLum: TEdit
|
||||
Left = 208
|
||||
Top = 152
|
||||
Top = 149
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1037
|
||||
@ -829,8 +778,8 @@ object OptionsForm: TOptionsForm
|
||||
TabOrder = 9
|
||||
end
|
||||
object udMinHue: TUpDown
|
||||
Left = 161
|
||||
Top = 88
|
||||
Left = 166
|
||||
Top = 85
|
||||
Width = 12
|
||||
Height = 21
|
||||
HelpContext = 1032
|
||||
@ -840,7 +789,7 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
object udMaxHue: TUpDown
|
||||
Left = 257
|
||||
Top = 88
|
||||
Top = 85
|
||||
Width = 12
|
||||
Height = 21
|
||||
HelpContext = 1033
|
||||
@ -850,8 +799,8 @@ object OptionsForm: TOptionsForm
|
||||
TabOrder = 11
|
||||
end
|
||||
object udMinSat: TUpDown
|
||||
Left = 161
|
||||
Top = 120
|
||||
Left = 166
|
||||
Top = 117
|
||||
Width = 12
|
||||
Height = 21
|
||||
HelpContext = 1034
|
||||
@ -860,7 +809,7 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
object udmaxSat: TUpDown
|
||||
Left = 257
|
||||
Top = 120
|
||||
Top = 117
|
||||
Width = 12
|
||||
Height = 21
|
||||
HelpContext = 1035
|
||||
@ -869,8 +818,8 @@ object OptionsForm: TOptionsForm
|
||||
TabOrder = 13
|
||||
end
|
||||
object udMinLum: TUpDown
|
||||
Left = 161
|
||||
Top = 152
|
||||
Left = 166
|
||||
Top = 149
|
||||
Width = 12
|
||||
Height = 21
|
||||
HelpContext = 1036
|
||||
@ -879,7 +828,7 @@ object OptionsForm: TOptionsForm
|
||||
end
|
||||
object udMaxLum: TUpDown
|
||||
Left = 257
|
||||
Top = 152
|
||||
Top = 149
|
||||
Width = 12
|
||||
Height = 21
|
||||
HelpContext = 1037
|
||||
@ -888,6 +837,46 @@ object OptionsForm: TOptionsForm
|
||||
TabOrder = 15
|
||||
end
|
||||
end
|
||||
object GroupBox13: TGroupBox
|
||||
Left = 8
|
||||
Top = 106
|
||||
Width = 137
|
||||
Height = 87
|
||||
Caption = 'Smooth palette'
|
||||
TabOrder = 2
|
||||
object Label8: TLabel
|
||||
Left = 10
|
||||
Top = 18
|
||||
Width = 49
|
||||
Height = 13
|
||||
Caption = '# of tries:'
|
||||
end
|
||||
object Label10: TLabel
|
||||
Left = 10
|
||||
Top = 50
|
||||
Width = 53
|
||||
Height = 13
|
||||
Caption = 'Try length:'
|
||||
end
|
||||
object txtNumtries: TEdit
|
||||
Left = 80
|
||||
Top = 16
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1002
|
||||
TabOrder = 0
|
||||
Text = '50'
|
||||
end
|
||||
object txtTryLength: TEdit
|
||||
Left = 80
|
||||
Top = 48
|
||||
Width = 49
|
||||
Height = 21
|
||||
HelpContext = 1003
|
||||
TabOrder = 1
|
||||
Text = '10000'
|
||||
end
|
||||
end
|
||||
end
|
||||
object TabSheet6: TTabSheet
|
||||
Caption = 'UPR'
|
||||
|
@ -32,9 +32,7 @@ type
|
||||
Tabs: TPageControl;
|
||||
GeneralPage: TTabSheet;
|
||||
chkConfirmDel: TCheckBox;
|
||||
GroupBox13: TGroupBox;
|
||||
JPEG: TGroupBox;
|
||||
txtJPEGQuality: TEdit;
|
||||
DisplayPage: TTabSheet;
|
||||
GroupBox2: TGroupBox;
|
||||
Label4: TLabel;
|
||||
@ -86,10 +84,6 @@ type
|
||||
GroupBox17: TGroupBox;
|
||||
btnSetAll: TButton;
|
||||
btnClearAll: TButton;
|
||||
Label8: TLabel;
|
||||
txtNumtries: TEdit;
|
||||
Label10: TLabel;
|
||||
txtTryLength: TEdit;
|
||||
TabSheet1: TTabSheet;
|
||||
grpGradient: TRadioGroup;
|
||||
GroupBox3: TGroupBox;
|
||||
@ -122,7 +116,6 @@ type
|
||||
udMinMutate: TUpDown;
|
||||
udMaxMutate: TUpDown;
|
||||
udSymOrder: TUpDown;
|
||||
chkFixedReference: TCheckBox;
|
||||
GroupBox1: TGroupBox;
|
||||
txtBatchSize: TEdit;
|
||||
udBatchSize: TUpDown;
|
||||
@ -174,13 +167,17 @@ type
|
||||
Label37: TLabel;
|
||||
txtLibrary: TEdit;
|
||||
clbVarEnabled: TCheckListBox;
|
||||
GroupBox15: TGroupBox;
|
||||
RadioButton1: TRadioButton;
|
||||
RadioButton2: TRadioButton;
|
||||
RadioButton3: TRadioButton;
|
||||
GroupBox16: TGroupBox;
|
||||
cbNrTheads: TComboBox;
|
||||
cbShowTransparancy: TCheckBox;
|
||||
chkShowTransparency: TCheckBox;
|
||||
rgReferenceMode: TRadioGroup;
|
||||
GroupBox13: TGroupBox;
|
||||
Label8: TLabel;
|
||||
Label10: TLabel;
|
||||
txtNumtries: TEdit;
|
||||
txtTryLength: TEdit;
|
||||
txtJPEGquality: TComboBox;
|
||||
rgTransparency: TRadioGroup;
|
||||
procedure btnCancelClick(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure btnOKClick(Sender: TObject);
|
||||
@ -254,20 +251,15 @@ begin
|
||||
txtTryLength.text := IntToStr(Trylength);
|
||||
chkConfirmDel.Checked := ConfirmDelete;
|
||||
txtJPEGQuality.text := IntToStr(JPEGQuality);
|
||||
chkFixedReference.Checked := FixedReference;
|
||||
rgReferenceMode.IteMindex := ReferenceMode;
|
||||
udBatchSize.Position := BatchSize;
|
||||
chkResize.checked := ResizeOnLoad;
|
||||
case PNGTransparency of
|
||||
0: RadioButton1.Checked := True;
|
||||
1: RadioButton2.Checked := True;
|
||||
2: RadioButton3.Checked := True;
|
||||
else
|
||||
end;
|
||||
rgTransparency.ItemIndex := PNGTransparency;
|
||||
chkShowTransparency.Checked := ShowTransparency;
|
||||
if NrTreads <= 1 then
|
||||
cbNrTheads.ItemIndex := 0
|
||||
else
|
||||
cbNrTheads.text := intTostr(NrTreads);
|
||||
cbShowTransparancy.Checked := ShowTransparency;
|
||||
|
||||
{ Display tab }
|
||||
txtSampleDensity.Text := FloatToStr(defSampleDensity);
|
||||
@ -363,18 +355,12 @@ begin
|
||||
if BatchSize < 1 then BatchSize := 1;
|
||||
if BatchSize > 300 then BatchSize := 300;
|
||||
|
||||
if RadioButton1.Checked then
|
||||
PNGTransparency := 0
|
||||
else if RadioButton2.Checked then
|
||||
PNGTransparency := 1
|
||||
else if RadioButton3.Checked then
|
||||
PNGTransparency := 2;
|
||||
|
||||
ShowTransparency := cbShowTransparancy.Checked;
|
||||
PNGTransparency := rgTransparency.ItemIndex;
|
||||
ShowTransparency := chkShowTransparency.Checked;
|
||||
|
||||
NrTreads := StrToIntDef(cbNrTheads.text, 0);
|
||||
ConfirmDelete := chkConfirmDel.Checked;
|
||||
FixedReference := chkFixedReference.Checked;
|
||||
ReferenceMode := rgReferenceMode.ItemIndex;
|
||||
ResizeOnLoad := chkResize.checked;
|
||||
{ Display tab }
|
||||
defSampleDensity := StrToFloat(txtSampleDensity.Text);
|
||||
|
@ -333,14 +333,16 @@ begin
|
||||
begin
|
||||
MaxSat := 100;
|
||||
end;
|
||||
{
|
||||
if Registry.ValueExists('FixedReference') then
|
||||
begin
|
||||
FixedReference := Registry.ReadBool('FixedReference');
|
||||
end
|
||||
else
|
||||
begin
|
||||
FixedReference := False;
|
||||
end;
|
||||
else FixedReference := False;
|
||||
}
|
||||
if Registry.ValueExists('ReferenceMode') then
|
||||
ReferenceMode := Registry.ReadInteger('ReferenceMode')
|
||||
else ReferenceMode := 0;
|
||||
if Registry.ValueExists('MaxLum') then
|
||||
begin
|
||||
MaxLum := Registry.ReadInteger('MaxLum');
|
||||
@ -506,7 +508,7 @@ begin
|
||||
end
|
||||
else
|
||||
begin
|
||||
FixedReference := false;
|
||||
ReferenceMode := 0;
|
||||
EditPrevQual := 1;
|
||||
MutatePrevQual := 1;
|
||||
AdjustPrevQual := 1;
|
||||
@ -871,7 +873,7 @@ begin
|
||||
Registry.WriteInteger('SymmetryType', SymmetryType);
|
||||
Registry.WriteInteger('SymmetryOrder', SymmetryOrder);
|
||||
Registry.WriteInteger('VariationOptions', VariationOptions);
|
||||
Registry.WriteBool('FixedReference', FixedReference);
|
||||
Registry.WriteInteger('ReferenceMode', ReferenceMode);
|
||||
Registry.WriteInteger('MinNodes', MinNodes);
|
||||
Registry.WriteInteger('MinHue', MinHue);
|
||||
Registry.WriteInteger('MinSat', MinSat);
|
||||
|
@ -133,6 +133,8 @@ begin
|
||||
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
|
||||
@ -213,6 +215,7 @@ begin
|
||||
for j := 0 to 2 do
|
||||
triangles[i].y[j] := -triangles[i].y[j];
|
||||
end;
|
||||
*)
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
procedure EqualizeWeights(var cp: TControlPoint);
|
||||
@ -377,7 +380,7 @@ begin
|
||||
Result.xform[i].density := 1 / Transforms;
|
||||
end;
|
||||
end; // case
|
||||
TrianglesFromCp(Result, Triangles);
|
||||
Result.TrianglesFromCp(Triangles);
|
||||
if Random(2) > 0 then
|
||||
ComputeWeights(Result, Triangles, transforms)
|
||||
else
|
||||
|
@ -310,7 +310,7 @@ var
|
||||
FileList: TStringList;
|
||||
|
||||
function Mul33(M1, M2: TMatrix): TMatrix;
|
||||
procedure Normalize(var cp: TControlPoint);
|
||||
//procedure Normalize(var cp: TControlPoint);
|
||||
|
||||
implementation
|
||||
|
||||
@ -493,13 +493,14 @@ end;
|
||||
procedure TScriptEditor.GetFixedReference(AMachine: TatVirtualMachine);
|
||||
begin
|
||||
with AMachine do
|
||||
ReturnOutPutArg(FixedReference);
|
||||
ReturnOutPutArg(ReferenceMode = 0);
|
||||
end;
|
||||
|
||||
procedure TScriptEditor.SetFixedReference(AMachine: TatVirtualMachine);
|
||||
begin
|
||||
with AMachine do
|
||||
FixedReference := GetInputArgAsBoolean(0);
|
||||
if GetInputArgAsBoolean(0) then ReferenceMode := 0
|
||||
else ReferenceMode := 1;
|
||||
end;
|
||||
|
||||
procedure TScriptEditor.GetSampleDensity(AMachine: TatVirtualMachine);
|
||||
@ -1474,7 +1475,7 @@ begin
|
||||
if nxform < NXFORMS then
|
||||
for i := nxform to NXFORMS - 1 do
|
||||
cp1.xform[i].density := 0;
|
||||
NormalizeWeights(cp1);
|
||||
cp1.NormalizeWeights;
|
||||
// Check for symmetry parameter
|
||||
if cp1.symmetry <> 0 then
|
||||
begin
|
||||
@ -1516,7 +1517,7 @@ begin
|
||||
for i := 0 to NXFORMS - 1 do
|
||||
if ScriptEditor.cp.xform[i].density = 0 then break;
|
||||
NumTransforms := i;
|
||||
NormalizeWeights(ScriptEditor.cp);
|
||||
ScriptEditor.cp.NormalizeWeights;
|
||||
// FlameName := FileList[index];
|
||||
finally
|
||||
IFSStrings.Free;
|
||||
@ -1588,7 +1589,7 @@ begin
|
||||
for i := 0 to NXFORMS - 1 do
|
||||
if ScriptEditor.cp.xform[i].density = 0 then break;
|
||||
NumTransforms := i;
|
||||
NormalizeWeights(ScriptEditor.cp);
|
||||
ScriptEditor.cp.NormalizeWeights;
|
||||
if SavedPal then ScriptEditor.cp.cmap := Palette;
|
||||
ScriptEditor.cp.name := FileList[index];
|
||||
finally
|
||||
@ -1620,13 +1621,13 @@ var
|
||||
i: integer;
|
||||
r: double;
|
||||
begin
|
||||
MainForm.TrianglesFromCp(ScriptEditor.cp, Triangles);
|
||||
ScriptEditor.cp.TrianglesFromCp(Triangles);
|
||||
r := AMachine.GetInputArgAsFloat(0) * pi / 180;
|
||||
for i := -1 to NumTransforms - 1 do
|
||||
begin
|
||||
Triangles[i] := RotateTriangle(Triangles[i], r);
|
||||
end;
|
||||
GetXForms(ScriptEditor.cp, Triangles, NumTransforms);
|
||||
ScriptEditor.cp.GetFromTriangles(Triangles, NumTransforms);
|
||||
end;
|
||||
|
||||
procedure TOperationLibrary.AddSymmetryProc(AMachine: TatVirtualMachine);
|
||||
@ -1644,10 +1645,10 @@ var
|
||||
Triangles: TTriangles;
|
||||
r: double;
|
||||
begin
|
||||
MainForm.TrianglesFromCp(ScriptEditor.cp, Triangles);
|
||||
ScriptEditor.cp.TrianglesFromCp(Triangles);
|
||||
r := AMachine.GetInputArgAsFloat(0) * pi / 180;
|
||||
Triangles[-1] := RotateTriangle(Triangles[-1], r);
|
||||
GetXForms(ScriptEditor.cp, Triangles, NumTransforms);
|
||||
ScriptEditor.cp.GetFromTriangles(Triangles, NumTransforms);
|
||||
end;
|
||||
|
||||
procedure TOperationLibrary.ScaleProc(AMachine: TatVirtualMachine);
|
||||
@ -1748,7 +1749,7 @@ begin
|
||||
if NumTransforms > 1 then
|
||||
begin
|
||||
AMachine.Paused := True;
|
||||
Normalize(ScriptEditor.cp);
|
||||
ScriptEditor.cp.NormalizeWeights;
|
||||
PreviewForm.cp.Copy(ScriptEditor.cp);
|
||||
AdjustScale(PreviewForm.cp, PreviewForm.Image.Width, PreviewForm.Image.Height);
|
||||
PreviewForm.Show;
|
||||
@ -1763,7 +1764,7 @@ procedure TOperationLibrary.RenderProc(AMachine: TatVirtualMachine);
|
||||
begin
|
||||
if NumTransforms > 1 then
|
||||
begin
|
||||
Normalize(ScriptEditor.cp);
|
||||
ScriptEditor.cp.NormalizeWeights;
|
||||
ScriptRenderForm.cp.Copy(ScriptEditor.cp);
|
||||
ScriptRenderForm.Caption := 'Rendering ' + ScriptEditor.Renderer.Filename; ;
|
||||
ScriptRenderForm.Show;
|
||||
@ -2912,7 +2913,7 @@ begin
|
||||
else
|
||||
if (LastError = '') and UpdateIt then
|
||||
begin
|
||||
Normalize(cp);
|
||||
cp.NormalizeWeights;
|
||||
MainForm.UpdateUndo;
|
||||
MainCp.Copy(cp);
|
||||
UpdateFlame;
|
||||
@ -2944,10 +2945,10 @@ procedure TScriptEditor.UpdateFlame;
|
||||
begin
|
||||
MainForm.StopThread;
|
||||
MainForm.UpdateUndo;
|
||||
Normalize(cp);
|
||||
cp.NormalizeWeights;
|
||||
MainCp.Copy(cp);
|
||||
// MainCp.name := FlameName;
|
||||
Transforms := MainForm.TrianglesFromCP(MainCp, MainTriangles);
|
||||
Transforms := MainCp.TrianglesFromCP(MainTriangles);
|
||||
AdjustScale(MainCp, MainForm.Image.Width, MainForm.Image.Height);
|
||||
if ResetLocation then MainCp.CalcBoundBox else
|
||||
begin;
|
||||
@ -2967,21 +2968,6 @@ end;
|
||||
|
||||
{ ******************************* Parseing *********************************** }
|
||||
|
||||
procedure Normalize(var cp: TControlPoint);
|
||||
var
|
||||
i: integer;
|
||||
td: double;
|
||||
begin
|
||||
td := 0.0;
|
||||
for i := 0 to NumTransforms - 1 do
|
||||
td := td + cp.xform[i].Density;
|
||||
if (td < 0.001) then
|
||||
EqualizeWeights(cp)
|
||||
else
|
||||
for i := 0 to NumTransforms - 1 do
|
||||
cp.xform[i].Density := cp.xform[i].Density / td;
|
||||
end;
|
||||
|
||||
procedure copyxform(var dest: Txform; const source: TXform);
|
||||
var
|
||||
i: integer;
|
||||
|
Loading…
Reference in New Issue
Block a user