CVec2PropertyDescription::CVec2PropertyDescription(CSerializer* pSerializer)
    : super(NULL)
{
    SetType(eRPT_Vec2F);
    SetMaxCount(VEC_COUNT);
    SetFixed(true);
    CPropertyDescriptionBase* pFloatProperty = CComponentProxyManager::GetInstance()->CreateProperty(eRPT_Float, NULL);
    SetTemplateProperty(pFloatProperty);
    TString InitValue = _T("0,0");
    if (pSerializer != NULL)
    {
        InitValue.clear();
        for (size_t i = 0; i < VEC_COUNT; ++i)
        {
            float fValue = 0;
            (*pSerializer) >> fValue;
            InitValue.append(wxString::Format(_T("%f"),fValue));
            if (i != VEC_COUNT - 1)
            {
                InitValue.append(_T(","));
            }
            CPropertyDescriptionBase* pChild = AddChild(NULL);
            pChild->InitializeValue(fValue);
        }
        ResetChildName();
    }
CVec4PropertyDescription::CVec4PropertyDescription(CSerializer* pSerializer)
    : super(NULL)
{
    SetType(eRPT_Vec4F);
    SetMaxCount(VEC_COUNT);
    CFloatPropertyDescription* pFloatProperty = down_cast<CFloatPropertyDescription*>(CComponentProxyManager::GetInstance()->CreateProperty(eRPT_Float, NULL));
    pFloatProperty->SetSpinStep(0.1f);
    SetTemplateProperty(pFloatProperty);
    TString InitValue = _T("0,0,0,0");
    if (pSerializer != NULL)
    {
        InitValue.clear();
        for (uint32_t i = 0; i < VEC_COUNT; ++i)
        {
            float fValue = 0;
            (*pSerializer) >> fValue;
            InitValue.append(wxString::Format(_T("%f"),fValue));
            if (i != VEC_COUNT - 1)
            {
                InitValue.append(_T(","));
            }
            CPropertyDescriptionBase* pChild = InsertChild(NULL);
            pChild->InitializeValue(fValue);
        }
        ResetChildName();
    }