more helper lines & circles,

less unfinished transform color-controls ;)
This commit is contained in:
zueuk 2005-10-06 15:51:20 +00:00
parent 042efae45e
commit 30f49d0eae
2 changed files with 231 additions and 94 deletions

View File

@ -54,7 +54,7 @@ object EditForm: TEditForm
TextHeight = 13 TextHeight = 13
object StatusBar: TStatusBar object StatusBar: TStatusBar
Left = 0 Left = 0
Top = 544 Top = 543
Width = 578 Width = 578
Height = 15 Height = 15
Panels = < Panels = <
@ -343,14 +343,14 @@ object EditForm: TEditForm
Left = 0 Left = 0
Top = 24 Top = 24
Width = 578 Width = 578
Height = 520 Height = 519
Align = alClient Align = alClient
TabOrder = 1 TabOrder = 1
object Splitter1: TSplitter object Splitter1: TSplitter
Left = 396 Left = 396
Top = 1 Top = 1
Width = 9 Width = 9
Height = 518 Height = 517
Align = alRight Align = alRight
AutoSnap = False AutoSnap = False
Beveled = True Beveled = True
@ -361,7 +361,7 @@ object EditForm: TEditForm
Left = 1 Left = 1
Top = 1 Top = 1
Width = 395 Width = 395
Height = 518 Height = 517
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
Color = clAppWorkSpace Color = clAppWorkSpace
@ -371,7 +371,7 @@ object EditForm: TEditForm
Left = 405 Left = 405
Top = 1 Top = 1
Width = 172 Width = 172
Height = 518 Height = 517
Align = alRight Align = alRight
Alignment = taLeftJustify Alignment = taLeftJustify
BevelOuter = bvNone BevelOuter = bvNone
@ -411,7 +411,7 @@ object EditForm: TEditForm
Left = 0 Left = 0
Top = 136 Top = 136
Width = 172 Width = 172
Height = 382 Height = 381
Align = alClient Align = alClient
TabOrder = 0 TabOrder = 0
object lblTransform: TLabel object lblTransform: TLabel
@ -442,10 +442,10 @@ object EditForm: TEditForm
end end
object PageControl: TPageControl object PageControl: TPageControl
Left = 1 Left = 1
Top = 27 Top = 26
Width = 170 Width = 170
Height = 354 Height = 354
ActivePage = tabColors ActivePage = TriangleTab
Align = alBottom Align = alBottom
Anchors = [akLeft, akTop, akRight, akBottom] Anchors = [akLeft, akTop, akRight, akBottom]
MultiLine = True MultiLine = True
@ -1361,16 +1361,16 @@ object EditForm: TEditForm
ImageIndex = 3 ImageIndex = 3
object GroupBox1: TGroupBox object GroupBox1: TGroupBox
Left = 8 Left = 8
Top = 0 Top = 2
Width = 145 Width = 145
Height = 97 Height = 70
Caption = 'Transform color' Caption = 'Transform color'
TabOrder = 0 TabOrder = 0
object scrlXFormColor: TScrollBar object scrlXFormColor: TScrollBar
Left = 8 Left = 8
Top = 48 Top = 44
Width = 129 Width = 129
Height = 15 Height = 17
LargeChange = 10 LargeChange = 10
Max = 1000 Max = 1000
PageSize = 0 PageSize = 0
@ -1382,7 +1382,7 @@ object EditForm: TEditForm
Left = 8 Left = 8
Top = 16 Top = 16
Width = 65 Width = 65
Height = 25 Height = 21
BevelOuter = bvLowered BevelOuter = bvLowered
TabOrder = 1 TabOrder = 1
end end
@ -1395,31 +1395,12 @@ object EditForm: TEditForm
OnExit = txtXFormColorExit OnExit = txtXFormColorExit
OnKeyPress = txtXFormColorKeyPress OnKeyPress = txtXFormColorKeyPress
end end
object Panel1: TPanel
Left = 8
Top = 70
Width = 129
Height = 19
BevelOuter = bvLowered
TabOrder = 3
object ColorImage: TImage
Left = 1
Top = 1
Width = 127
Height = 17
Cursor = crHandPoint
Align = alClient
OnMouseDown = ColorImageMouseDown
OnMouseMove = ColorImageMouseMove
OnMouseUp = ColorImageMouseUp
end
end
end end
object GroupBox2: TGroupBox object GroupBox2: TGroupBox
Left = 8 Left = 8
Top = 104 Top = 77
Width = 145 Width = 145
Height = 177 Height = 217
Caption = 'Graph' Caption = 'Graph'
TabOrder = 1 TabOrder = 1
object Label20: TLabel object Label20: TLabel
@ -1431,7 +1412,7 @@ object EditForm: TEditForm
end end
object Label21: TLabel object Label21: TLabel
Left = 8 Left = 8
Top = 136 Top = 176
Width = 89 Width = 89
Height = 13 Height = 13
Caption = 'Reference triangle' Caption = 'Reference triangle'
@ -1443,6 +1424,13 @@ object EditForm: TEditForm
Height = 13 Height = 13
Caption = 'Grid colors' Caption = 'Grid colors'
end end
object Label10: TLabel
Left = 8
Top = 136
Width = 62
Height = 13
Caption = 'Helpers color'
end
object pnlBackColor: TPanel object pnlBackColor: TPanel
Left = 8 Left = 8
Top = 72 Top = 72
@ -1476,7 +1464,7 @@ object EditForm: TEditForm
end end
object pnlReference: TPanel object pnlReference: TPanel
Left = 8 Left = 8
Top = 152 Top = 192
Width = 129 Width = 129
Height = 17 Height = 17
Cursor = crHandPoint Cursor = crHandPoint
@ -1507,6 +1495,17 @@ object EditForm: TEditForm
TabOrder = 5 TabOrder = 5
OnClick = pnlGridColor2Click OnClick = pnlGridColor2Click
end end
object pnlHelpersColor: TPanel
Left = 8
Top = 152
Width = 129
Height = 17
Cursor = crHandPoint
BevelOuter = bvLowered
Color = clGray
TabOrder = 6
OnClick = pnlHelpersColorClick
end
end end
end end
end end

