Skip to content

Commit 8ff57cd

Browse files
committed
Removed accidental duplicated code. Fixed part of piecharts
1 parent f6bb6ea commit 8ff57cd

8 files changed

Lines changed: 92 additions & 15 deletions

File tree

src/EPPlus.Export.ImageRenderer.Test/Chart/PieChartTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void GenerateSvgForPieChart()
2323
foreach (ExcelChart c in ws.Drawings)
2424
{
2525
var svg = renderer.RenderDrawingToSvg(c);
26-
SaveTextFileToWorkbook($"svg\\PieChartForSvg{ix++}.svg", svg);
26+
SaveTextFileToWorkbook($"svg\\PieChartForSvg2{ix++}.svg", svg);
2727
}
2828
}
2929
}

src/EPPlus.Export.ImageRenderer.Test/TextRenderTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,8 @@ public void VerifyVerticalAlignCenter()
325325
var svgShape = new SvgShape(shape);
326326
SvgTextBodyItem tbItem = svgShape.TextBodySvg;
327327

328+
//EPPlusImageRenderer.ImageRenderer.RenderDrawingToSvg(shape);
329+
328330
//Appears off by 1-2 px bc of border width
329331
Assert.AreEqual(190d, tbItem.Bounds.GlobalTop.PointToPixel(),1.0);
330332
}

src/EPPlus.Export.ImageRenderer/ImageRenderer.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Date Author Change
2525
using EPPlusImageRenderer.Svg;
2626
using OfficeOpenXml.Drawing;
2727
using OfficeOpenXml.Drawing.Chart;
28+
using OfficeOpenXml.FormulaParsing.Excel.Functions.MathFunctions;
2829
using OfficeOpenXml.Utils;
2930
using OfficeOpenXml.Utils.EnumUtils;
3031
using System;
@@ -61,6 +62,7 @@ public enum RenderItemClasses
6162
Rect,
6263
TextBox,
6364
Shape,
65+
CircleSegment
6466
}
6567

6668
public Dictionary<string, object> GetItemProperties(RenderItemClasses item)
@@ -69,12 +71,74 @@ public Dictionary<string, object> GetItemProperties(RenderItemClasses item)
6971
{
7072
case RenderItemClasses.Rect:
7173
return new Dictionary<string, object> { { "Top", 10d }, { "Left", 10d }, { "Width", 10d }, { "Height", 10d }, {"Opacity", 0.8 }, {"Fill", Color.Goldenrod } };
74+
case RenderItemClasses.CircleSegment:
75+
return new Dictionary<string, object> { { "angle", 25d }, { "radius", 10d }, { "cx", 20d }, { "cy", 20d } };
7276
case RenderItemClasses.TextBox:
7377
default:
7478
throw new NotImplementedException("This class has not been implemented as an option yet");
79+
7580
}
7681
}
7782

