fpvectorial: Fix point generation in arc test.

git-svn-id: trunk@52894 -
This commit is contained in:
wp 2016-08-30 17:50:15 +00:00
parent c60a2bf1d2
commit ba13893b95
2 changed files with 184 additions and 38 deletions

View File

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

View File

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