void UINumberPicker::setDataprovider(int visibleItemnum, int minValue, int maxValue,int showValue)
{
    if (visibleItemnum%2 == 0)
    {
        visibleItemnum -= 1;
        //        MessageBox("", const char *title)
    }
    m_minValue = minValue;
    m_maxValue = maxValue;
    show_value = showValue;
    
    virtualItemCount = visibleItemnum;
    switch (_pickerDirection)
    {
        case PickerDirection::HORIZONTAL:
        {
            setContentSize(Size(item_width * virtualItemCount, item_height));
            break;
        }
        case PickerDirection::VERTICAL:
        {
            setContentSize(Size(item_width,item_height * virtualItemCount));
            break;
        }
        default:
            break;
    }
    invalidateDisplayList();
}
void UINumberPicker::setDirection(PickerDirection eDirection)
{
    if (_pickerDirection == eDirection)
    {
        return;
    }
    _pickerDirection = eDirection;
    
    //延迟刷新UI
    invalidateDisplayList();
}
//===========================================================================
void cShapeSphere::scaleObject(const double& a_scaleFactor)
{
    // update radius
    m_radius *= a_scaleFactor;

    // update bounding box
    updateBoundaryBox();

    // invalidate display list
    invalidateDisplayList();
}
//===========================================================================
void cShapeSphere::setRadius(const double& a_radius) 
{ 
    // set new radius
    m_radius = cAbs(a_radius);

    // update bounding box
    updateBoundaryBox();

    // invalidate display list
    invalidateDisplayList();
}
//===========================================================================
void cShapeBox::scaleObject(const double& a_scaleFactor)
{
    // update dimensions
    m_hSizeX *= a_scaleFactor;
    m_hSizeY *= a_scaleFactor;
    m_hSizeZ *= a_scaleFactor;

    // update bounding box
    updateBoundaryBox();

    // invalidate display list
    invalidateDisplayList();
}
//===========================================================================
void cShapeBox::setSize(const double& a_sizeX, const double& a_sizeY, const double& a_sizeZ)
{
    // set dimensions
    m_hSizeX = 0.5 * cAbs(a_sizeX);
    m_hSizeY = 0.5 * cAbs(a_sizeY);
    m_hSizeZ = 0.5 * cAbs(a_sizeZ);

    // update bounding box
    updateBoundaryBox();

    // invalidate display list
    invalidateDisplayList(false);
}
void UINumberPicker::setItemSize(float width, float height)
{
    item_height = height;
    item_width = width;
    switch (_pickerDirection)
    {
        case PickerDirection::HORIZONTAL:
        {
            setContentSize(Size(item_width * virtualItemCount, item_height));
            break;
        }
        case PickerDirection::VERTICAL:
        {
            setContentSize(Size(item_width,item_height * virtualItemCount));
            break;
        }
        default:
            break;
    }
    invalidateDisplayList();
}
void UINumberPicker::refreshValue(int value)
{
    if (value > m_maxValue || value < m_minValue)
    {
        value = m_minValue;
    }
    bool hasfind = false;
    for (size_t i = 0; i < sortChildrenArray.size(); i++)
    {
        PickerCell * cell = sortChildrenArray[i];
        if (cell->getCellValue() == value)
        {
            setSelectedItem(cell);
            hasfind = true;
            break;
        }
    }
    
    if (!hasfind)
    {
        show_value = value;
        invalidateDisplayList();
    }
}