83+
private string RenderCircleSegment(DrawingBase baseItem, Dictionary<string, object> itemProperties)
84+
{
85+
return RenderCircleSegment((double)itemProperties["angle"], (double)itemProperties["radius"], (double)itemProperties["cx"], (double)itemProperties["cy"]);
86+
}
87+
88+
string RenderCircleSegment(double angle, double radius, double cx, double cy)
89+
{
90+
var angleRadians = angle * (Math.PI / 180.0d);
91+
92+
var xPoint = cx + (radius * Math.Cos(angleRadians));
93+
var yPoint = cy + (radius * Math.Sin(angleRadians));
94+
95+
Coordinate endPoint = new Coordinate(xPoint, yPoint);
96+
97+
var baseBB = new BoundingBox();
98+
99+
//96x96 px
100+
baseBB.Width = 72;
101+
baseBB.Height = 72;
102+
103+
var baseItem = new DrawingItemForTesting(baseBB);
104+
105+
BoundingBox parent = new BoundingBox();
106+
107+
var slice = new SvgRenderPathItem(baseItem, baseItem.Bounds);
108+
109+
var startPoint = new Coordinate(cx, 0);
110+
111+
var moveCenter = new PathCommands(PathCommandType.Move, slice, cx / baseItem.Bounds.Width, cy / baseItem.Bounds.Height);
112+
var lineToStart = new PathCommands(PathCommandType.Line, slice, startPoint.X / baseItem.Bounds.Width, startPoint.Y / baseItem.Bounds.Height);
113+
114+
115+
116+
var w = baseItem.Bounds.Width.PointToPixel();
117+
var h = baseItem.Bounds.Height.PointToPixel();
118+
119+
var radX = radius.PointToPixel() / w;
120+
var radY = radius.PointToPixel() / h;
121+
122+
var arcCommand = new PathCommands(PathCommandType.Arc, slice, new double[] { radX, radY, 0, 0, 1, endPoint.X / baseItem.Bounds.Width, endPoint.Y / baseItem.Bounds.Height });
123+
124+
slice.Commands.Add(moveCenter);
125+
slice.Commands.Add(lineToStart);
126+
slice.Commands.Add(arcCommand);
127+
128+
slice.FillColor = "red";
129+
slice.BorderColor = "green";
130+
131+
baseItem.RenderItems.Add(slice);
132+
133+
var sb = new StringBuilder();
134+
135+
baseItem.Render(sb);
136+
137+
return sb.ToString();
138+
139+
//return baseItem;
140+
}
141+
78142
/// <summary>
79143
/// For Testing the specific renderItem class
80144
/// </summary>
@@ -325,12 +389,19 @@ private RenderItem GenerateRect(DrawingBase baseItem, Dictionary<string, object>
325389
return rectItem;
326390
}
327391

