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:
sekelsenmat 2011-02-12 20:06:28 +00:00
parent 31a7114c96
commit 8b1aedbcd0
3 changed files with 75 additions and 19 deletions

View File

@ -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);

View File

@ -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');

View File

@ -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;