Fixes the rendering on Windows and advances the fpvectorial dimension reading
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1497 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
31a7114c96
commit
8b1aedbcd0
@ -663,15 +663,36 @@ begin
|
||||
// Now check if we are a horizontal or vertical dimension
|
||||
|
||||
// horizontal
|
||||
if DimensionRight.Y = BaseRight.Y then
|
||||
//
|
||||
//DL____ DR
|
||||
// | |
|
||||
// | |
|
||||
// BL BR
|
||||
if DimensionRight.X = BaseRight.X then
|
||||
begin
|
||||
DimensionLeft.X := BaseLeft.X;
|
||||
DimensionLeft.Y := DimensionRight.Y;
|
||||
end
|
||||
else
|
||||
// vertical
|
||||
//
|
||||
// BL ----|DR
|
||||
// BR --|DL
|
||||
//
|
||||
// In this case we invert then DR and DL
|
||||
else if DimensionRight.Y = BaseLeft.Y then
|
||||
begin
|
||||
DimensionLeft := DimensionRight;
|
||||
DimensionRight.Y := BaseRight.Y;
|
||||
end
|
||||
// vertical
|
||||
//
|
||||
// BL ----|DL
|
||||
// BR --|DR
|
||||
//
|
||||
else if DimensionRight.Y = BaseRight.Y then
|
||||
begin
|
||||
DimensionLeft.Y := BaseLeft.Y;
|
||||
DimensionLeft.X := DimensionRight.X;
|
||||
DimensionLeft.Y := BaseLeft.Y;
|
||||
end;
|
||||
|
||||
AData.AddAlignedDimension(BaseLeft, BaseRight, DimensionLeft, DimensionRight);
|
||||
|
@ -126,7 +126,8 @@ var
|
||||
CurEllipse: TvEllipse;
|
||||
CurArc: TvCircularArc;
|
||||
FinalStartAngle, FinalEndAngle, tmpAngle: double;
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom: Word;
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom,
|
||||
IntStartAngle, IntAngleLength: Integer;
|
||||
CurDim: TvAlignedDimension;
|
||||
begin
|
||||
{$ifdef FPVECTORIALDEBUG}
|
||||
@ -207,15 +208,15 @@ begin
|
||||
{$ifdef USE_LCL_CANVAS}
|
||||
// ToDo: Consider a X axis inversion
|
||||
// If the Y axis is inverted, then we need to mirror our angles as well
|
||||
if AMulY > 0 then
|
||||
begin
|
||||
{ if AMulY > 0 then
|
||||
begin}
|
||||
FinalStartAngle := CurArc.StartAngle;
|
||||
FinalEndAngle := CurArc.EndAngle;
|
||||
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
||||
BoundsTop := CoordToCanvasY(CurArc.CenterY - CurArc.Radius);
|
||||
BoundsRight := CoordToCanvasY(CurArc.CenterX + CurArc.Radius);
|
||||
BoundsRight := CoordToCanvasX(CurArc.CenterX + CurArc.Radius);
|
||||
BoundsBottom := CoordToCanvasY(CurArc.CenterY + CurArc.Radius);
|
||||
end
|
||||
{ end
|
||||
else // AMulY is negative
|
||||
begin
|
||||
// Inverting the angles generates the correct result for Y axis inversion
|
||||
@ -223,31 +224,34 @@ begin
|
||||
FinalEndAngle := 360 - 1* CurArc.StartAngle;
|
||||
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
||||
BoundsTop := CoordToCanvasY(CurArc.CenterY + CurArc.Radius);
|
||||
BoundsRight := CoordToCanvasY(CurArc.CenterX + CurArc.Radius);
|
||||
BoundsRight := CoordToCanvasX(CurArc.CenterX + CurArc.Radius);
|
||||
BoundsBottom := CoordToCanvasY(CurArc.CenterY - CurArc.Radius);
|
||||
end;
|
||||
end;}
|
||||
IntStartAngle := Round(16*FinalStartAngle);
|
||||
IntAngleLength := Abs(Round(16*(FinalEndAngle - FinalStartAngle)));
|
||||
// Arc(ALeft, ATop, ARight, ABottom, Angle16Deg, Angle16DegLength: Integer);
|
||||
ADest.Arc(
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom,
|
||||
Round(16*FinalStartAngle),
|
||||
Abs(Round(16*(FinalEndAngle - FinalStartAngle)))
|
||||
IntStartAngle, IntAngleLength
|
||||
);
|
||||
// Debug info
|
||||
ADest.TextOut(CoordToCanvasX(CurArc.CenterX), CoordToCanvasY(CurArc.CenterY),
|
||||
Format('R=%d S=%d L=%d', [Round(CurArc.Radius), Round(16*FinalStartAngle),
|
||||
Abs(Round(16*(FinalEndAngle - FinalStartAngle)))]));
|
||||
{ ADest.Rectangle(
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom);}
|
||||
{ ADest.TextOut(CoordToCanvasX(CurArc.CenterX), CoordToCanvasY(CurArc.CenterY),
|
||||
Format('R=%d S=%d L=%d', [Round(CurArc.Radius*AMulX), Round(FinalStartAngle),
|
||||
Abs(Round((FinalEndAngle - FinalStartAngle)))]));
|
||||
ADest.Pen.Color := TColor($DDDDDD);
|
||||
ADest.Rectangle(
|
||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom);
|
||||
ADest.Pen.Color := clBlack;}
|
||||
{$endif}
|
||||
end
|
||||
else if CurEntity is TvAlignedDimension then
|
||||
begin
|
||||
CurDim := CurEntity as TvAlignedDimension;
|
||||
{ ADest.MoveTo(CoordToCanvasX(CurDim.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y));
|
||||
ADest.MoveTo(CoordToCanvasX(CurDim.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y));
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y));
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y));
|
||||
ADest.LineTo(CoordToCanvasX(CurDim.BaseLeft.X), CoordToCanvasY(CurDim.BaseLeft.Y));
|
||||
// Debug info
|
||||
{ // Debug info
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y), 'BR');
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y), 'DR');
|
||||
ADest.TextOut(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y), 'DL');
|
||||
|
@ -12,6 +12,9 @@ type
|
||||
{ TFPVVDrawer }
|
||||
|
||||
TFPVVDrawer = class(TCustomControl)
|
||||
private
|
||||
DragDropStarted: Boolean;
|
||||
DragStartPos: TPoint;
|
||||
public
|
||||
PosX, PosY: Integer;
|
||||
Drawing: TBitmap;
|
||||
@ -21,6 +24,10 @@ type
|
||||
procedure Paint; override;
|
||||
procedure HandleKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure HandleClick(Sender: TObject);
|
||||
procedure HandleMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure HandleMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
procedure Clear;
|
||||
end;
|
||||
|
||||
@ -35,6 +42,8 @@ begin
|
||||
|
||||
OnKeyDown := @HandleKeyDown;
|
||||
OnClick := @HandleClick;
|
||||
OnMouseDown := @HandleMouseDown;
|
||||
OnMouseUp := @HandleMouseUp;
|
||||
end;
|
||||
|
||||
destructor TFPVVDrawer.Destroy;
|
||||
@ -76,6 +85,28 @@ begin
|
||||
Self.SetFocus();
|
||||
end;
|
||||
|
||||
procedure TFPVVDrawer.HandleMouseDown(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
if not DragDropStarted then
|
||||
begin
|
||||
DragDropStarted := True;
|
||||
DragStartPos := Point(X, Y);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPVVDrawer.HandleMouseUp(Sender: TObject; Button: TMouseButton;
|
||||
Shift: TShiftState; X, Y: Integer);
|
||||
begin
|
||||
if DragDropStarted then
|
||||
begin
|
||||
DragDropStarted := False;
|
||||
PosX := PosX + (X - DragStartPos.X);
|
||||
PosY := PosY + (Y - DragStartPos.Y);
|
||||
Invalidate();
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TFPVVDrawer.Clear;
|
||||
begin
|
||||
PosX := 0;
|
||||
|
Loading…
Reference in New Issue
Block a user