Lines 2534-2539
Link Here
|
2534 |
|
2534 |
|
2535 |
SCCOL nLastCol = -1; |
2535 |
SCCOL nLastCol = -1; |
2536 |
SCROW nLastRow = -1; |
2536 |
SCROW nLastRow = -1; |
|
|
2537 |
|
2538 |
SCTAB nTabNum = aRange.aEnd.Tab() >= aRange.aStart.Tab() ? |
2539 |
aRange.aEnd.Tab() - aRange.aStart.Tab() + 1 : aRange.aStart.Tab() > aRange.aEnd.Tab() + 1; |
2540 |
SCCOL nColNum = aRange.aEnd.Col() >= aRange.aStart.Col() ? |
2541 |
aRange.aEnd.Col() - aRange.aStart.Col() + 1 : aRange.aStart.Col() > aRange.aEnd.Col() + 1; |
2542 |
SCROW nRowNum = aRange.aEnd.Row() >= aRange.aStart.Row() ? |
2543 |
aRange.aEnd.Row() - aRange.aStart.Row() + 1 : aRange.aStart.Row() > aRange.aEnd.Row() + 1; |
2544 |
sal_uInt32 nCellNum = nRowNum * nColNum * nTabNum; |
2545 |
sal_uInt32 nStep = nCellNum >= 20000 ? 5 : 1; |
2546 |
sal_uInt32 nCount = 0; |
2547 |
|
2537 |
for (SCTAB nTab = aRange.aStart.Tab(); nTab <= aRange.aEnd.Tab(); ++nTab) |
2548 |
for (SCTAB nTab = aRange.aStart.Tab(); nTab <= aRange.aEnd.Tab(); ++nTab) |
2538 |
{ |
2549 |
{ |
2539 |
for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol) |
2550 |
for (SCCOL nCol = aRange.aStart.Col(); nCol <= aRange.aEnd.Col(); ++nCol) |
Lines 2553-2559
Link Here
|
2553 |
continue; |
2564 |
continue; |
2554 |
} |
2565 |
} |
2555 |
|
2566 |
|
|
|
2567 |
if (nCount == nStep) |
2568 |
nCount = 0; |
2569 |
else if (nCount != 0) |
2570 |
{ |
2571 |
nCount++; |
2572 |
continue; |
2573 |
} |
2574 |
|
2556 |
m_aDataArray.push_back(Item()); |
2575 |
m_aDataArray.push_back(Item()); |
|
|
2576 |
nCount++; |
2557 |
Item& rItem = m_aDataArray.back(); |
2577 |
Item& rItem = m_aDataArray.back(); |
2558 |
++nDataCount; |
2578 |
++nDataCount; |
2559 |
|
2579 |
|
Lines 2563-2568
Link Here
|
2563 |
continue; |
2583 |
continue; |
2564 |
|
2584 |
|
2565 |
if (pCell->HasStringData()) |
2585 |
if (pCell->HasStringData()) |
|
|
2586 |
|
2566 |
rItem.maString = pCell->GetStringData(); |
2587 |
rItem.maString = pCell->GetStringData(); |
2567 |
else |
2588 |
else |
2568 |
{ |
2589 |
{ |
Lines 3018-3068
Link Here
|
3018 |
::rtl::math::setNan(&fNAN); |
3039 |
::rtl::math::setNan(&fNAN); |
3019 |
|
3040 |
|
3020 |
sal_Int32 nCount = m_aDataArray.size(); |
3041 |
sal_Int32 nCount = m_aDataArray.size(); |
3021 |
// i121058: if there's too many points need to be painted, it doens't need to get all points for performance consideration |
3042 |
uno::Sequence<double> aSeq(nCount); |
3022 |
// and so many points are not useful for users to understand the chart. So only picked some points to paint |
3043 |
double* pArr = aSeq.getArray(); |
3023 |
sal_Int32 nStep = nCount >= 10000 ? 50 : 1; |
3044 |
::std::list<Item>::const_iterator itr = m_aDataArray.begin(), itrEnd = m_aDataArray.end(); |
3024 |
nCount = nCount >= 10000 ? ((nCount - nCount % nStep) / nStep) : nCount; |
3045 |
for (; itr != itrEnd; ++itr, ++pArr) |
3025 |
sal_Int32 nRealCount = nStep == 1 ? nCount : nCount * 2; |
3046 |
*pArr = itr->mbIsValue ? itr->mfValue : fNAN; |
3026 |
uno::Sequence<double> aSeq(nRealCount); |
3047 |
|
3027 |
double* pArr = aSeq.getArray(); |
|
|
3028 |
::std::list<Item>::const_iterator itr = m_aDataArray.begin(), itrEnd = m_aDataArray.end(); |
3029 |
for (sal_Int32 i = 0; i < nCount; i++) |
3030 |
{ |
3031 |
if (nStep == 1) |
3032 |
{ |
3033 |
*pArr++ = itr->mbIsValue ? itr->mfValue : fNAN; |
3034 |
itr++; |
3035 |
} |
3036 |
else |
3037 |
{ |
3038 |
sal_Int32 nMax = 0, nMin = 0, nMaxStep = 0, nMinStep = 0; |
3039 |
for (sal_Int32 j = 0; j < nStep; j++) |
3040 |
{ |
3041 |
sal_Int32 nValue = itr->mbIsValue ? itr->mfValue : fNAN; |
3042 |
if (nValue > nMax) |
3043 |
{ |
3044 |
nMax = nValue; |
3045 |
nMaxStep = j; |
3046 |
} |
3047 |
if (nValue < nMin) |
3048 |
{ |
3049 |
nMin = nValue; |
3050 |
nMinStep = j; |
3051 |
} |
3052 |
itr++; |
3053 |
} |
3054 |
if (nMaxStep > nMinStep) |
3055 |
{ |
3056 |
*pArr++ = nMin; |
3057 |
*pArr++ = nMax; |
3058 |
} |
3059 |
else |
3060 |
{ |
3061 |
*pArr++ = nMax; |
3062 |
*pArr++ = nMin; |
3063 |
} |
3064 |
} |
3065 |
} |
3066 |
return aSeq; |
3048 |
return aSeq; |
3067 |
} |
3049 |
} |
3068 |
|
3050 |
|