(Almost) finished the 'custom triangle view control'...

Well, actually it's just a workaround to intercept keystrokes...
It still can't even catch arrow-keys, looks like I missed something... :-\
This commit is contained in:
zueuk 2005-09-15 14:23:32 +00:00
parent 711742df89
commit 09e406a927
5 changed files with 261 additions and 247 deletions

View File

@ -173,7 +173,7 @@ object AdjustForm: TAdjustForm
Top = 133 Top = 133
Width = 390 Width = 390
Height = 131 Height = 131
ActivePage = TabSheet3 ActivePage = TabSheet1
Align = alBottom Align = alBottom
TabOrder = 1 TabOrder = 1
object TabSheet1: TTabSheet object TabSheet1: TTabSheet
@ -450,6 +450,7 @@ object AdjustForm: TAdjustForm
Top = 76 Top = 76
Width = 113 Width = 113
Height = 21 Height = 21
Cursor = crHandPoint
BevelOuter = bvLowered BevelOuter = bvLowered
Color = clBlack Color = clBlack
TabOrder = 6 TabOrder = 6

View File

@ -0,0 +1,62 @@
unit CustomDrawControl;
interface
uses
Classes, Controls, Messages, Windows, Graphics;
type
TCustomDrawControl = class(TCustomControl)
private
FOnPaint: TNotifyEvent;
procedure WMEraseBkgnd(var Message: TWMEraseBkgnd); message WM_ERASEBKGND;
// procedure WMSetFocus(var Message: TWMSetFocus); message WM_SETFOCUS;
// procedure WMKillFocus(var Message: TWMKillFocus); message WM_KILLFOCUS;
protected
public
procedure Paint; override;
property OnPaint: TNotifyEvent read FOnPaint write FOnPaint;
property Canvas;
property OnDblClick;
property OnKeyDown;
// property OnKeyPress;
// property OnKeyUp;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseWheel;
// property OnMouseWheelDown;
// property OnMouseWheelUp;
property OnEnter;
property OnExit;
end;
implementation
procedure TCustomDrawControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);
begin
Message.Result := 1;
end;
{
procedure TCustomDrawControl.WMSetFocus(var Message: TWMSetFocus);
begin
Invalidate;
end;
procedure TCustomDrawControl.WMKillFocus(var Message: TWMKillFocus);
begin
Invalidate;
end;
}
procedure TCustomDrawControl.Paint;
begin
if Assigned(FOnPaint) then FOnPaint(Self);
end;
end.

View File

@ -417,11 +417,9 @@ object EditForm: TEditForm
Color = clBlack Color = clBlack
DropDownCount = 12 DropDownCount = 12
ItemHeight = 13 ItemHeight = 13
TabOrder = 1 TabOrder = 0
TabStop = False
OnChange = cbTransformsChange OnChange = cbTransformsChange
OnDrawItem = cbTransformsDrawItem OnDrawItem = cbTransformsDrawItem
OnKeyDown = cbKeyDown
end end
object PageControl: TPageControl object PageControl: TPageControl
Left = 1 Left = 1
@ -432,7 +430,7 @@ object EditForm: TEditForm
Align = alBottom Align = alBottom
Anchors = [akLeft, akTop, akRight, akBottom] Anchors = [akLeft, akTop, akRight, akBottom]
MultiLine = True MultiLine = True
TabOrder = 0 TabOrder = 1
TabStop = False TabStop = False
object TriangleTab: TTabSheet object TriangleTab: TTabSheet
Caption = 'Triangle' Caption = 'Triangle'
@ -1419,6 +1417,7 @@ object EditForm: TEditForm
Top = 72 Top = 72
Width = 129 Width = 129
Height = 17 Height = 17
Cursor = crHandPoint
BevelOuter = bvLowered BevelOuter = bvLowered
Color = clBlack Color = clBlack
TabOrder = 0 TabOrder = 0
@ -1448,6 +1447,7 @@ object EditForm: TEditForm
Top = 152 Top = 152
Width = 129 Width = 129
Height = 17 Height = 17
Cursor = crHandPoint
BevelOuter = bvLowered BevelOuter = bvLowered
Color = clGray Color = clGray
TabOrder = 3 TabOrder = 3
@ -1458,6 +1458,7 @@ object EditForm: TEditForm
Top = 112 Top = 112
Width = 62 Width = 62
Height = 17 Height = 17
Cursor = crHandPoint
BevelOuter = bvLowered BevelOuter = bvLowered
Color = clBlack Color = clBlack
TabOrder = 4 TabOrder = 4
@ -1468,6 +1469,7 @@ object EditForm: TEditForm
Top = 112 Top = 112
Width = 62 Width = 62
Height = 17 Height = 17
Cursor = crHandPoint
BevelOuter = bvLowered BevelOuter = bvLowered
Color = clBlack Color = clBlack
TabOrder = 5 TabOrder = 5

View File