View File

@ -156,13 +156,13 @@ type
tbResetLoc: TToolButton; tbResetLoc: TToolButton;
tbHiQ: TToolButton; tbHiQ: TToolButton;
ToolButton9: TToolButton; ToolButton9: TToolButton;
Panel1: TPanel;
ColorImage: TImage;
TabSheet4: TTabSheet; TabSheet4: TTabSheet;
vleVariables: TValueListEditor; vleVariables: TValueListEditor;
mnuReset: TMenuItem; mnuReset: TMenuItem;
mnuResetAll: TMenuItem; mnuResetAll: TMenuItem;
tbResetAll: TToolButton; tbResetAll: TToolButton;
Label10: TLabel;
pnlHelpersColor: TPanel;
procedure ValidateVariable; procedure ValidateVariable;
procedure vleVariablesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: string); procedure vleVariablesValidate(Sender: TObject; ACol, ARow: Integer; const KeyName, KeyValue: string);
procedure vleVariablesKeyPress(Sender: TObject; var Key: Char); procedure vleVariablesKeyPress(Sender: TObject; var Key: Char);
@ -270,18 +270,21 @@ type
procedure tbFullViewClick(Sender: TObject); procedure tbFullViewClick(Sender: TObject);
{
procedure ColorImageMouseDown(Sender: TObject; Button: TMouseButton; procedure ColorImageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure ColorImageMouseMove(Sender: TObject; Shift: TShiftState; X, procedure ColorImageMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); Y: Integer);
procedure ColorImageMouseUp(Sender: TObject; Button: TMouseButton; procedure ColorImageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
}
procedure EditKeyDown(Sender: TObject; var Key: Word; procedure EditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); Shift: TShiftState);
procedure txtValidateValue(Sender: TObject); procedure txtValidateValue(Sender: TObject);
procedure txtValKeyPress(Sender: TObject; var Key: Char); procedure txtValKeyPress(Sender: TObject; var Key: Char);
procedure mnuResetClick(Sender: TObject); procedure mnuResetClick(Sender: TObject);
procedure mnuResetAllClick(Sender: TObject); procedure mnuResetAllClick(Sender: TObject);
procedure pnlHelpersColorClick(Sender: TObject);
private private
TriangleView: TCustomDrawControl; TriangleView: TCustomDrawControl;
@ -306,8 +309,8 @@ type
// --Z-- variables moved from outside // --Z-- variables moved from outside
GraphZoom: double; GraphZoom: double;
CornerCaught: boolean; TriangleCaught, CornerCaught: boolean;
TriangleCaught: boolean; LocalAxisLocked: boolean;
// SelectedTriangle: integer; // outside only for scripting (??) // SelectedTriangle: integer; // outside only for scripting (??)
SelectedCorner: integer; SelectedCorner: integer;
SelectMode: boolean; SelectMode: boolean;
@ -323,13 +326,14 @@ type
{ Options } { Options }
UseFlameBackground, UseTransformColors: boolean; UseFlameBackground, UseTransformColors: boolean;
BackGroundColor, ReferenceTrianglecolor: integer; BackGroundColor, ReferenceTrianglecolor: integer;
GridColor1, GridColor2: integer; // --Z-- GridColor1, GridColor2, HelpersColor: integer;
procedure UpdateFlameX; procedure UpdateFlameX;
procedure UpdateFlame(DrawMain: boolean); procedure UpdateFlame(DrawMain: boolean);
procedure DeleteTriangle(t: integer); procedure DeleteTriangle(t: integer);
function GetPivot: TSPoint; function GetPivot: TSPoint; overload;
function GetPivot(n: integer): TSPoint; overload;
function GetTriangleColor(n: integer): TColor; function GetTriangleColor(n: integer): TColor;
// --Z-- functions moved from outside (?) // --Z-- functions moved from outside (?)
@ -905,17 +909,37 @@ var
Result.x := integer(round(ix + (fx - gCenterX) * sc)); Result.x := integer(round(ix + (fx - gCenterX) * sc));
Result.y := integer(round(iy - (fy - gCenterY) * sc)); Result.y := integer(round(iy - (fy - gCenterY) * sc));
end; end;
var
dx, dy: double;
Width, Height: integer;
BitMap: TBitMap;
procedure LineDxDy;
var
k: double;
begin
if (dx <> 0) and (dy <> 0) then with Bitmap.Canvas do
begin
k := dy / dx;
if abs(k) < 1 then begin
MoveTo(0, round(iy - sc*(Pivot.y - ( ix/sc-GCenterX+Pivot.x)*k - GCenterY)));
LineTo(Width, round(iy - sc*(Pivot.y - (-ix/sc-GCenterX+Pivot.x)*k - GCenterY)));
end
else begin
MoveTo(round(ix + sc*(Pivot.x - (-iy/sc-GCenterY+Pivot.y)/k - GCenterX)), 0);
LineTo(round(ix + sc*(Pivot.x - ( iy/sc-GCenterY+Pivot.y)/k - GCenterX)), Height);
end;
end;
end;
var var
i: integer; i: integer;
d, d1, dx, dy, k: double; d, d1: double;
tx, ty: double; tx, ty: double;
ax, ay: integer; ax, ay: integer;
a, b, c: TPoint; a, b, c: TPoint;
BitMap: TBitMap;
Width, Height: integer;
gridX1, gridX2, gridY1, gridY2, gi, gstep: double; gridX1, gridX2, gridY1, gridY2, gi, gstep: double;
gp: TRoundToRange; gp: TRoundToRange;
label DrawCorner; label DrawCorner;
@ -1022,9 +1046,11 @@ begin
if (TriangleCaught or CornerCaught) then // if dragging, draw pivot axis if (TriangleCaught or CornerCaught) then // if dragging, draw pivot axis
begin begin
mouseOverTriangle := SelectedTriangle;
if HelpersEnabled then if HelpersEnabled then
begin begin
pen.Color := $808080; pen.Color := HelpersColor;
//pen.Color := 0; //pen.Color := 0;
//brush.Color := $808080; //brush.Color := $808080;
pen.Mode := pmMerge; pen.Mode := pmMerge;
@ -1034,7 +1060,8 @@ begin
LineTo(a.x, Height); LineTo(a.x, Height);
MoveTo(0, a.y); MoveTo(0, a.y);
LineTo(Width, a.y); LineTo(Width, a.y);
if (editMode = modeRotate) or (editMode = modeScale) then // draw circle
if (editMode = modeRotate) then // draw circle
begin begin
if CornerCaught then begin if CornerCaught then begin
dx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.x; dx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.x;
@ -1064,7 +1091,7 @@ begin
//i := min( min(Width, Height), integer(round(dmax * sc))); //i := min( min(Width, Height), integer(round(dmax * sc)));
i := integer(round(d * sc)); i := integer(round(d * sc));
if i > 4 then begin if i > 4 then begin
pen.Color := $808080; pen.Color := HelpersColor;
brush.Style := bsClear; brush.Style := bsClear;
Ellipse(a.x - i, a.y - i, a.x + i, a.y + i); Ellipse(a.x - i, a.y - i, a.x + i, a.y + i);
@ -1077,6 +1104,8 @@ begin
end; end;
// rotated axis // rotated axis
LineDxDy;
{
if (dx <> 0) and (dy <> 0) then if (dx <> 0) and (dy <> 0) then
begin begin
k := dy / dx; k := dy / dx;
@ -1089,10 +1118,30 @@ begin
LineTo(round(ix + sc*(Pivot.x - ( iy/sc-GCenterY+Pivot.y)/k - GCenterX)), Height); LineTo(round(ix + sc*(Pivot.x - ( iy/sc-GCenterY+Pivot.y)/k - GCenterX)), Height);
end; end;
end; end;
}
end
else if (editMode = modeScale) then // draw lines
begin
if CornerCaught then begin
dx := MainTriangles[SelectedTriangle].x[SelectedCorner] - Pivot.x;
dy := MainTriangles[SelectedTriangle].y[SelectedCorner] - Pivot.y;
LineDxDy;
end
else begin // hmmm...
dx := MainTriangles[SelectedTriangle].x[0] - Pivot.x;
dy := MainTriangles[SelectedTriangle].y[0] - Pivot.y;
LineDxDy;
dx := MainTriangles[SelectedTriangle].x[1] - Pivot.x;
dy := MainTriangles[SelectedTriangle].y[1] - Pivot.y;
LineDxDy;
dx := MainTriangles[SelectedTriangle].x[2] - Pivot.x;
dy := MainTriangles[SelectedTriangle].y[2] - Pivot.y;
LineDxDy;
end;
end end
else //if editMode = modeMove then // draw target axis else //if editMode = modeMove then // draw target axis
begin begin
Pen.Color := $808080; Pen.Color := HelpersColor;
Pen.Mode := pmMerge;//Xor; Pen.Mode := pmMerge;//Xor;
brush.Color := 0; brush.Color := 0;
if CornerCaught then if CornerCaught then
@ -1107,7 +1156,6 @@ begin
Pen.Mode := pmCopy; Pen.Mode := pmCopy;
end; end;
end; // endif HelpersEnabled end; // endif HelpersEnabled
mouseOverTriangle := SelectedTriangle;
end; end;
if (mouseOverTriangle >= 0) then // highlight triangle under cursor if (mouseOverTriangle >= 0) then // highlight triangle under cursor
@ -1150,16 +1198,46 @@ begin
end; end;
pen.color := clWhite; pen.color := clWhite;
brush.Color:=clSilver;
if CornerCaught then // draw selected corner if CornerCaught then // draw selected corner
begin begin
brush.Color:=clSilver;
a := ToScreen(MainTriangles[SelectedTriangle].x[SelectedCorner], MainTriangles[SelectedTriangle].y[SelectedCorner]); a := ToScreen(MainTriangles[SelectedTriangle].x[SelectedCorner], MainTriangles[SelectedTriangle].y[SelectedCorner]);
Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4); Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4);
end end
else if (mouseOverTriangle>=0) and (mouseOverCorner >= 0) then // highlight corner under cursor else if (mouseOverTriangle>=0) and (mouseOverCorner >= 0) then // highlight corner under cursor
begin begin
brush.Color:=clSilver;
{
case mouseOverCorner of
0: brush.Color:=clRed;
2: brush.Color:=clGreen;
else brush.Color:=clYellow;
end;
}
a := ToScreen(MainTriangles[mouseOverTriangle].x[mouseOverCorner], MainTriangles[mouseOverTriangle].y[mouseOverCorner]); a := ToScreen(MainTriangles[mouseOverTriangle].x[mouseOverCorner], MainTriangles[mouseOverTriangle].y[mouseOverCorner]);
Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4); Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4);
// hmm... TODO: optimize
if HelpersEnabled then begin
pen.Color := HelpersColor;
pen.Mode := pmMerge;
pen.Style := psDot;
brush.Style := bsClear;
if (editMode = modeRotate) then
begin
i := integer(round(olddist * sc));
if i > 4 then begin
a := ToScreen(pivot.x, pivot.y);
Ellipse(a.x - i, a.y - i, a.x + i, a.y + i);
end;
end
else if editMode = modeScale then
begin
dx := MainTriangles[mouseOverTriangle].x[mouseOverCorner] - Pivot.x;
dy := MainTriangles[mouseOverTriangle].y[mouseOverCorner] - Pivot.y;
LineDxDy;
end;
end;
end; end;
// draw pivot point // draw pivot point
@ -1171,7 +1249,7 @@ begin
if TWinControl(Sender).Focused then if TWinControl(Sender).Focused then
begin begin
pen.Color := $808080; pen.Color := HelpersColor;
pen.Mode := pmXor; pen.Mode := pmXor;
MoveTo(foc_ofs, foc_size); MoveTo(foc_ofs, foc_size);
LineTo(foc_ofs, foc_ofs); LineTo(foc_ofs, foc_ofs);
@ -1197,10 +1275,10 @@ procedure TEditForm.FormCreate(Sender: TObject);
var var
i: integer; i: integer;
begin begin
Screen.Cursors[crEditArrow] := LoadCursor(HInstance, 'CUR_ARROW'); Screen.Cursors[crEditArrow] := LoadCursor(HInstance, 'ARROW_WHITE');
Screen.Cursors[crEditMove] := LoadCursor(HInstance, 'CUR_MOVE'); Screen.Cursors[crEditMove] := LoadCursor(HInstance, 'MOVE_WB');
Screen.Cursors[crEditRotate] := LoadCursor(HInstance, 'CUR_ROTATE'); Screen.Cursors[crEditRotate] := LoadCursor(HInstance, 'ROTATE_WB');
Screen.Cursors[crEditScale] := LoadCursor(HInstance, 'CUR_SCALE'); Screen.Cursors[crEditScale] := LoadCursor(HInstance, 'SCALE_WB');
// Custom control setup // Custom control setup
TriangleView := TCustomDrawControl.Create(self); TriangleView := TCustomDrawControl.Create(self);
@ -1278,7 +1356,6 @@ var
label FoundCorner, Skip1, Skip2; label FoundCorner, Skip1, Skip2;
begin begin
Scale(fx, fy, x, y); Scale(fx, fy, x, y);
// --Z--
StatusBar.Panels[0].Text := Format('X: %f', [fx]); StatusBar.Panels[0].Text := Format('X: %f', [fx]);
StatusBar.Panels[1].Text := Format('Y: %f', [fy]); StatusBar.Panels[1].Text := Format('Y: %f', [fy]);
@ -1294,7 +1371,7 @@ begin
mt:=mouseOverTriangle; mt:=mouseOverTriangle;
mc:=MouseOverCorner; mc:=MouseOverCorner;
if TriangleCaught = false then // look for a point under cursor if not (CornerCaught or TriangleCaught) then // look for a point under cursor
begin begin
if SelectMode then if SelectMode then
begin begin
@ -1306,7 +1383,7 @@ begin
i1:=i0; i1:=i0;
end; end;
for i := i0 to i1 do for i := i1 downto i0 do
for j := 0 to 2 do for j := 0 to 2 do
begin begin
d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]); d := dist(fx, fy, MainTriangles[i].x[j], MainTriangles[i].y[j]);
@ -1315,6 +1392,24 @@ begin
mouseOverTriangle:=i; mouseOverTriangle:=i;
mouseOverCorner:=j; mouseOverCorner:=j;
// -- from MouseDown -- for highlighting:
// TODO: optimize...
if j = rgPivot.ItemIndex then
begin
Pivot.x := 0;
Pivot.y := 0;
LocalAxisLocked := true;
end
else begin
Pivot := GetPivot(mouseOverTriangle);
LocalAxisLocked := false;
end;
oldx := MainTriangles[mouseOverTriangle].x[j] - Pivot.X;
oldy := MainTriangles[mouseOverTriangle].y[j] - Pivot.Y;
olddist := Hypot(oldx, oldy); //sqrt(oldx*oldx + oldy*oldy);
// --
goto FoundCorner; goto FoundCorner;
end; end;
end; end;
@ -1368,6 +1463,15 @@ Skip1:
vy := (fy-Pivot.Y)*olddist/d; vy := (fy-Pivot.Y)*olddist/d;
a := arctan2(vy,vx) - arctan2(oldy,oldx); a := arctan2(vy,vx) - arctan2(oldy,oldx);
end; end;
if LocalAxisLocked then with MainTriangles[SelectedTriangle] do
begin
assert(SelectedCorner = 1);
x[0] := x[0] + vx-x[1];
y[0] := y[0] + vy-y[1];
x[2] := x[2] + vx-x[1];
y[2] := y[2] + vy-y[1];
end;
MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X+vx; MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X+vx;
MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y+vy; MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y+vy;
end end
@ -1385,6 +1489,16 @@ Skip1:
begin // move point along vector ("scale") begin // move point along vector ("scale")
if olddist<>0 then begin if olddist<>0 then begin
vy := (oldx*(fx-Pivot.X) + oldy*(fy-Pivot.Y))/(olddist*olddist); vy := (oldx*(fx-Pivot.X) + oldy*(fy-Pivot.Y))/(olddist*olddist);
if LocalAxisLocked then with MainTriangles[SelectedTriangle] do
begin
assert(SelectedCorner = 1);
x[0] := x[0] + oldx*vy-x[1];
y[0] := y[0] + oldy*vy-y[1];
x[2] := x[2] + oldx*vy-x[1];
y[2] := y[2] + oldy*vy-y[1];
end;
MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X + oldx*vy; MainTriangles[SelectedTriangle].x[SelectedCorner] := Pivot.X + oldx*vy;
MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y + oldy*vy; MainTriangles[SelectedTriangle].y[SelectedCorner] := Pivot.Y + oldy*vy;
StatusBar.Panels[2].Text := Format('Scale: %3.2f%%', [vy*100]); StatusBar.Panels[2].Text := Format('Scale: %3.2f%%', [vy*100]);
@ -1469,12 +1583,15 @@ Skip2:
if abs(vx) > abs(vy) then vy := 0 if abs(vx) > abs(vy) then vy := 0
else vx := 0; else vx := 0;
end; end;
MainTriangles[SelectedTriangle].x[0] := OldTriangle.x[0] + vx; with MainTriangles[SelectedTriangle] do
MainTriangles[SelectedTriangle].y[0] := OldTriangle.y[0] + vy; begin
MainTriangles[SelectedTriangle].x[1] := OldTriangle.x[1] + vx; x[0] := OldTriangle.x[0] + vx;
MainTriangles[SelectedTriangle].y[1] := OldTriangle.y[1] + vy; y[0] := OldTriangle.y[0] + vy;
MainTriangles[SelectedTriangle].x[2] := OldTriangle.x[2] + vx; x[1] := OldTriangle.x[1] + vx;
MainTriangles[SelectedTriangle].y[2] := OldTriangle.y[2] + vy; y[1] := OldTriangle.y[1] + vy;
x[2] := OldTriangle.x[2] + vx;
y[2] := OldTriangle.y[2] + vy;
end;
StatusBar.Panels[2].Text := Format('Move: %3.3f ; %3.3f', [vx, vy]); StatusBar.Panels[2].Text := Format('Move: %3.3f ; %3.3f', [vx, vy]);
end; end;
HasChanged := True; HasChanged := True;
@ -1529,7 +1646,18 @@ begin
CornerCaught := True; CornerCaught := True;
SelectedCorner := j; SelectedCorner := j;
// Pivot := GetPivot;
if j = rgPivot.ItemIndex then // hmm
begin
Pivot.x := 0;
Pivot.y := 0;
LocalAxisLocked := true;
end
else begin
Pivot := GetPivot; Pivot := GetPivot;
LocalAxisLocked := false;
end;
oldx := MainTriangles[SelectedTriangle].x[j] - Pivot.X; oldx := MainTriangles[SelectedTriangle].x[j] - Pivot.X;
oldy := MainTriangles[SelectedTriangle].y[j] - Pivot.Y; oldy := MainTriangles[SelectedTriangle].y[j] - Pivot.Y;
olddist := sqrt(oldx*oldx + oldy*oldy); olddist := sqrt(oldx*oldx + oldy*oldy);
@ -1549,7 +1677,7 @@ begin
i := InsideTriangle(fx, fy); i := InsideTriangle(fx, fy);
if i >= 0 then SelectedTriangle := i if i >= 0 then SelectedTriangle := i
else else
if oldMode = modeNone then exit; if (oldMode = modeNone) and not(ssShift in Shift) then exit;
end; end;
TriangleCaught := True; TriangleCaught := True;
@ -1653,6 +1781,10 @@ begin
GridColor2 := Registry.ReadInteger('GridColor2') GridColor2 := Registry.ReadInteger('GridColor2')
else else
GridColor2 := $333333; GridColor2 := $333333;
if Registry.ValueExists('HelpersColor') then
HelpersColor := Registry.ReadInteger('HelpersColor')
else
HelpersColor := $808080;
if Registry.ValueExists('ReferenceTriangleColor') then if Registry.ValueExists('ReferenceTriangleColor') then
ReferenceTriangleColor := Registry.ReadInteger('ReferenceTriangleColor') ReferenceTriangleColor := Registry.ReadInteger('ReferenceTriangleColor')
else else
@ -1668,6 +1800,7 @@ begin
BackgroundColor := $000000; BackgroundColor := $000000;
GridColor1 := $444444; GridColor1 := $444444;
GridColor2 := $333333; GridColor2 := $333333;
HelpersColor := $808080;
ReferenceTriangleColor := integer(clGray); ReferenceTriangleColor := integer(clGray);
mnuResetLoc.checked := true; mnuResetLoc.checked := true;
tbResetLoc.Down := true; tbResetLoc.Down := true;
@ -1960,6 +2093,7 @@ begin
Registry.WriteInteger('BackgroundColor', BackgroundColor); Registry.WriteInteger('BackgroundColor', BackgroundColor);
Registry.WriteInteger('GridColor1', GridColor1); Registry.WriteInteger('GridColor1', GridColor1);
Registry.WriteInteger('GridColor2', GridColor2); Registry.WriteInteger('GridColor2', GridColor2);
Registry.WriteInteger('HelpersColor', HelpersColor);
Registry.WriteInteger('ReferenceTriangleColor', ReferenceTriangleColor); Registry.WriteInteger('ReferenceTriangleColor', ReferenceTriangleColor);
Registry.WriteBool('ResetLocation', mnuResetLoc.checked); Registry.WriteBool('ResetLocation', mnuResetLoc.checked);
{ Size and position } { Size and position }
@ -2271,22 +2405,9 @@ procedure TEditForm.scrlXFormColorChange(Sender: TObject);
begin begin
cp.xform[SelectedTriangle].color := (scrlXFormColor.Position) / scrlXFormColor.Max; cp.xform[SelectedTriangle].color := (scrlXFormColor.Position) / scrlXFormColor.Max;
txtXFormColor.Text := Format('%1.3f', [cp.xform[SelectedTriangle].color]); txtXFormColor.Text := Format('%1.3f', [cp.xform[SelectedTriangle].color]);
txtXFormColor.Refresh;
pnlXFormColor.color := ColorValToColor(MainCp.cmap, cp.xform[SelectedTriangle].color); pnlXFormColor.color := ColorValToColor(MainCp.cmap, cp.xform[SelectedTriangle].color);
{
with ColorImage.Canvas do ///..........!
begin
Row := Bitmap.Scanline[0];
for i := 0 to Bitmap.Width - 1 do
begin
with Row[i] do
begin
rgbtRed := Palette[i][0];
rgbtGreen := Palette[i][1];
rgbtBlue := Palette[i][2];
end;
end;
end;
}
DrawPreview; DrawPreview;
end; end;
@ -2347,6 +2468,17 @@ begin
end; end;
end; end;
procedure TEditForm.pnlHelpersColorClick(Sender: TObject);
begin
AdjustForm.ColorDialog.Color := pnlHelpersColor.Color;
if AdjustForm.ColorDialog.Execute then
begin
pnlHelpersColor.Color := AdjustForm.ColorDialog.Color;
HelpersColor := Integer(pnlHelpersColor.color);
TriangleView.Invalidate;
end;
end;
procedure TEditForm.txtXFormColorExit(Sender: TObject); procedure TEditForm.txtXFormColorExit(Sender: TObject);
var var
v: double; v: double;
@ -2643,7 +2775,6 @@ begin
begin begin
MainForm.UpdateUndo; MainForm.UpdateUndo;
//...(?)
UpdateFlame(true); UpdateFlame(true);
HasChanged := False; HasChanged := False;
end; end;
@ -2675,21 +2806,26 @@ end;
{ **************************************************************************** } { **************************************************************************** }
function TEditForm.GetPivot: TSPoint; function TEditForm.GetPivot: TSPoint;
begin
Result := GetPivot(SelectedTriangle);
end;
function TEditForm.GetPivot(n: integer): TSPoint;
begin begin
case (rgPivot.ItemIndex) of case (rgPivot.ItemIndex) of
0: begin 0: begin
Result.x:=MainTriangles[SelectedTriangle].x[0]; Result.x:=MainTriangles[n].x[0];
Result.y:=MainTriangles[SelectedTriangle].y[0]; Result.y:=MainTriangles[n].y[0];
end; end;
1: begin 1: begin
Result.x:=MainTriangles[SelectedTriangle].x[1]; Result.x:=MainTriangles[n].x[1];
Result.y:=MainTriangles[SelectedTriangle].y[1]; Result.y:=MainTriangles[n].y[1];
end; end;
2: begin 2: begin
Result.x:=MainTriangles[SelectedTriangle].x[2]; Result.x:=MainTriangles[n].x[2];
Result.y:=MainTriangles[SelectedTriangle].y[2]; Result.y:=MainTriangles[n].y[2];
end; end;
3: Result:=Centroid(MainTriangles[SelectedTriangle]); 3: Result:=Centroid(MainTriangles[n]);
else else
Result.x:=0; Result.x:=0;
Result.y:=0; Result.y:=0;
@ -3117,6 +3253,7 @@ begin
MainForm.mnuFullScreenClick(Sender); MainForm.mnuFullScreenClick(Sender);
end; end;
(*
// --Z-- // transform color scroller - TODO // --Z-- // transform color scroller - TODO
procedure TEditForm.ColorImageMouseDown(Sender: TObject; procedure TEditForm.ColorImageMouseDown(Sender: TObject;
@ -3173,6 +3310,7 @@ begin
end; end;
end; end;
end; end;
*)
//-- Variable List ------------------------------------------------------------- //-- Variable List -------------------------------------------------------------