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