mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-10-15 00:36:12 +02:00
fpvectorial: Fix point generation in arc test.
git-svn-id: trunk@52894 -
This commit is contained in:
parent
c60a2bf1d2
commit
ba13893b95
@ -126,13 +126,21 @@ type
|
||||
|
||||
// Arcs
|
||||
procedure Render_Arc_CW_Q1(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q12(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q2(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q23(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q3(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q34(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q4(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CW_Q41(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q1(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q12(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q2(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q23(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q3(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q34(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q4(APage: TvVectorialPage);
|
||||
procedure Render_Arc_CCW_Q41(APage: TvVectorialPage);
|
||||
|
||||
// Text
|
||||
procedure Render_Text(APage: TvVectorialPage; Anchor: TvTextAnchor; Angle: Double);
|
||||
@ -410,24 +418,40 @@ begin
|
||||
TRenderParams.Create(@Render_SelfIntersectingPoly_GradientFill_NonZeroWinding, 'selfintersecting_poly_gradient_nzw.png'));
|
||||
|
||||
node0 := Tree.Items.AddChild(nil, 'Arcs');
|
||||
node := Tree.Items.AddChild(node0, 'clockwise');
|
||||
node := Tree.Items.AddChild(node0, 'clockwise "1" --> "2"');
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant I',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q1, 'arc_cw_q1.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant I+II',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q12, 'arc_cw_q12.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant II',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q2, 'arc_cw_q2.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant II+III',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q23, 'arc_cw_q23.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant III',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q3, 'arc_cw_q3.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant III+IV',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q34, 'arc_cw_q34.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant IV',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q4, 'arc_cw_q4.png'));
|
||||
node := Tree.Items.AddChild(node0, 'counterclockwise');
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant IV+I',
|
||||
TRenderParams.Create(@Render_Arc_CW_Q41, 'arc_cw_q41.png'));
|
||||
node := Tree.Items.AddChild(node0, 'counterclockwise "1" --> "2"');
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant I',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q1, 'arc_cdw_q1.png'));
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q1, 'arc_ccw_q1.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant I+II',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q12, 'arc_ccw_q12.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant II',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q2, 'arc_cdw_q2.png'));
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q2, 'arc_ccw_q2.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant II+III',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q23, 'arc_ccw_q23.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant III',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q3, 'arc_dcw_q3.png'));
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q3, 'arc_ccw_q3.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant III+IV',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q34, 'arc_ccw_q34.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant IV',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q4, 'arc_cdw_q4.png'));
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q4, 'arc_ccw_q4.png'));
|
||||
Tree.Items.AddChildObject(node, 'Quarter circle in quadrant IV+I',
|
||||
TRenderParams.Create(@Render_Arc_CCW_Q41, 'arc_ccw_q41.png'));
|
||||
|
||||
node0 := Tree.Items.AddChild(nil, 'Gradients');
|
||||
node := Tree.Items.AddChild(node0, 'horizontal');
|
||||
@ -735,41 +759,81 @@ begin
|
||||
CreateStdArcQ1(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q12(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ12(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q2(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ2(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q23(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ23(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q3(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ3(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q34(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ34(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q4(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ4(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CW_Q41(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ41(APage, true);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q1(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ1(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q12(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ12(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q2(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ2(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q23(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ23(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q3(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ3(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q34(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ34(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q4(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ4(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Arc_CCW_Q41(APage: TvVectorialPage);
|
||||
begin
|
||||
CreateStdArcQ41(APage, false);
|
||||
end;
|
||||
|
||||
procedure TMainForm.Render_Polygon_Solid(APage: TvVectorialPage);
|
||||
var
|
||||
poly: TvPolygon;
|
||||
|
@ -30,9 +30,13 @@ function CreateStdPolygon(APage: TvVectorialPage): TvPolygon;
|
||||
function CreateStdSelfIntersectingPolygon(APage: TvVectorialPage): TvPolygon;
|
||||
function CreatePathWithHole(APage: TvVectorialPage): TPath;
|
||||
function CreateStdArcQ1(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ12(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ2(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ23(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ3(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ34(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ4(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
function CreateStdArcQ41(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
|
||||
function StdSolidBrush: TvBrush;
|
||||
function StdHorizGradientBrush: TvBrush;
|
||||
@ -133,6 +137,7 @@ function CreateArc(APage: TvVectorialPage; X1,Y1, X2,Y2, CX,CY, RX, RY: Double;
|
||||
Clockwise: Boolean): TPath;
|
||||
var
|
||||
path: TPath;
|
||||
txt: TvText;
|
||||
begin
|
||||
if APage.UseTopLeftCoordinates then begin
|
||||
Y1 := PAGE_SIZE - Y1;
|
||||
@ -144,6 +149,18 @@ begin
|
||||
APage.AddEllipticalArcWithCenterToPath(RX, RY, 0, X2, Y2, CX, CY, Clockwise);
|
||||
path := APage.EndPath;
|
||||
path.Pen := StdPen;
|
||||
|
||||
txt := TvText.Create(APage);
|
||||
txt.Value.Add('1');
|
||||
txt.X := X1;
|
||||
txt.Y := Y1;
|
||||
APage.AddEntity(txt);
|
||||
|
||||
txt := TvText.Create(APage);
|
||||
txt.Value.Add('2');
|
||||
txt.X := X2;
|
||||
txt.Y := Y2;
|
||||
APage.AddEntity(txt);
|
||||
end;
|
||||
|
||||
|
||||
@ -330,14 +347,30 @@ end;
|
||||
{ Quarter circle in quadrant I }
|
||||
function CreateStdArcQ1(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
X1 = 50;
|
||||
Y1 = 95;
|
||||
X2 = 90;
|
||||
Y2 = 55;
|
||||
CX = 50;
|
||||
CY = 55;
|
||||
RX = 40;
|
||||
RY = 40;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX + RX;
|
||||
Y1 = CY;
|
||||
X2 = CX;
|
||||
Y2 = CY + RY;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
|
||||
{ Quarter circle reaching from quadrant I into quadrant II}
|
||||
function CreateStdArcQ12(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
SQRT2 = 1.4142135623731;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX + RX/SQRT2;
|
||||
Y1 = CY + RY/SQRT2;
|
||||
X2 = CX - RX/SQRT2;
|
||||
Y2 = CY + RY/SQRT2;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
@ -345,14 +378,30 @@ end;
|
||||
{ Quarter circle in quadrant II }
|
||||
function CreateStdArcQ2(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
X1 = 50;
|
||||
Y1 = 95;
|
||||
X2 = 10;
|
||||
Y2 = 55;
|
||||
CX = 50;
|
||||
CY = 55;
|
||||
RX = 40;
|
||||
RY = 40;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX;
|
||||
Y1 = CY + RY;
|
||||
X2 = CX - RX;
|
||||
Y2 = CY;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
|
||||
{ Quarter circle reaching from quadrant II into quadrant III}
|
||||
function CreateStdArcQ23(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
SQRT2 = 1.4142135623731;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX - RX/SQRT2;
|
||||
Y1 = CY + RY/SQRT2;
|
||||
X2 = CX - RX/SQRT2;
|
||||
Y2 = CY - RY/SQRT2;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
@ -360,14 +409,30 @@ end;
|
||||
{ Quarter circle in quadrant III }
|
||||
function CreateStdArcQ3(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
X1 = 10;
|
||||
Y1 = 55;
|
||||
X2 = 50;
|
||||
Y2 = 15;
|
||||
CX = 50;
|
||||
CY = 55;
|
||||
RX = 40;
|
||||
RY = 40;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX - RX;
|
||||
Y1 = CY;
|
||||
X2 = CX;
|
||||
Y2 = CY - RY;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
|
||||
{ Quarter circle reaching from quadrant III into quadrant IV}
|
||||
function CreateStdArcQ34(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
SQRT2 = 1.4142135623731;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX - RX/SQRT2;
|
||||
Y1 = CY - RY/SQRT2;
|
||||
X2 = CX + RX/SQRT2;
|
||||
Y2 = CY - RY/SQRT2;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
@ -375,18 +440,35 @@ end;
|
||||
{ Quarter circle in quadrant IV }
|
||||
function CreateStdArcQ4(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
X1 = 90;
|
||||
Y1 = 55;
|
||||
X2 = 50;
|
||||
Y2 = 15;
|
||||
CX = 50;
|
||||
CY = 55;
|
||||
RX = 40;
|
||||
RY = 40;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX;
|
||||
Y1 = CY - RY;
|
||||
X2 = CX + RX;
|
||||
Y2 = CY;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
|
||||
{ Quarter circle reaching from quadrant IV into quadrant I}
|
||||
function CreateStdArcQ41(APage: TvVectorialPage; Clockwise: Boolean): TPath;
|
||||
const
|
||||
SQRT2 = 1.4142135623731;
|
||||
CX = 50.0;
|
||||
CY = 55.0;
|
||||
RX = 30.0;
|
||||
RY = 30.0;
|
||||
X1 = CX + RX/SQRT2;
|
||||
Y1 = CY - RY/SQRT2;
|
||||
X2 = CX + RX/SQRT2;
|
||||
Y2 = CY + RY/SQRT2;
|
||||
begin
|
||||
Result := CreateArc(APage, X1, Y1, X2, Y2, CX, CY, RX, RY, Clockwise);
|
||||
end;
|
||||
|
||||
|
||||
function StdSolidBrush: TvBrush;
|
||||
begin
|
||||
Result := CreateSimpleBrush(bsSolid, colRed);
|
||||
|
Loading…
Reference in New Issue
Block a user