(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:
parent
711742df89
commit
09e406a927
@ -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
|
||||||
|
62
2.10/Source/CustomDrawControl.pas
Normal file
62
2.10/Source/CustomDrawControl.pas
Normal 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.
|
@ -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
|
||||||
|
@ -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;
|
||||||
try
|
Width := TriangleView.Width;
|
||||||
Width := TriangleGraph.Width;
|
Height := TriangleView.Height;
|
||||||
Height := TriangleGraph.Height;
|
Bitmap.Width := Width;
|
||||||
// BitMap.Width := Width;
|
Bitmap.Height := Height;
|
||||||
// BitMap.Height := Height;
|
|
||||||
ix := Width / 2;
|
ix := Width / 2;
|
||||||
iy := Height / 2;
|
iy := Height / 2;
|
||||||
sc := 50 * GraphZoom;
|
sc := 50 * GraphZoom;
|
||||||
// with Bitmap.canvas do
|
try
|
||||||
with TriangleGraph.Canvas do
|
with Bitmap.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,8 +2760,6 @@ 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
|
case key of
|
||||||
VK_LEFT:
|
VK_LEFT:
|
||||||
if Shift = [ssAlt] then btTrgRotateLeftClick(Sender)
|
if Shift = [ssAlt] then btTrgRotateLeftClick(Sender)
|
||||||
@ -2805,26 +2779,17 @@ begin
|
|||||||
VK_END: btTrgScaleDownClick(Sender);
|
VK_END: btTrgScaleDownClick(Sender);
|
||||||
VK_INSERT: mnuDupClick(Sender);
|
VK_INSERT: mnuDupClick(Sender);
|
||||||
VK_DELETE: {if Shift = [ssShift] then} mnuDeleteClick(Sender);
|
VK_DELETE: {if Shift = [ssShift] then} mnuDeleteClick(Sender);
|
||||||
else goto goNext;
|
|
||||||
end;
|
|
||||||
// HasChanged := True;
|
|
||||||
key_handled:=true;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
goNext:
|
|
||||||
|
|
||||||
case key of
|
|
||||||
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);
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user