You've already forked lazarus-ccr
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:
@ -663,15 +663,36 @@ begin
|
|||||||
// Now check if we are a horizontal or vertical dimension
|
// Now check if we are a horizontal or vertical dimension
|
||||||
|
|
||||||
// horizontal
|
// horizontal
|
||||||
if DimensionRight.Y = BaseRight.Y then
|
//
|
||||||
|
//DL____ DR
|
||||||
|
// | |
|
||||||
|
// | |
|
||||||
|
// BL BR
|
||||||
|
if DimensionRight.X = BaseRight.X then
|
||||||
begin
|
begin
|
||||||
DimensionLeft.X := BaseLeft.X;
|
DimensionLeft.X := BaseLeft.X;
|
||||||
DimensionLeft.Y := DimensionRight.Y;
|
DimensionLeft.Y := DimensionRight.Y;
|
||||||
end
|
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
|
begin
|
||||||
DimensionLeft.Y := BaseLeft.Y;
|
|
||||||
DimensionLeft.X := DimensionRight.X;
|
DimensionLeft.X := DimensionRight.X;
|
||||||
|
DimensionLeft.Y := BaseLeft.Y;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
AData.AddAlignedDimension(BaseLeft, BaseRight, DimensionLeft, DimensionRight);
|
AData.AddAlignedDimension(BaseLeft, BaseRight, DimensionLeft, DimensionRight);
|
||||||
|
@ -126,7 +126,8 @@ var
|
|||||||
CurEllipse: TvEllipse;
|
CurEllipse: TvEllipse;
|
||||||
CurArc: TvCircularArc;
|
CurArc: TvCircularArc;
|
||||||
FinalStartAngle, FinalEndAngle, tmpAngle: double;
|
FinalStartAngle, FinalEndAngle, tmpAngle: double;
|
||||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom: Word;
|
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom,
|
||||||
|
IntStartAngle, IntAngleLength: Integer;
|
||||||
CurDim: TvAlignedDimension;
|
CurDim: TvAlignedDimension;
|
||||||
begin
|
begin
|
||||||
{$ifdef FPVECTORIALDEBUG}
|
{$ifdef FPVECTORIALDEBUG}
|
||||||
@ -207,15 +208,15 @@ begin
|
|||||||
{$ifdef USE_LCL_CANVAS}
|
{$ifdef USE_LCL_CANVAS}
|
||||||
// ToDo: Consider a X axis inversion
|
// ToDo: Consider a X axis inversion
|
||||||
// If the Y axis is inverted, then we need to mirror our angles as well
|
// If the Y axis is inverted, then we need to mirror our angles as well
|
||||||
if AMulY > 0 then
|
{ if AMulY > 0 then
|
||||||
begin
|
begin}
|
||||||
FinalStartAngle := CurArc.StartAngle;
|
FinalStartAngle := CurArc.StartAngle;
|
||||||
FinalEndAngle := CurArc.EndAngle;
|
FinalEndAngle := CurArc.EndAngle;
|
||||||
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
||||||
BoundsTop := CoordToCanvasY(CurArc.CenterY - 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);
|
BoundsBottom := CoordToCanvasY(CurArc.CenterY + CurArc.Radius);
|
||||||
end
|
{ end
|
||||||
else // AMulY is negative
|
else // AMulY is negative
|
||||||
begin
|
begin
|
||||||
// Inverting the angles generates the correct result for Y axis inversion
|
// Inverting the angles generates the correct result for Y axis inversion
|
||||||
@ -223,31 +224,34 @@ begin
|
|||||||
FinalEndAngle := 360 - 1* CurArc.StartAngle;
|
FinalEndAngle := 360 - 1* CurArc.StartAngle;
|
||||||
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
BoundsLeft := CoordToCanvasX(CurArc.CenterX - CurArc.Radius);
|
||||||
BoundsTop := CoordToCanvasY(CurArc.CenterY + 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);
|
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);
|
// Arc(ALeft, ATop, ARight, ABottom, Angle16Deg, Angle16DegLength: Integer);
|
||||||
ADest.Arc(
|
ADest.Arc(
|
||||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom,
|
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom,
|
||||||
Round(16*FinalStartAngle),
|
IntStartAngle, IntAngleLength
|
||||||
Abs(Round(16*(FinalEndAngle - FinalStartAngle)))
|
|
||||||
);
|
);
|
||||||
// Debug info
|
// Debug info
|
||||||
ADest.TextOut(CoordToCanvasX(CurArc.CenterX), CoordToCanvasY(CurArc.CenterY),
|
{ ADest.TextOut(CoordToCanvasX(CurArc.CenterX), CoordToCanvasY(CurArc.CenterY),
|
||||||
Format('R=%d S=%d L=%d', [Round(CurArc.Radius), Round(16*FinalStartAngle),
|
Format('R=%d S=%d L=%d', [Round(CurArc.Radius*AMulX), Round(FinalStartAngle),
|
||||||
Abs(Round(16*(FinalEndAngle - FinalStartAngle)))]));
|
Abs(Round((FinalEndAngle - FinalStartAngle)))]));
|
||||||
{ ADest.Rectangle(
|
ADest.Pen.Color := TColor($DDDDDD);
|
||||||
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom);}
|
ADest.Rectangle(
|
||||||
|
BoundsLeft, BoundsTop, BoundsRight, BoundsBottom);
|
||||||
|
ADest.Pen.Color := clBlack;}
|
||||||
{$endif}
|
{$endif}
|
||||||
end
|
end
|
||||||
else if CurEntity is TvAlignedDimension then
|
else if CurEntity is TvAlignedDimension then
|
||||||
begin
|
begin
|
||||||
CurDim := CurEntity as TvAlignedDimension;
|
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.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y));
|
||||||
ADest.LineTo(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y));
|
ADest.LineTo(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y));
|
||||||
ADest.LineTo(CoordToCanvasX(CurDim.BaseLeft.X), CoordToCanvasY(CurDim.BaseLeft.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.BaseRight.X), CoordToCanvasY(CurDim.BaseRight.Y), 'BR');
|
||||||
ADest.TextOut(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y), 'DR');
|
ADest.TextOut(CoordToCanvasX(CurDim.DimensionRight.X), CoordToCanvasY(CurDim.DimensionRight.Y), 'DR');
|
||||||
ADest.TextOut(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y), 'DL');
|
ADest.TextOut(CoordToCanvasX(CurDim.DimensionLeft.X), CoordToCanvasY(CurDim.DimensionLeft.Y), 'DL');
|
||||||
|
@ -12,6 +12,9 @@ type
|
|||||||
{ TFPVVDrawer }
|
{ TFPVVDrawer }
|
||||||
|
|
||||||
TFPVVDrawer = class(TCustomControl)
|
TFPVVDrawer = class(TCustomControl)
|
||||||
|
private
|
||||||
|
DragDropStarted: Boolean;
|
||||||
|
DragStartPos: TPoint;
|
||||||
public
|
public
|
||||||
PosX, PosY: Integer;
|
PosX, PosY: Integer;
|
||||||
Drawing: TBitmap;
|
Drawing: TBitmap;
|
||||||
@ -21,6 +24,10 @@ type
|
|||||||
procedure Paint; override;
|
procedure Paint; override;
|
||||||
procedure HandleKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure HandleKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure HandleClick(Sender: TObject);
|
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;
|
procedure Clear;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -35,6 +42,8 @@ begin
|
|||||||
|
|
||||||
OnKeyDown := @HandleKeyDown;
|
OnKeyDown := @HandleKeyDown;
|
||||||
OnClick := @HandleClick;
|
OnClick := @HandleClick;
|
||||||
|
OnMouseDown := @HandleMouseDown;
|
||||||
|
OnMouseUp := @HandleMouseUp;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
destructor TFPVVDrawer.Destroy;
|
destructor TFPVVDrawer.Destroy;
|
||||||
@ -76,6 +85,28 @@ begin
|
|||||||
Self.SetFocus();
|
Self.SetFocus();
|
||||||
end;
|
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;
|
procedure TFPVVDrawer.Clear;
|
||||||
begin
|
begin
|
||||||
PosX := 0;
|
PosX := 0;
|
||||||
|
Reference in New Issue
Block a user