392+
private string GenerateFromCircle(RenderItemClasses preset, DrawingBase baseItem, Dictionary<string, object> itemProperties)
393+
{
394+
return RenderCircleSegment(baseItem, itemProperties);
395+
}
396+
328397
private RenderItem GenerateFromClasses(RenderItemClasses preset, DrawingBase baseItem, Dictionary<string, object> itemProperties)
329398
{
330399
switch (preset)
331400
{
332401
case RenderItemClasses.Rect:
333402
return GenerateRect(baseItem, itemProperties);
403+
case RenderItemClasses.CircleSegment:
404+
//return RenderCircleSegment(baseItem, itemProperties);
334405
case RenderItemClasses.TextBox:
335406

336407

src/EPPlus.Export.ImageRenderer/RenderItems/Shared/ParagraphItem.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,6 @@ void GenerateTextFragments(ExcelDrawingTextRunCollection runs)
249249
var txtRun = runs[i];
250250
var runFont = txtRun.GetMeasurementFont();
251251

252-
fonts.Add(runFont);
253252
fonts.Add(runFont);
254253
runContents.Add(txtRun.Text);
255254
fontSizes.Add(runFont.Size);

src/EPPlus.Export.ImageRenderer/RenderItems/Shared/TextBodyItem.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,14 @@ internal virtual void ImportTextBody(ExcelTextBody body, ExcelHorizontalAlignmen
152152
VerticalAlignment = body.Anchor;
153153

154154
//We already apply bounds top via the parent Transform
155-
double paragraphStartY = 0;
155+
double currentHeight = 0;
156156
double largestWidth = double.MinValue;
157157

158158
foreach (var paragraph in body.Paragraphs)
159159
{
160-
ImportParagraph(paragraph, paragraphStartY);
160+
ImportParagraph(paragraph, currentHeight);
161161
var addedPara = Paragraphs.Last();
162-
paragraphStartY = addedPara.Bounds.Bottom;
162+
currentHeight = addedPara.Bounds.Bottom;
163163
largestWidth = Math.Max(largestWidth, addedPara.Bounds.Width);
164164
}
165165

@@ -170,7 +170,7 @@ internal virtual void ImportTextBody(ExcelTextBody body, ExcelHorizontalAlignmen
170170

171171
if (Paragraphs != null && Paragraphs.Count() > 0)
172172
{
173-
Bounds.Height = paragraphStartY;
173+
Bounds.Height = currentHeight;
174174
}
175175

176176
Bounds.Top = GetAlignmentVertical();

src/EPPlus.Export.ImageRenderer/Svg/Chart/ChartTypeDrawers/PieChartTypeDrawer.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,18 @@ private void AddSlice(ExcelPieChart chartType, ExcelPieChartSerie serie, List<ob
118118

119119
var lineToEndPoint = new PathCommands(PathCommandType.Line, slice, endCoordOffsetFromCenterOfCircle[position].X / _svgChart.Bounds.Width, endCoordOffsetFromCenterOfCircle[position].Y / _svgChart.Bounds.Height);
120120

121-
//var arcCommand = new PathCommands(PathCommandType.Arc, slice, new double[] { startPoint.X / _svgChart.Bounds.Width, startPoint.Y / _svgChart.Bounds.Height, 0, 0, 1, endCoordOffsetFromCenterOfCircle[position].X / _svgChart.Bounds.Width, endCoordOffsetFromCenterOfCircle[position].Y / _svgChart.Bounds.Height });
121+
var w = _svgChart.Plotarea.Rectangle.Bounds.Width.PointToPixel();
122+
var h = _svgChart.Plotarea.Rectangle.Bounds.Height.PointToPixel();
123+
124+
var radX = radius.PointToPixel() / w;
125+
var radY = radius.PointToPixel() / h;
126+
127+
var arcCommand = new PathCommands(PathCommandType.Arc, slice, new double[] { radX, radY, 0, 0, 1, endCoordOffsetFromCenterOfCircle[position].X / _svgChart.Bounds.Width, endCoordOffsetFromCenterOfCircle[position].Y / _svgChart.Bounds.Height });
122128

123129
slice.Commands.Add(moveCenter);
124130
slice.Commands.Add(lineToStart);
125-
126-
slice.Commands.Add(moveCenter);
127-
slice.Commands.Add(lineToEndPoint);
128131

129-
if(position == 0)
132+
if (position == 0)
130133
{
131134
serie.Fill.Color = Color.Red;
132135
serie.Border.Fill.Color = Color.DarkOrange;
@@ -141,7 +144,10 @@ private void AddSlice(ExcelPieChart chartType, ExcelPieChartSerie serie, List<ob
141144
serie.Fill.Color = Color.Blue;
142145
serie.Border.Fill.Color = Color.DarkBlue;
143146
}
144-
//slice.Commands.Add(arcCommand);
147+
slice.Commands.Add(arcCommand);
148+
149+
//slice.Commands.Add(moveCenter);
150+
//slice.Commands.Add(lineToEndPoint);
145151

146152
slice.SetDrawingPropertiesFill(serie.Fill, chartType.StyleManager.Style.SeriesAxis.FillReference.Color);
147153
slice.SetDrawingPropertiesBorder(serie.Border, chartType.StyleManager.Style.SeriesAxis.BorderReference.Color, true);

src/EPPlus.Export.ImageRenderer/Svg/SvgShape.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public string ViewBox
221221
b = ib;
222222
}
223223
}
224-
return $"{(Bounds.Left).ToString(CultureInfo.InvariantCulture)},{Bounds.Top.ToString(CultureInfo.InvariantCulture)},{Bounds.Right.ToString(CultureInfo.InvariantCulture)},{Bounds.Bottom.ToString(CultureInfo.InvariantCulture)}";
224+
return $"{(Bounds.Left).PointToPixelString()},{Bounds.Top.PointToPixelString()},{Bounds.Right.PointToPixelString()},{Bounds.Bottom.PointToPixelString()}";
225225
}
226226
}
227227

@@ -258,7 +258,7 @@ public void Render(StringBuilder sb)
258258
// gItemTest.RenderEndGroup(sb);
259259
//}
260260

261-
RenderDebugTextBox(sb);
261+
//RenderDebugTextBox(sb);
262262
sb.AppendLine("</svg>");
263263
}
264264

src/EPPlus.Fonts.OpenType/Integration/TextLayoutEngine.RichText.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ private void ProcessFragment(
190190
if (c == ' ')
191191
{
192192
state.SetAndLogWordStartState(lineBuilder.Length - 1);
193-
state.SetAndLogWordStartState(lineBuilder.Length - 1);
194193
}
195194

196195
if (state.CurrentLineWidth > maxWidthPoints)

0 commit comments

Comments
 (0)