Тема: Как изменить XData?
Здравствуйте.
Пытаюсь изменить XData в 2М полилинии и к сожалению автокад зависает помогите пожалуйста найти причину. Самое главное я хотел бы знать как изменить XData.
Заранее спасибо исходный код выложен ниже.
void ChangeLength(void)
{
ads_name ss, en;
AcDbObjectId pObj = NULL;
Acad::ErrorStatus ers;
//Создаем набор выбора объектов
int es = acedSSGet(NULL,NULL,NULL,NULL,ss);
if ( es == RTNORM)
{
//Вычисляем длину набора
long len = 0;
es = acedSSLength(ss, &len);
// acutPrintf(_T("Длина массива равняется %i"),len);
if ( es != RTNORM)
{
acutPrintf(_T("Не удалось получить длину списка примитивов!"));
return;
}
//Обрабатываем список выбора
for ( long i=0; i < len; i++)
{
es = acedSSName(ss, i, en);
if ( es != RTNORM)
{
acutPrintf(_T("Не удалось получить имя примитива!"));
return;
}
ers =acdbGetObjectId(pObj,en);
if ( ers != Acad::eOk)
{
acutPrintf(_T("Не удалось открыть примитив!"));
return;
}
acutPrintf(_T("Считываем свойства объекта"));
AcDbObjectPointer<AcDb2dPolyline> pLine(pObj, AcDb::kForWrite);
resbuf *rb = NULL;
rb = pLine->xData(_T("DEVICE_DATAS"));
while ( rb->rbnext != NULL)
{
if (rb->restype == RTSTR)
{
if (rb->resval.rstring == _T("REAL_LENGTH"))
{
rb->rbnext;
rb->resval.rreal = 625.0;
}
}
}
ers = pLine->setXData(rb);
if (ers != Acad::eOk)
{
acutPrintf(_T("Не удалось обновить длину кабеля"));
return;
}
acutRelRb(rb);
}
}
acedSSFree(ss);
}