@ -23,7 +23,7 @@ interface
uses uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, Math, Menus, ToolWin, Registry, MyTypes, ExtCtrls, StdCtrls, ComCtrls, Math, Menus, ToolWin, Registry, MyTypes,
ControlPoint, Render, cmap, Grids, ValEdit, Buttons, ImgList, TriangleGraph; ControlPoint, Render, cmap, Grids, ValEdit, Buttons, ImgList, CustomDrawControl;
const const
// PixelCountMax = 32768; // PixelCountMax = 32768;
@ -159,19 +159,22 @@ type
procedure vleVariablesKeyPress(Sender: TObject; var Key: Char); procedure vleVariablesKeyPress(Sender: TObject; var Key: Char);
procedure vleVariablesExit(Sender: TObject); procedure vleVariablesExit(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure GraphImageMouseMove(Sender: TObject; Shift: TShiftState; X, procedure TriangleViewMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: integer); Y: integer);
procedure GraphImageMouseDown(Sender: TObject; Button: TMouseButton; procedure TriangleViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); Shift: TShiftState; X, Y: integer);
procedure GraphImageMouseUp(Sender: TObject; Button: TMouseButton; procedure TriangleViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); Shift: TShiftState; X, Y: integer);
procedure TriangleViewMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
procedure TriangleViewDblClick(Sender: TObject);
procedure TriangleViewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure mnuDeleteClick(Sender: TObject); procedure mnuDeleteClick(Sender: TObject);
procedure mnuAddClick(Sender: TObject); procedure mnuAddClick(Sender: TObject);
procedure mnuDupClick(Sender: TObject); procedure mnuDupClick(Sender: TObject);
procedure mnuAutoZoomClick(Sender: TObject); procedure mnuAutoZoomClick(Sender: TObject);
// procedure mnuXFlipClick(Sender: TObject);
// procedure mnuYFlipClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject); procedure btnCloseClick(Sender: TObject);
procedure FormResize(Sender: TObject); procedure FormResize(Sender: TObject);
procedure txtPKeyPress(Sender: TObject; var Key: Char); procedure txtPKeyPress(Sender: TObject; var Key: Char);
@ -191,7 +194,6 @@ type
procedure mnuHorizintalFlipAllClick(Sender: TObject); procedure mnuHorizintalFlipAllClick(Sender: TObject);
procedure mnuFlipVerticalClick(Sender: TObject); procedure mnuFlipVerticalClick(Sender: TObject);
procedure mnuFlipHorizontalClick(Sender: TObject); procedure mnuFlipHorizontalClick(Sender: TObject);
procedure GraphImageDblClick(Sender: TObject);
procedure cbTransformsChange(Sender: TObject); procedure cbTransformsChange(Sender: TObject);
procedure CoefKeyPress(Sender: TObject; var Key: Char); procedure CoefKeyPress(Sender: TObject; var Key: Char);
procedure CoefExit(Sender: TObject); procedure CoefExit(Sender: TObject);
@ -206,14 +208,11 @@ type
procedure txtXFormColorKeyPress(Sender: TObject; var Key: Char); procedure txtXFormColorKeyPress(Sender: TObject; var Key: Char);
procedure txtSymmetryExit(Sender: TObject); procedure txtSymmetryExit(Sender: TObject);
procedure txtSymmetryKeyPress(Sender: TObject; var Key: Char); procedure txtSymmetryKeyPress(Sender: TObject; var Key: Char);
procedure VEVarsKeyPress(Sender: TObject; var Key: Char); procedure VEVarsKeyPress(Sender: TObject; var Key: Char);
procedure VEVarsExit(Sender: TObject); procedure VEVarsExit(Sender: TObject);
procedure VEVarsValidate(Sender: TObject; ACol, ARow: Integer; procedure VEVarsValidate(Sender: TObject; ACol, ARow: Integer;
const KeyName, KeyValue: String); const KeyName, KeyValue: String);
// procedure mnuRotateRightClick(Sender: TObject);
// procedure mnuRotateLeftClick(Sender: TObject);
// procedure mnuScaleUpClick(Sender: TObject);
// procedure mnuScaleDownClick(Sender: TObject);
procedure btTrgRotateLeftClick(Sender: TObject); procedure btTrgRotateLeftClick(Sender: TObject);
procedure btTrgRotateRightClick(Sender: TObject); procedure btTrgRotateRightClick(Sender: TObject);
@ -226,15 +225,12 @@ type
procedure btTrgMoveDownClick(Sender: TObject); procedure btTrgMoveDownClick(Sender: TObject);
procedure btTrgScaleUpClick(Sender: TObject); procedure btTrgScaleUpClick(Sender: TObject);
procedure btTrgScaleDownClick(Sender: TObject); procedure btTrgScaleDownClick(Sender: TObject);
procedure editKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure splitterMoved(Sender: TObject); procedure splitterMoved(Sender: TObject);
procedure tbSelectClick(Sender: TObject); procedure tbSelectClick(Sender: TObject);
procedure btTrgMoveLUClick(Sender: TObject); procedure btTrgMoveLUClick(Sender: TObject);
procedure btTrgMoveLDClick(Sender: TObject); procedure btTrgMoveLDClick(Sender: TObject);
procedure btTrgMoveRUClick(Sender: TObject); procedure btTrgMoveRUClick(Sender: TObject);
procedure btTrgMoveRDClick(Sender: TObject); procedure btTrgMoveRDClick(Sender: TObject);
procedure editMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
procedure PreviewImageDblClick(Sender: TObject); procedure PreviewImageDblClick(Sender: TObject);
procedure editKeyPress(Sender: TObject; var Key: Char); procedure editKeyPress(Sender: TObject; var Key: Char);
procedure rgPivotClicked(Sender: TObject); procedure rgPivotClicked(Sender: TObject);
@ -254,8 +250,6 @@ type
procedure cbTransformsDrawItem(Control: TWinControl; Index: Integer; procedure cbTransformsDrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState); Rect: TRect; State: TOwnerDrawState);
procedure cbKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure tbFullViewClick(Sender: TObject); procedure tbFullViewClick(Sender: TObject);
@ -267,16 +261,15 @@ type
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
private private
TriangleGraph: TTriangleGraph; TriangleView: TCustomDrawControl;
bm: TBitmap; // bm: TBitmap;
cmap: TColorMap; cmap: TColorMap;
// cp1: TControlPoint; // cp1: TControlPoint;
PreviewDensity: double; PreviewDensity: double;
// --Z-- // --Z--
graphDragMode, dragged: boolean; viewDragMode, viewDragged: boolean;
editMode: (modeMove, modeRotate, modeScale); editMode: (modeMove, modeRotate, modeScale);
key_handled: boolean; // hack... there must be a better way to do this :-\
MousePos: TPoint; // in screen coordinates MousePos: TPoint; // in screen coordinates
mouseOverTriangle: integer; mouseOverTriangle: integer;
@ -320,7 +313,7 @@ type
// --Z-- functions moved from outside (?) // --Z-- functions moved from outside (?)
procedure ShowSelectedInfo; procedure ShowSelectedInfo;
procedure Scale(var fx, fy: double; x, y, Width, Height: integer); procedure Scale(var fx, fy: double; x, y: integer);
procedure ReadjustWeights(var cp: TControlPoint); procedure ReadjustWeights(var cp: TControlPoint);
public public
@ -331,7 +324,7 @@ type
procedure UpdateDisplay(preview_only: boolean = false); procedure UpdateDisplay(preview_only: boolean = false);
procedure AutoZoom; procedure AutoZoom;
procedure DrawGraph; procedure TriangleViewPaint(Sender: TObject);
end; end;
const const
@ -369,11 +362,14 @@ var
oldTriangle: TTriangle; oldTriangle: TTriangle;
gCenterX: double; gCenterX: double;
gCentery: double; gCentery: double;
gxlength: double;
gylength: double;
{$R *.DFM} {$R *.DFM}
procedure DrawGraph;
begin
EditForm.TriangleView.Invalidate;
end;
{ Triangle transformations } { Triangle transformations }
function OffsetTriangleRandom(t: TTriangle): TTriangle; function OffsetTriangleRandom(t: TTriangle): TTriangle;
@ -567,7 +563,6 @@ begin
ShowSelectedInfo; ShowSelectedInfo;
AutoZoom; AutoZoom;
DrawGraph;
end; end;
procedure TEditForm.DrawPreview; procedure TEditForm.DrawPreview;
@ -692,19 +687,20 @@ begin
end; end;
end; end;
procedure TEditForm.Scale(var fx, fy: double; x, y, Width, Height: integer); procedure TEditForm.Scale(var fx, fy: double; x, y: integer);
var var
sc: double; sc: double;
begin begin
sc := 50 * GraphZoom; sc := 50 * GraphZoom;
fx := (x - (Width / 2)) / sc + gCenterX; fx := (x - (TriangleView.Width / 2)) / sc + gCenterX;
fy := -((y - (Height / 2)) / sc - gCentery); fy := -((y - (TriangleView.Height / 2)) / sc - gCentery);
end; end;
procedure TEditForm.AutoZoom; procedure TEditForm.AutoZoom;
var var
i, j: integer; i, j: integer;
xminz, yminz, xmaxz, ymaxz: double; xminz, yminz, xmaxz, ymaxz: double;
gxlength, gylength: double;
begin begin
xminz := 0; xminz := 0;
yminz := 0; yminz := 0;
@ -724,15 +720,18 @@ begin
gylength := ymaxz - yminz; gylength := ymaxz - yminz;
gCenterX := xminz + gxlength / 2; gCenterX := xminz + gxlength / 2;
gCentery := yminz + gylength / 2; gCentery := yminz + gylength / 2;
if gxlength >= gylength then if gxlength >= gylength then
begin begin
GraphZoom := TriangleGraph.Width / 60 / gxlength; GraphZoom := TriangleView.Width / 60 / gxlength;
end end
else else
begin begin
GraphZoom := TriangleGraph.Height / 60 / gylength; GraphZoom := TriangleView.Height / 60 / gylength;
end; end;
EditForm.StatusBar.Panels[2].Text := Format('Zoom: %f', [GraphZoom]); EditForm.StatusBar.Panels[2].Text := Format('Zoom: %f', [GraphZoom]);
TriangleView.Invalidate;
end; end;
procedure TEditForm.UpdateFlameX; procedure TEditForm.UpdateFlameX;
@ -757,7 +756,7 @@ begin
if not chkPreserve.checked then ComputeWeights(cp, MainTriangles, transforms); if not chkPreserve.checked then ComputeWeights(cp, MainTriangles, transforms);
DrawPreview; DrawPreview;
ShowSelectedInfo; ShowSelectedInfo;
DrawGraph; TriangleView.Refresh;;
end; end;
procedure TEditForm.UpdateFlame(DrawMain: boolean); procedure TEditForm.UpdateFlame(DrawMain: boolean);
@ -768,7 +767,7 @@ begin
if not chkPreserve.Checked then ComputeWeights(cp, MainTriangles, transforms); if not chkPreserve.Checked then ComputeWeights(cp, MainTriangles, transforms);
DrawPreview; DrawPreview;
ShowSelectedInfo; ShowSelectedInfo;
DrawGraph; TriangleView.Invalidate;
if DrawMain then begin if DrawMain then begin
MainForm.StopThread; MainForm.StopThread;
MainCp.Copy(cp); MainCp.Copy(cp);
@ -916,35 +915,45 @@ begin
else Result := clr[n mod 16]; else Result := clr[n mod 16];
end; end;
procedure TEditForm.DrawGraph; procedure TEditForm.TriangleViewPaint(Sender: TObject);
var
ix, iy, sc: double;
function ToScreen(fx, fy: double): TPoint;
begin
Result.x := integer(round(ix + (fx - gCenterX) * sc));
Result.y := integer(round(iy - (fy - gCenterY) * sc));
end;
var var
i: integer; i: integer;
ix, iy, sc: double;
ax, ay, bx, by, cx, cy: integer; ax, ay {, bx, by, cx, cy}: integer;
a, b, c: TPoint;
BitMap: TBitMap;
Width, Height: integer; Width, Height: integer;
// BitMap: TBitMap;
// --Z--
gridX1, gridX2, gridY1, gridY2, gi, gstep: double; gridX1, gridX2, gridY1, gridY2, gi, gstep: double;
gp: TRoundToRange; gp: TRoundToRange;
label DrawCorner; label DrawCorner;
begin begin
// --Z-- hmmm: assert(SelectedTriangle >= 0);
if SelectedTriangle < 0 then SelectedTriangle := 0 assert(TCustomDrawControl(Sender) = TriangleView);
else if SelectedTriangle >= Transforms then SelectedTriangle := Transforms-1; if SelectedTriangle >= Transforms then SelectedTriangle := Transforms-1;
// BitMap := TBitMap.Create; BitMap := TBitMap.Create;
Width := TriangleView.Width;
Height := TriangleView.Height;
Bitmap.Width := Width;
Bitmap.Height := Height;
ix := Width / 2;
iy := Height / 2;
sc := 50 * GraphZoom;
try try
Width := TriangleGraph.Width; with Bitmap.Canvas do
Height := TriangleGraph.Height;
// BitMap.Width := Width;
// BitMap.Height := Height;
ix := Width / 2;
iy := Height / 2;
sc := 50 * GraphZoom;
// with Bitmap.canvas do
with TriangleGraph.Canvas do
begin begin
brush.Color := pnlBackColor.Color; brush.Color := pnlBackColor.Color;
//if not TriangleView.Focused then brush.Color := brush.Color xor $1f1f1f;
FillRect(rect(0, 0, Width, Height)); FillRect(rect(0, 0, Width, Height));
Pen.Width := 1; Pen.Width := 1;
@ -996,6 +1005,7 @@ begin
{Reference Triangle} {Reference Triangle}
Pen.Style := psDot; Pen.Style := psDot;
Pen.color := pnlReference.Color; Pen.color := pnlReference.Color;
{
ax := integer(round(ix + (MainTriangles[-1].x[0] - gCenterX) * sc)); ax := integer(round(ix + (MainTriangles[-1].x[0] - gCenterX) * sc));
ay := integer(round(iy - (MainTriangles[-1].y[0] - gCenterY) * sc)); ay := integer(round(iy - (MainTriangles[-1].y[0] - gCenterY) * sc));
bx := integer(round(ix + (MainTriangles[-1].x[1] - gCenterX) * sc)); bx := integer(round(ix + (MainTriangles[-1].x[1] - gCenterX) * sc));
@ -1003,62 +1013,47 @@ begin
cx := integer(round(ix + (MainTriangles[-1].x[2] - gCenterX) * sc)); cx := integer(round(ix + (MainTriangles[-1].x[2] - gCenterX) * sc));
cy := integer(round(iy - (MainTriangles[-1].y[2] - gCenterY) * sc)); cy := integer(round(iy - (MainTriangles[-1].y[2] - gCenterY) * sc));
Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]); Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]);
}
a := ToScreen(MainTriangles[-1].x[0], MainTriangles[-1].y[0]);
b := ToScreen(MainTriangles[-1].x[1], MainTriangles[-1].y[1]);
c := ToScreen(MainTriangles[-1].x[2], MainTriangles[-1].y[2]);
Polyline([a, b, c, a]);
Font.color := Pen.color; Font.color := Pen.color;
TextOut(ax, ay, 'A'); TextOut(a.x, a.y, 'A');
TextOut(bx, by, 'B'); TextOut(b.x, b.y, 'B');
TextOut(cx, cy, 'C'); TextOut(c.x, c.y, 'C');
Pen.Style := psSolid; Pen.Style := psSolid;
{Transforms} {Transforms}
for i := 0 to Transforms - 1 do for i := 0 to Transforms - 1 do
begin begin
{
ax := integer(round(ix + (MainTriangles[i].x[0] - gCenterX) * sc)); ax := integer(round(ix + (MainTriangles[i].x[0] - gCenterX) * sc));
ay := integer(round(iy - (MainTriangles[i].y[0] - gCenterY) * sc)); ay := integer(round(iy - (MainTriangles[i].y[0] - gCenterY) * sc));
bx := integer(round(ix + (MainTriangles[i].x[1] - gCenterX) * sc)); bx := integer(round(ix + (MainTriangles[i].x[1] - gCenterX) * sc));
by := integer(round(iy - (MainTriangles[i].y[1] - gCenterY) * sc)); by := integer(round(iy - (MainTriangles[i].y[1] - gCenterY) * sc));
cx := integer(round(ix + (MainTriangles[i].x[2] - gCenterX) * sc)); cx := integer(round(ix + (MainTriangles[i].x[2] - gCenterX) * sc));
cy := integer(round(iy - (MainTriangles[i].y[2] - gCenterY) * sc)); cy := integer(round(iy - (MainTriangles[i].y[2] - gCenterY) * sc));
{
TrgPoints[0].x := integer(round(ix + (MainTriangles[i].x[0] - gCenterX) * sc));
TrgPoints[0].y := integer(round(iy - (MainTriangles[i].y[0] - gCenterY) * sc));
TrgPoints[1].x := integer(round(ix + (MainTriangles[i].x[1] - gCenterX) * sc));
TrgPoints[1].y := integer(round(iy - (MainTriangles[i].y[1] - gCenterY) * sc));
TrgPoints[2].x := integer(round(ix + (MainTriangles[i].x[2] - gCenterX) * sc));
TrgPoints[2].y := integer(round(iy - (MainTriangles[i].y[2] - gCenterY) * sc));
} }
//brush.Color := pnlBackColor.Color; a := ToScreen(MainTriangles[i].x[0], MainTriangles[i].y[0]);
b := ToScreen(MainTriangles[i].x[1], MainTriangles[i].y[1]);
c := ToScreen(MainTriangles[i].x[2], MainTriangles[i].y[2]);
Pen.Color := GetTriangleColor(i); Pen.Color := GetTriangleColor(i);
if i <> SelectedTriangle then Pen.Style := psDot; if i <> SelectedTriangle then Pen.Style := psDot;
//MoveTo(ax, ay); LineTo(bx, by); LineTo(cx, cy); LineTo(ax, ay); Polyline([a, b, c, a]);
Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]);
Pen.Style := psSolid; Pen.Style := psSolid;
Ellipse(ax - 4, ay - 4, ax + 4, ay + 4); Ellipse(a.x - 4, a.y - 4, a.x + 4, a.y + 4);
Ellipse(bx - 4, by - 4, bx + 4, by + 4); Ellipse(b.x - 4, b.y - 4, b.x + 4, b.y + 4);
Ellipse(cx - 4, cy - 4, cx + 4, cy + 4); Ellipse(c.x - 4, c.y - 4, c.x + 4, c.y + 4);
Font.color := Pen.color; Font.color := Pen.color;
//brush.Color := pnlBackColor.Color; TextOut(a.x, a.y, 'A');
TextOut(ax, ay, 'A'); TextOut(b.x, b.y, 'B');
TextOut(bx, by, 'B'); TextOut(c.x, c.y, 'C');
TextOut(cx, cy, 'C');
{
brush.style:=bsClear;
Font.color := pnlBackColor.Color;
font.style:=[fsBold];
TextOut(ax+2, ay+2, 'A');
TextOut(bx+2, by+2, 'B');
TextOut(cx+2, cy+2, 'C');
font.style:=[];
Font.color := Pen.color;
TextOut(ax+1, ay+1, 'A');
TextOut(bx+1, by+1, 'B');
TextOut(cx+1, cy+1, 'C');
}
end; end;
// if dragging, draw pivot axis // if dragging, draw pivot axis
@ -1067,28 +1062,32 @@ begin
Pen.Mode := pmMerge; Pen.Mode := pmMerge;
Pen.Color := $555555; Pen.Color := $555555;
Pen.Style := psDot; Pen.Style := psDot;
ax := integer(round(ix + (Pivot.x - gCenterX)*sc)); // ax := integer(round(ix + (Pivot.x - gCenterX)*sc));
ay := integer(round(iy + (gCentery - Pivot.y)*sc)); // ay := integer(round(iy + (gCentery - Pivot.y)*sc));
MoveTo(ax, 0); a := ToScreen(Pivot.x, Pivot.y);
LineTo(ax, Height); MoveTo(a.x, 0);
MoveTo(0, ay); LineTo(a.x, Height);
LineTo(Width, ay); MoveTo(0, a.y);
LineTo(Width, a.y);
Pen.Color := $707070; Pen.Color := $707070;
Pen.Style := psSolid; Pen.Style := psSolid;
Pen.Mode := pmXor; Pen.Mode := pmXor;
if CornerCaught then if CornerCaught then
begin begin
ax := integer(round(ix + (MainTriangles[SelectedTriangle].x[SelectedCorner] - gCenterX)*sc)); // ax := integer(round(ix + (MainTriangles[SelectedTriangle].x[SelectedCorner] - gCenterX)*sc));
ay := integer(round(iy - (MainTriangles[SelectedTriangle].y[SelectedCorner] - gCenterY)*sc)); // ay := integer(round(iy - (MainTriangles[SelectedTriangle].y[SelectedCorner] - gCenterY)*sc));
a := ToScreen(MainTriangles[SelectedTriangle].x[SelectedCorner],
MainTriangles[SelectedTriangle].y[SelectedCorner]);
end end
else begin else begin
ax := integer(round(ix + (GetPivot.x - gCenterX)*sc)); // ax := integer(round(ix + (GetPivot.x - gCenterX)*sc));
ay := integer(round(iy - (GetPivot.y - gCenterY)*sc)); // ay := integer(round(iy - (GetPivot.y - gCenterY)*sc));
a := ToScreen(GetPivot.x, GetPivot.y);
end; end;
MoveTo(ax, 0); MoveTo(a.x, 0);
LineTo(ax, Height); LineTo(a.x, Height);
MoveTo(0, ay); MoveTo(0, a.y);
LineTo(Width, ay); LineTo(Width, a.y);
Pen.Mode := pmCopy; Pen.Mode := pmCopy;
mouseOverTriangle := SelectedTriangle; mouseOverTriangle := SelectedTriangle;
@ -1096,26 +1095,31 @@ begin
if (mouseOverTriangle >= 0) then // highlight triangle under cursor if (mouseOverTriangle >= 0) then // highlight triangle under cursor
begin begin
{
ax := integer(round(ix + (MainTriangles[mouseOverTriangle].x[0] - gCenterX) * sc)); ax := integer(round(ix + (MainTriangles[mouseOverTriangle].x[0] - gCenterX) * sc));
ay := integer(round(iy - (MainTriangles[mouseOverTriangle].y[0] - gCenterY) * sc)); ay := integer(round(iy - (MainTriangles[mouseOverTriangle].y[0] - gCenterY) * sc));
bx := integer(round(ix + (MainTriangles[mouseOverTriangle].x[1] - gCenterX) * sc)); bx := integer(round(ix + (MainTriangles[mouseOverTriangle].x[1] - gCenterX) * sc));
by := integer(round(iy - (MainTriangles[mouseOverTriangle].y[1] - gCenterY) * sc)); by := integer(round(iy - (MainTriangles[mouseOverTriangle].y[1] - gCenterY) * sc));
cx := integer(round(ix + (MainTriangles[mouseOverTriangle].x[2] - gCenterX) * sc)); cx := integer(round(ix + (MainTriangles[mouseOverTriangle].x[2] - gCenterX) * sc));
cy := integer(round(iy - (MainTriangles[mouseOverTriangle].y[2] - gCenterY) * sc)); cy := integer(round(iy - (MainTriangles[mouseOverTriangle].y[2] - gCenterY) * sc));
// Pen.Style:=psSolid; }
a := ToScreen(MainTriangles[mouseOverTriangle].x[0], MainTriangles[mouseOverTriangle].y[0]);
b := ToScreen(MainTriangles[mouseOverTriangle].x[1], MainTriangles[mouseOverTriangle].y[1]);
c := ToScreen(MainTriangles[mouseOverTriangle].x[2], MainTriangles[mouseOverTriangle].y[2]);
pen.Width:=2; pen.Width:=2;
Pen.Color:=GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f; Pen.Color:=GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f;
Pen.Mode:=pmMerge;//pmXor; Pen.Mode:=pmMerge;
brush.Color:=Pen.Color shr 1 and $7f7f7f; brush.Color:=Pen.Color shr 1 and $7f7f7f;
//Polyline([Point(ax,ay), Point(bx,by), Point(cx,cy), Point(ax,ay)]); // Polygon([Point(ax,ay), Point(bx,by), Point(cx,cy)]);
Polygon([Point(ax,ay), Point(bx,by), Point(cx,cy)]); Polygon([a, b, c]);
pen.width:=4; pen.width:=4;
Ellipse(ax - 3, ay - 3, ax + 3, ay + 3); Ellipse(a.x - 3, a.y - 3, a.x + 3, a.y + 3);
Ellipse(bx - 3, by - 3, bx + 3, by + 3); Ellipse(b.x - 3, b.y - 3, b.x + 3, b.y + 3);
Ellipse(cx - 3, cy - 3, cx + 3, cy + 3); Ellipse(c.x - 3, c.y - 3, c.x + 3, c.y + 3);
pen.width:=1; pen.width:=1;
pen.mode:=pmCopy; pen.mode:=pmCopy;
// brush.Color := pen.Color;
end; end;
pen.color := clWhite; pen.color := clWhite;
@ -1128,7 +1132,6 @@ begin
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 := GetTriangleColor(mouseOverTriangle) shr 1 and $7f7f7f;
ax := integer(round(ix + (MainTriangles[mouseOverTriangle].x[mouseOverCorner] - gCenterX) * sc)); ax := integer(round(ix + (MainTriangles[mouseOverTriangle].x[mouseOverCorner] - gCenterX) * sc));
ay := integer(round(iy - (MainTriangles[mouseOverTriangle].y[mouseOverCorner] - gCenterY) * sc)); ay := integer(round(iy - (MainTriangles[mouseOverTriangle].y[mouseOverCorner] - gCenterY) * sc));
Ellipse(ax - 4, ay - 4, ax + 4, ay + 4); Ellipse(ax - 4, ay - 4, ax + 4, ay + 4);
@ -1141,19 +1144,11 @@ begin
pen.Color:=clWhite; pen.Color:=clWhite;
brush.Color:=clSilver; brush.Color:=clSilver;
Ellipse(ax - 2, ay - 2, ax + 2, ay + 2); Ellipse(ax - 2, ay - 2, ax + 2, ay + 2);
{
MoveTo(ax-3, ay);
LineTo(ax, ay-3);
LineTo(ax+3, ay);
LineTo(ax, ay+3);
LineTo(ax-3, ay);
}
// -- // --
end; end;
// GraphImage.Picture.Graphic := Bitmap; TriangleView.Canvas.Draw(0, 0, Bitmap);
// GraphImage.Refresh;
finally finally
// BitMap.Free; BitMap.Free;
end; end;
end; end;
@ -1161,22 +1156,25 @@ procedure TEditForm.FormCreate(Sender: TObject);
var var
i: integer; i: integer;
begin begin
// // Custom control setup
TriangleGraph := TTriangleGraph.Create(self); TriangleView := TCustomDrawControl.Create(self);
TriangleGraph.TabStop := True; TriangleView.TabStop := True;
TriangleGraph.Parent := GrphPnl; TriangleView.TabOrder := 0;
TriangleGraph.Align := alClient; TriangleView.Parent := GrphPnl;
TriangleGraph.Visible := True; TriangleView.Align := alClient;
TriangleView.Visible := True;
TriangleGraph.OnDblClick := GraphImageDblClick; TriangleView.OnPaint := TriangleViewPaint;
TriangleGraph.OnMouseDown := GraphImageMouseDown;
TriangleGraph.OnMouseMove := GraphImageMouseMove;
TriangleGraph.OnMouseUp := GraphImageMouseUp;
TriangleGraph.OnMouseWheel := EditMouseWheel;
TriangleGraph.OnKeyDown := EditKeyDown;
// TriangleGraph.PopupMenu := EditPopup; TriangleView.OnDblClick := TriangleViewDblClick;
// TriangleGraph.OnPaint := TriangleView.OnMouseDown := TriangleViewMouseDown;
TriangleView.OnMouseMove := TriangleViewMouseMove;
TriangleView.OnMouseUp := TriangleViewMouseUp;
TriangleView.OnMouseWheel := TriangleViewMouseWheel;
TriangleView.OnKeyDown := TriangleViewKeyDown;
TriangleView.OnEnter := rgPivotClicked; // hack:
TriangleView.OnExit := rgPivotClicked; // there's only Invalidate() in there :)
// //
for i:= 0 to NRVAR - 1 do begin for i:= 0 to NRVAR - 1 do begin
@ -1187,7 +1185,7 @@ begin
vleVariables.InsertRow(GetVariableNameAt(i), '0', True); vleVariables.InsertRow(GetVariableNameAt(i), '0', True);
end; end;
bm := TBitmap.Create; // bm := TBitmap.Create;
GraphZoom := 1; GraphZoom := 1;
case EditPrevQual of case EditPrevQual of
@ -1216,7 +1214,7 @@ begin
VarsCache[i] := MinDouble; VarsCache[i] := MinDouble;
end; end;
procedure TEditForm.GraphImageMouseMove(Sender: TObject; Shift: TShiftState; procedure TEditForm.TriangleViewMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: integer); X, Y: integer);
var var
vx, vy, fx, fy: double; vx, vy, fx, fy: double;
@ -1226,7 +1224,7 @@ var
d: double; d: double;
label FoundCorner; label FoundCorner;
begin begin
Scale(fx, fy, x, y, TriangleGraph.Width, TriangleGraph.Height); Scale(fx, fy, x, y);
// --Z-- // --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]);
@ -1265,16 +1263,16 @@ FoundCorner:
if (mouseOverTriangle >= 0) and (SelectMode or (mouseOverTriangle = SelectedTriangle)) then if (mouseOverTriangle >= 0) and (SelectMode or (mouseOverTriangle = SelectedTriangle)) then
TriangleGraph.Cursor := crHandPoint TriangleView.Cursor := crHandPoint
else else
TriangleGraph.Cursor := crArrow; TriangleView.Cursor := crArrow;
if graphDragMode then // graph panning if viewDragMode then // graph panning
begin begin
dragged := true; viewDragged := true;
GcenterX := GcenterX - (fx - oldx); GcenterX := GcenterX - (fx - oldx);
GcenterY := GcenterY - (fy - oldy); GcenterY := GcenterY - (fy - oldy);
DrawGraph; TriangleView.Refresh;
exit; exit;
end; end;
@ -1386,24 +1384,24 @@ FoundCorner:
if (mouseOverTriangle >= 0) then if (mouseOverTriangle >= 0) then
StatusBar.Panels[2].Text := Format('Transform #%d', [mouseOverTriangle+1]) StatusBar.Panels[2].Text := Format('Transform #%d', [mouseOverTriangle+1])
else StatusBar.Panels[2].Text := ''; else StatusBar.Panels[2].Text := '';
DrawGraph; TriangleView.Refresh;;
end end
end; end;
procedure TEditForm.GraphImageMouseDown(Sender: TObject; Button: TMouseButton; procedure TEditForm.TriangleViewMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); Shift: TShiftState; X, Y: integer);
var var
d, fx, fy: double; d, fx, fy: double;
i, j: integer; i, j: integer;
//label GotCorner; //label GotCorner;
begin begin
// intoldx := x; TWinControl(Sender).SetFocus;
// intoldy := y;
CornerCaught := False; CornerCaught := False;
TriangleCaught := False; TriangleCaught := False;
dragged := false; // --Z-- viewDragged := false;
Scale(fx, fy, x, y, TriangleGraph.Width, TriangleGraph.Height); Scale(fx, fy, x, y);
Shift := Shift - [ssLeft]; // --Z-- Shift := Shift - [ssLeft];
if Button = mbLeft then if Button = mbLeft then
begin begin
if SelectMode = false then // Only change the selected triangle if SelectMode = false then // Only change the selected triangle
@ -1424,7 +1422,7 @@ begin
CornerCaught := True; CornerCaught := True;
DrawPreview; DrawPreview;
ShowSelectedInfo; ShowSelectedInfo;
DrawGraph; TriangleView.Invalidate;
exit; exit;
// //
end; end;
@ -1449,7 +1447,7 @@ begin
CornerCaught := True; CornerCaught := True;
DrawPreview; DrawPreview;
ShowSelectedInfo; ShowSelectedInfo;
DrawGraph; TriangleView.Invalidate;
exit; exit;
end; end;
end; end;
@ -1478,32 +1476,32 @@ begin
DrawPreview; DrawPreview;
ShowSelectedInfo; ShowSelectedInfo;
DrawGraph; TriangleView.Invalidate;
exit; exit;
end end
else if Button = mbRight then // graph panning else if Button = mbRight then // graph panning
begin begin
SetCaptureControl(TriangleGraph); SetCaptureControl(TriangleView);
Screen.Cursor := crSizeAll; Screen.Cursor := crSizeAll;
graphDragMode := true; viewDragMode := true;
oldx := fx; oldx := fx;
oldY := fy; oldY := fy;
end; end;
end; end;
procedure TEditForm.GraphImageMouseUp(Sender: TObject; Button: TMouseButton; procedure TEditForm.TriangleViewMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: integer); Shift: TShiftState; X, Y: integer);
begin begin
if Button = mbRight then // --Z-- panning if Button = mbRight then // --Z-- panning
begin begin
graphDragMode := false; viewDragMode := false;
if dragged=false then // haven't dragged - popup menu then if viewDragged=false then // haven't dragged - popup menu then
begin begin
GetCursorPos(mousepos); // hmmm GetCursorPos(mousepos); // hmmm
EditPopup.Popup(mousepos.x, mousepos.y); EditPopup.Popup(mousepos.x, mousepos.y);
end end
else dragged := false; else viewDragged := false;
Screen.Cursor := crDefault; Screen.Cursor := crDefault;
SetCaptureControl(nil); SetCaptureControl(nil);
exit; exit;
@ -1516,7 +1514,7 @@ begin
UpdateFlame(true); UpdateFlame(true);
HasChanged := False; HasChanged := False;
end end
else DrawGraph; else TriangleView.Invalidate;
end; end;
{ {
@ -1670,6 +1668,7 @@ begin
pnlGridColor1.Color := GridColor1; pnlGridColor1.Color := GridColor1;
pnlGridColor2.Color := GridColor2; pnlGridColor2.Color := GridColor2;
pnlReference.color := TColor(ReferenceTriangleColor); pnlReference.color := TColor(ReferenceTriangleColor);
UpdateDisplay; UpdateDisplay;
end; end;
@ -1723,27 +1722,7 @@ end;
procedure TEditForm.mnuAutoZoomClick(Sender: TObject); procedure TEditForm.mnuAutoZoomClick(Sender: TObject);
begin begin
AutoZoom; AutoZoom;
DrawGraph;
end; end;
{
procedure TEditForm.mnuXFlipClick(Sender: TObject);
begin
// MainTriangles[SelectedTriangle] := FlipTriangleHorizontal(MainTriangles[SelectedTriangle]);
with MainTriangles[SelectedTriangle] do // --Z--
begin
x[0] := GetPivot.x - x[0];
x[1] := x[1];
x[2] := x[2];
end;
UpdateFlame(True);
end;
procedure TEditForm.mnuYFlipClick(Sender: TObject);
begin
MainTriangles[SelectedTriangle] := FlipTriangleVertical(MainTriangles[SelectedTriangle]);
UpdateFlame(True);
end;
}
procedure TEditForm.btnCloseClick(Sender: TObject); procedure TEditForm.btnCloseClick(Sender: TObject);
begin begin
@ -1753,7 +1732,6 @@ end;
procedure TEditForm.FormResize(Sender: TObject); procedure TEditForm.FormResize(Sender: TObject);
begin begin
Autozoom; Autozoom;
DrawGraph;
end; end;
procedure TEditForm.CornerEditExit(Sender: TObject); procedure TEditForm.CornerEditExit(Sender: TObject);
@ -1992,7 +1970,7 @@ end;
procedure TEditForm.FormDestroy(Sender: TObject); procedure TEditForm.FormDestroy(Sender: TObject);
begin begin
bm.free; // bm.free;
cp.free; cp.free;
Render.free; Render.free;
end; end;
@ -2104,17 +2082,16 @@ begin
UpdateFlame(True); UpdateFlame(True);
end; end;
procedure TEditForm.GraphImageDblClick(Sender: TObject); procedure TEditForm.TriangleViewDblClick(Sender: TObject);
begin begin
AutoZoom; AutoZoom;
DrawGraph;
end; end;
procedure TEditForm.cbTransformsChange(Sender: TObject); procedure TEditForm.cbTransformsChange(Sender: TObject);
begin begin
if SelectedTriangle <> cbTransforms.ItemIndex then SelectedTriangle := cbTransforms.ItemIndex; if SelectedTriangle <> cbTransforms.ItemIndex then SelectedTriangle := cbTransforms.ItemIndex;
ShowSelectedInfo; ShowSelectedInfo;
DrawGraph; TriangleView.Invalidate;
end; end;
procedure TEditForm.cbTransformsDrawItem(Control: TWinControl; procedure TEditForm.cbTransformsDrawItem(Control: TWinControl;
@ -2304,13 +2281,13 @@ end;
procedure TEditForm.chkUseXFormColorClick(Sender: TObject); procedure TEditForm.chkUseXFormColorClick(Sender: TObject);
begin begin
UseTransformColors := chkUseXFormColor.checked; UseTransformColors := chkUseXFormColor.checked;
DrawGraph; TriangleView.Invalidate;
end; end;
procedure TEditForm.chkFlameBackClick(Sender: TObject); procedure TEditForm.chkFlameBackClick(Sender: TObject);
begin begin
UseFlameBackground := chkFlameBack.checked; UseFlameBackground := chkFlameBack.checked;
DrawGraph; TriangleView.Invalidate;
end; end;
procedure TEditForm.pnlBackColorClick(Sender: TObject); procedure TEditForm.pnlBackColorClick(Sender: TObject);
@ -2321,7 +2298,7 @@ begin
pnlBackColor.Color := AdjustForm.ColorDialog.Color; pnlBackColor.Color := AdjustForm.ColorDialog.Color;
BackgroundColor := Integer(pnlBackColor.color); BackgroundColor := Integer(pnlBackColor.color);
GrphPnl.Color := BackgroundColor; GrphPnl.Color := BackgroundColor;
DrawGraph; TriangleView.Invalidate;
end; end;
end; end;
@ -2332,7 +2309,7 @@ begin
begin begin
pnlReference.Color := AdjustForm.ColorDialog.Color; pnlReference.Color := AdjustForm.ColorDialog.Color;
ReferenceTriangleColor := Integer(pnlReference.color); ReferenceTriangleColor := Integer(pnlReference.color);
DrawGraph; TriangleView.Invalidate;
end; end;
end; end;
@ -2343,7 +2320,7 @@ begin
begin begin
pnlGridColor1.Color := AdjustForm.ColorDialog.Color; pnlGridColor1.Color := AdjustForm.ColorDialog.Color;
GridColor1 := Integer(pnlGridColor1.color); GridColor1 := Integer(pnlGridColor1.color);
DrawGraph; TriangleView.Invalidate;
end; end;
end; end;
@ -2354,7 +2331,7 @@ begin
begin begin
pnlGridColor2.Color := AdjustForm.ColorDialog.Color; pnlGridColor2.Color := AdjustForm.ColorDialog.Color;
GridColor2 := Integer(pnlGridColor2.color); GridColor2 := Integer(pnlGridColor2.color);
DrawGraph; TriangleView.Invalidate;
end; end;
end; end;
@ -2772,11 +2749,10 @@ begin
end; end;
end; end;
procedure TEditForm.editKeyDown(Sender: TObject; var Key: Word; procedure TEditForm.TriangleViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); Shift: TShiftState);
var var
coeff: double; coeff: double;
label goNext;
begin begin
if Shift = [ssShift] then coeff := 10 if Shift = [ssShift] then coeff := 10
else if Shift = [ssCtrl] then coeff := 0.1 else if Shift = [ssCtrl] then coeff := 0.1
@ -2784,47 +2760,36 @@ begin
// if (PageControl.TabIndex <> 2) or // variations // if (PageControl.TabIndex <> 2) or // variations
// (PageControl.TabIndex <> 3) then // variables // (PageControl.TabIndex <> 3) then // variables
begin
// MainForm.UpdateUndo;
case key of
VK_LEFT:
if Shift = [ssAlt] then btTrgRotateLeftClick(Sender)
else TrgMove(-coeff,0);
VK_RIGHT:
if Shift = [ssAlt] then btTrgRotateRightClick(Sender)
else TrgMove(coeff,0);
VK_UP:
if Shift = [ssAlt] then btTrgScaleUpClick(Sender)
else TrgMove(0,coeff);
VK_DOWN:
if Shift = [ssAlt] then btTrgScaleDownClick(Sender)
else TrgMove(0,-coeff);
VK_PRIOR: btTrgRotateLeftClick(Sender);
VK_NEXT: btTrgRotateRightClick(Sender);
VK_HOME: btTrgScaleUpClick(Sender);
VK_END: btTrgScaleDownClick(Sender);
VK_INSERT: mnuDupClick(Sender);
VK_DELETE: {if Shift = [ssShift] then} mnuDeleteClick(Sender);
else goto goNext;
end;
// HasChanged := True;
key_handled:=true;
exit;
end;
goNext:
case key of case key of
VK_LEFT:
if Shift = [ssAlt] then btTrgRotateLeftClick(Sender)
else TrgMove(-coeff,0);
VK_RIGHT:
if Shift = [ssAlt] then btTrgRotateRightClick(Sender)
else TrgMove(coeff,0);
VK_UP:
if Shift = [ssAlt] then btTrgScaleUpClick(Sender)
else TrgMove(0,coeff);
VK_DOWN:
if Shift = [ssAlt] then btTrgScaleDownClick(Sender)
else TrgMove(0,-coeff);
VK_PRIOR: btTrgRotateLeftClick(Sender);
VK_NEXT: btTrgRotateRightClick(Sender);
VK_HOME: btTrgScaleUpClick(Sender);
VK_END: btTrgScaleDownClick(Sender);
VK_INSERT: mnuDupClick(Sender);
VK_DELETE: {if Shift = [ssShift] then} mnuDeleteClick(Sender);
VK_ADD: VK_ADD:
if SelectedTriangle < Transforms-1 then begin if SelectedTriangle < Transforms-1 then begin
Inc(SelectedTriangle); Inc(SelectedTriangle);
DrawGraph; TriangleView.Invalidate;
ShowSelectedInfo; ShowSelectedInfo;
end; end;
VK_SUBTRACT: VK_SUBTRACT:
if SelectedTriangle > 0 then begin if SelectedTriangle > 0 then begin
Dec(SelectedTriangle); Dec(SelectedTriangle);
DrawGraph; TriangleView.Invalidate;
ShowSelectedInfo; ShowSelectedInfo;
end; end;
VK_SPACE: EditForm.tbSelectClick(Sender); VK_SPACE: EditForm.tbSelectClick(Sender);
@ -2844,11 +2809,9 @@ goNext:
Ord('V'): EditForm.rgPivot.ItemIndex:=3; Ord('V'): EditForm.rgPivot.ItemIndex:=3;
Ord('B'): EditForm.rgPivot.ItemIndex:=4; Ord('B'): EditForm.rgPivot.ItemIndex:=4;
else else
key_handled := false;
exit; exit;
end; end;
key := 0; key := 0;
key_handled := true;
end; end;
procedure TEditForm.editKeyPress(Sender: TObject; var Key: Char); procedure TEditForm.editKeyPress(Sender: TObject; var Key: Char);
@ -2881,14 +2844,14 @@ begin
SetCursorPos(MousePos.x, MousePos.y); SetCursorPos(MousePos.x, MousePos.y);
end; end;
procedure TEditForm.editMouseWheel(Sender: TObject; Shift: TShiftState; procedure TEditForm.TriangleViewMouseWheel(Sender: TObject; Shift: TShiftState;
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin begin
if WheelDelta > 0 then GraphZoom := GraphZoom * 1.25 if WheelDelta > 0 then GraphZoom := GraphZoom * 1.25
else GraphZoom := GraphZoom * 0.8; else GraphZoom := GraphZoom * 0.8;
EditForm.StatusBar.Panels[2].Text := Format('Zoom: %f', [GraphZoom]); EditForm.StatusBar.Panels[2].Text := Format('Zoom: %f', [GraphZoom]);
DrawGraph; TriangleView.Invalidate;
Handled := true; Handled := true;
end; end;
@ -2902,17 +2865,9 @@ end;
procedure TEditForm.rgPivotClicked(Sender: TObject); procedure TEditForm.rgPivotClicked(Sender: TObject);
begin begin
DrawGraph; TriangleView.Invalidate;
end; end;
{
procedure TEditForm.VEVarsSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
DrawGraph;
end;
}
procedure TEditForm.tbEditModeClick(Sender: TObject); procedure TEditForm.tbEditModeClick(Sender: TObject);
begin begin
if Sender = tbRotate then editMode := modeRotate if Sender = tbRotate then editMode := modeRotate
@ -3024,11 +2979,6 @@ begin
} }
end; end;
procedure TEditForm.cbKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
key:=0;
end;
procedure TEditForm.tbFullViewClick(Sender: TObject); procedure TEditForm.tbFullViewClick(Sender: TObject);
begin begin
MainForm.mnuFullScreenClick(Sender); MainForm.mnuFullScreenClick(Sender);

View File

@ -2444,8 +2444,7 @@ end;
procedure TMainForm.mnuAutoZoomClick(Sender: TObject); procedure TMainForm.mnuAutoZoomClick(Sender: TObject);
begin begin
EditForm.AutoZoom; EditForm.AutoZoom; // redraw included
EditForm.DrawGraph;
end; end;
function GradTitle(str: string): string; function GradTitle(str: string): string;