//******************************************************************************* CBCGPGeometry* CBCGPChartInterLineColoringEffect::CreateGeometry(const CBCGPPointsArray& arOrgPoints, const CBCGPRect& rectBounds, BCGPChartFormatSeries::ChartCurveType curveType, BOOL bClip) { CBCGPChartAxis* pXAxis = m_pSeries1->GetRelatedAxis(CBCGPChartSeries::AI_X); ASSERT_VALID(pXAxis); BOOL bIsVertical = pXAxis->IsVertical(); CBCGPGeometry* pGeometry = NULL; CBCGPPointsArray arPoints; arPoints.Append(arOrgPoints); CBCGPPoint ptStart = arPoints[0]; CBCGPPoint ptEnd = arPoints[arPoints.GetSize() - 1]; CBCGPPoint ptClipCorrectionStart = ptStart; CBCGPPoint ptClipCorrectionEnd = ptEnd; if (bIsVertical) { if (bClip) { if (pXAxis->m_bReverseOrder) { ptClipCorrectionStart.y -= 1.; ptClipCorrectionEnd.y += 1.; } else { ptClipCorrectionStart.y += 1.; ptClipCorrectionEnd.y -= 1.; } ptStart = CBCGPPoint(rectBounds.left, ptClipCorrectionStart.y); ptEnd = CBCGPPoint(rectBounds.left, ptClipCorrectionEnd.y); } else { ptStart = CBCGPPoint(rectBounds.left, ptStart.y); ptEnd = CBCGPPoint(rectBounds.left, ptEnd.y); } } else { if (bClip) { if (pXAxis->m_bReverseOrder) { ptClipCorrectionStart.x += 1.; ptClipCorrectionEnd.x -= 1.; } else { ptClipCorrectionStart.x -= 1.; ptClipCorrectionEnd.x += 1.; } ptStart = CBCGPPoint(ptClipCorrectionStart.x, rectBounds.bottom); ptEnd = CBCGPPoint(ptClipCorrectionEnd.x, rectBounds.bottom); } else { ptStart = CBCGPPoint(ptStart.x, rectBounds.bottom); ptEnd = CBCGPPoint(ptEnd.x, rectBounds.bottom); } } if (curveType == BCGPChartFormatSeries::CCT_SPLINE || curveType == BCGPChartFormatSeries::CCT_SPLINE_HERMITE) { CBCGPSplineGeometry::BCGP_SPLINE_TYPE splineType = CBCGPSplineGeometry::BCGP_SPLINE_TYPE_KB; if (curveType == BCGPChartFormatSeries::CCT_SPLINE_HERMITE) { splineType = CBCGPSplineGeometry::BCGP_SPLINE_TYPE_HERMITE; } CBCGPComplexGeometry* pComplex = new CBCGPComplexGeometry() ; CBCGPSplineGeometry geometryTop(arOrgPoints, splineType, FALSE); pComplex->AddPoints(geometryTop.GetPoints(), CBCGPPolygonGeometry::BCGP_CURVE_TYPE_BEZIER); if (bClip) { pComplex->AddLine(ptClipCorrectionEnd); } pComplex->AddLine(ptEnd); pComplex->AddLine(ptStart); if (bClip) { pComplex->AddLine(ptClipCorrectionStart); } pComplex->SetClosed(TRUE); pGeometry = pComplex; } else { if (bClip) { arPoints.Add(ptClipCorrectionEnd); } arPoints.Add(ptEnd); arPoints.Add(ptStart); if (bClip) { arPoints.Add(ptClipCorrectionStart); } pGeometry = new CBCGPPolygonGeometry(arPoints); } return pGeometry; }