Я пытаюсь настроить объект по отношению к точке данных на графике на слайде точки питания.
В настоящее время у меня есть
IEnumerable<P.GraphicFrame> graphicFrames = slidePart.Slide.CommonSlideData.ShapeTree.Elements<P.GraphicFrame>();
P.GraphicFrame chartFrame = null;
foreach (P.GraphicFrame graphicFrame in graphicFrames)
{
try
{
D.GraphicData graphicData = graphicFrame.Elements<D.Graphic>().FirstOrDefault().GraphicData;
D.Charts.ChartReference chartReference = graphicFrame.Elements<D.Graphic>().FirstOrDefault()
.GraphicData.Elements<D.Charts.ChartReference>().FirstOrDefault();
if (chartReference == null) continue;
string Id = chartReference.Id;
if (Id == RelationshipId)
{
chartFrame = graphicFrame;
break;
}
}
catch { }
}
if (chartFrame == null){
throw new Exception("Couldn't Find Chart Frame");
}
D.Offset chartOffset = chartFrame.Transform.Offset;
D.Extents chartExtent = chartFrame.Transform.Extents;
// Chart itself
ChartPart chartPart = slidePart.GetChartPartById(RelationshipId);
D.Charts.ManualLayout layout = chartPart.ChartSpace.Elements<D.Charts.Chart>()
.FirstOrDefault()
.PlotArea
.Layout
.ManualLayout;
double maxVal = (double) chartPart.ChartSpace.Elements<D.Charts.Chart>().FirstOrDefault().PlotArea.Descendants<DocumentFormat.OpenXml.Drawing.Charts.MaxAxisValue>().FirstOrDefault().Val;
double plotAreaTop = layout.Top.Val;
double plotAreaHeight = layout.Height.Val;
long newCanadaLabelY = (long)(chartOffset.Y.Value +
chartExtent.Cy.Value * (plotAreaHeight + plotAreaTop )
);
canadaLabel.MoveShape(canadaLabelOffset.X.Value, newCanadaLabelY);
Моя проблема chartOffset.Y.Value + chartExtent.Cy.Value *(plotAreaHeight + plotAreaTop )
равна оси графика и категории. Мое уравнение для определения относительной высоты моей максимальной точки данных chartExtent.Cy.Value * ((plotAreaHeight + plotAreaTop) * ((maxVal - currentNationalRate) / maxVal))
только смотрит на границы оси значений, чтобы определить, где должна располагаться метка. К сожалению, высота, которую я использую - это значение оси высоты + высота оси категории (область построения). Как рассчитать только высоту оси значений?