(изменено: Юрий Устинов, 2 августа 2010г. 18:14:06)

Тема: AcDBGripData setAppData, как сохранять строки

Здравствуйте, необходимо при getGripPoints сохранять строковый иденификатор точки и в moveGripPointsAt его извлекать. С intами всё нормально, а вот с pin_ptr<const wchar_t> не всё ладно. То нормально извлекается, то "глючит", может вообще левое что-то достать.
Посоветуйте, как лучше помещать строки в setAppData и извлекать их в moveGripPointsAt?

Re: AcDBGripData setAppData, как сохранять строки

Я делаю примерно так:

class GripAppData
{
private:
    int m_ID; //идентификатор Grip'a
    CString m_str; //сохраняемая строка
public:
    GripAppData(int id,CString str):m_ID(id),m_str(str){}
    virtual ~GripAppData(){};
    int index() const{return m_ID;}
    void setIndex(const int id){m_ID=id;}
    CString GetStr() const { return m_str; }
    void setStr(CString val) { m_str = val; }
};

Acad::ErrorStatus A::subGetGripPoints(AcDbGripDataPtrArray & grips, const double  curViewUnitSize, const int  gripSize, const AcGeVector3d & curViewDir, const int  bitflags) const
{
    assertReadEnabled();
    AcDbGripData *pGripData = new AcDbGripData();
    pGripData->setGripPoint(basePoint()); 
    GripAppData* pAppData = new GripAppData(1,_T("MyString")); //сохраняю стороку
    pGripData->setAppData(pAppData);
    grips.append(pGripData1);
    return Acad::eOk;
}

Acad::ErrorStatus A::SubMoveGripPointsAt(const AcDbVoidPtrArray & gripAppData, const AcGeVector3d & offset, const int  bitflags)
{
    assertWriteEnabled();    
    GripAppData* pAppData = (GripAppData*)gripAppData[0];
    int iIndex = pAppData->index();
    CString str = pAppData->GetStr(); // получаю строку

    return Acad::eOk; 
}

Re: AcDBGripData setAppData, как сохранять строки

Большое спасибо, Андрей. На долго тему забросил, но благодаря вам не потратил бы лишние часы в прочтении книг и проч, проверил, работает :)