如何在图表上获得坐标

时间:2015-03-06 18:51:52

标签: activex teechart

我使用以下方法获得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轴min     3 Y轴最大
    4 Y轴min     5 X轴长度
    6 Y轴长度
    7 X原点
    8 Y原点
    9标签字体大小

请让我知道您的观点。 感谢

1 个答案:

答案 0 :(得分:1)

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

m_Chart.GetEnvironment().InternalRepaint();

编辑

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

  • 我发现您正在使用m_Chartm_reschedChart。确保使用正确的TChart变量。

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

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

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

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

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

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

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

**/*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