我使用以下方法获得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标签字体大小
请让我知道您的观点。 感谢
答案 0 :(得分:1)
需要绘制图表以使用这些方法。他们需要初始化一些内部属性才能按预期工作 您可以使用以下命令强制重新绘制图表:
m_Chart.GetEnvironment().InternalRepaint();
编辑:
由于您似乎在OnAfterDraw事件中调用这些函数,因此您不需要强制重新绘制图表。但是,我建议您对代码进行一些修改。
我发现您正在使用m_Chart
和m_reschedChart
。确保使用正确的TChart变量。
您的变量以x
和y
开头,但也包括Bottom
或Left
,具体取决于它们所引用的轴。这是多余的,并增加了写错的机会(即 x MaxAxis 左)。
CalcXPosValue
必须与水平轴一起使用,CalcYPosValue
必须与垂直轴一起使用。所以你不应该打电话给GetLeft().CalcXPosValue
。
CalcXPosValue
和CalcYPosValue
是将轴值转换为屏幕像素的函数。
MinXValue
和MaxXValue
将与水平轴一起使用,而MinYValue
和MaxYValue
将与垂直轴一起使用。
GetMinimum
返回的内容与MinXValue
/ MinYValue
相同,GetMaximum
返回的内容与MaxXValue
/ MaxYValue
相同。所有这些函数都返回Axis值,而不是屏幕像素。
GetStartPosition和EndStartPosition被认为会修改Axis长度,默认情况下它们使用here解释的百分比,因此GetStartPosition - EndStartPosition
始终为零。我认为CalcXPosValue(GetStartPosition - EndStartPosition)
在概念上也是错误的。注意IStartPos
和IEndPos
会以像素为单位显示开始和结束位置。请参阅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