如何在图表上获取坐标



我使用以下方法来获取 x 轴和 y 轴坐标。但是我无法获得 y 轴坐标。

**/*X axis max*/**
double xMaxAxisBottom = m_Chart.GetAxis().GetBottom().GetMaximum();// try to get x axis
double xMaxAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(xMaxAxisBottom); // Here trying to position based on x-axis co-ordinate
**/*X axis min*/**
double xMinAxisBottom = m_reschedChart.GetAxis().GetBottom().GetMinimum();//// try to get x axis minimum
double xMinAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().MinXValue();
**/*Y axis max*/**
double xMaxAxisLeft = m_reschedChart.GetAxis().GetLeft().GetMaximum();
    double xMaxAxisLeftPixelPos = m_reschedChart.GetAxis().GetLeft().MaxXValue();
**/*Y axis min*/**
double xMinAxisLeft = m_Chart.GetAxis().GetLeft().GetMinimum();
double xMinAxisLeftPixelPos = m_Chart.GetAxis().GetLeft().MinXValue();
**/*X axis length*/**
double xAxisBottomLen = m_Chart.GetAxis().GetBottom().GetEndPosition() - m_Chart.GetAxis().GetBottom().GetStartPosition();
double xAxisBottomLenPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(xAxisBottomLen);
**/*Y axis length*/**
double yAxisLeftLen = m_Chart.GetAxis().GetLeft().GetEndPosition() - m_Chart.GetAxis().GetLeft().GetStartPosition();
double xAxisLeftLenPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(yAxisLeftLen);
**/*X origin*/**
double dXstartPos = m_Chart.GetAxis().GetBottom().GetStartPosition();
double dXstartPixelPos = m_reschedChart.GetAxis().GetBottom().CalcXPosValue(dXstartPos);
**/*Y origin*/**
double dYStartPos = m_Chart.GetAxis().GetLeft().GetStartPosition();
double dYStartPixelPos = m_Chart.GetAxis().GetLeft().CalcXPosValue(dYStartPos);

如果我在找到坐标时犯了任何错误,请告诉我。我想在下面找到使用上述代码协调的提及。
最大
1 X 轴 最小
2 X 轴 最大
3 Y 轴 最小
4 Y 轴 5 X 轴长度
6 Y 轴长度
7 X 原产地
8 Y 原产地
9 标签字体大小

请让我知道你的看法。谢谢

需要绘制图表才能使用这些方法。它们需要初始化一些内部属性才能按预期工作。
您可以在调用它们之前强制重新绘制图表:

m_Chart.GetEnvironment().InternalRepaint();

编辑

由于您似乎在 OnAfterDraw 事件中调用这些函数,因此您无需强制重新绘制图表。但是,我建议您对代码进行一些修改。

  • 我看到你正在使用m_Chart,也正在使用m_reschedChart.确保您使用的是正确的 TChart 变量。

  • 您的变量以 xy 开头,但 thay 还包括BottomLeft,具体取决于它们所引用的轴。这是多余的,并增加了写错误的机会(即 x最大轴)。

  • CalcXPosValue必须与水平轴一起使用,CalcYPosValue必须与垂直轴一起使用。所以你不应该打电话给GetLeft().CalcXPosValue.

  • CalcXPosValueCalcYPosValue是将轴值转换为屏幕像素的函数。

  • MinXValueMaxXValue将与水平轴一起使用,而MinYValueMaxYValue将与垂直轴一起使用。

  • GetMinimum返回与 MinXValue/MinYValue 相同的值,GetMaximum返回的返回与 MaxXValue/MaxYValue 相同。所有这些函数都返回轴值,而不是屏幕像素。

  • GetStartPosition 和 EndStartPosition 被认为会修改轴长度,默认情况下,它们使用此处解释的百分比,因此GetStartPosition - EndStartPosition始终为零。我认为CalcXPosValue(GetStartPosition - EndStartPosition)在概念上也是错误的。注意 IStartPosIEndPos 为您提供开始和结束位置(以像素为单位)。请参阅此处的 TeeChart ActiveX 教程。

在下面找到我建议您的修改后的代码:

**/*X axis max*/**
double maxAxisBottom = m_Chart.GetAxis().GetBottom().GetMaximum();// try to get x axis
double maxAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(xMaxAxisBottom); // Here trying to position based on x-axis co-ordinate
**/*X axis min*/**
double minAxisBottom = m_Chart.GetAxis().GetBottom().GetMinimum();//// try to get x axis minimum
double minAxisBottomPixelPos = m_Chart.GetAxis().GetBottom().CalcXPosValue(minAxisBottom);
**/*Y axis max*/**
double maxAxisLeft = m_Chart.GetAxis().GetLeft().GetMaximum();
double maxAxisLeftPixelPos = m_Chart.GetAxis().GetLeft().CalcYPosValue(maxAxisLeft);
**/*Y axis min*/**
double minAxisLeft = m_Chart.GetAxis().GetLeft().GetMinimum();
double minAxisLeftPixelPos = m_Chart.GetAxis().GetLeft().CalcYPosValue(minAxisLeft);

现在您已经知道屏幕像素中四个正方形的位置,因此您可以使用它们绘制一个矩形来检查它:

m_Chart.getCanvas().Rectangle(minAxisBottomPixelPos, minAxisLeftPixelPos, maxAxisBottomPixelPos, maxAxisLeftPixelPos);

如果您还想要或需要以像素为单位的轴大小,您可以执行以下操作:

**/*X axis length*/**
double axisBottomLenPixelPos = m_Chart.GetAxis().GetBottom().GetIEndPos() - m_Chart.GetAxis().GetBottom().GetIStartPos();
**/*Y axis length*/**
double axisLeftLenPixelPos = m_Chart.GetAxis().GetLeft().GetIEndPos() - m_Chart.GetAxis().GetLeft().GetIStartPos();

您可以检查它们是否正确计算:

m_Chart.getCanvas().Rectangle minAxisBottomPixelPos, maxAxisLeftPixelPos, minAxisBottomPixelPos + axisBottomLenPixelPos, maxAxisLeftPixelPos + axisLeftLenPixelPos

相关内容

  • 没有找到相关文章

最新更新