Тема: проблема с чтением/изменением атрибутов блока

/// 
 AcDbObjectPointer<AcDbBlockTable> pBT(objBT,AcDb::kForRead);
 pBT.openStatus();
 pBT->getAt(_T("ASDK-BLOCK-WITH-ATTR"),blockId));
 pBT->close();
 AcDbBlockTableRecord *pBlockDef;
 AcDbEntity *e;
 acdbOpenObject(pBlockDef, blockId, AcDb::kForRead);
 AcDbBlockTableRecordIterator *pAttrIter ;
 pBlockDef->newIterator(pAttrIter);
 AcDbAttributeDefinition *pAttdef;
 if (pAttrIter) {
  for (pAttrIter->start();!pAttrIter->done();pAttrIter->step()) {
     pAttrIter->getEntity(e, AcDb::kForRead);
         pAttdef = AcDbAttributeDefinition::cast(e);///1
         
///

в строчке 1 переменная pAttref=0, что я неправильно сделал? Смысл этого получить атрибуты блока и изменить их.

(изменено: Александр Ривилис, 19 апреля 2011г. 15:03:52)

Re: проблема с чтением/изменением атрибутов блока

Вместо:

AcDbAttributeDefinition *pAttdef; 
pAttdef = AcDbAttributeDefinition::cast(e);

должно быть:

AcDbAttribute *pAtt; 
pAtt = AcDbAttribute::cast(e);

Re: проблема с чтением/изменением атрибутов блока

Не помогло к сожалению. При создании блока я использовал AcDbAttributeDefinition

(изменено: Александр Ривилис, 19 апреля 2011г. 15:31:08)

Re: проблема с чтением/изменением атрибутов блока

Стоп! Это я нахалтурил. Конечно же AcDbAttributeDefinition. У тебя же в определении блока не только атрибуты, но и другие примитивы?

(изменено: Кравченко Ростислав, 19 апреля 2011г. 16:28:28)

Re: проблема с чтением/изменением атрибутов блока

Да AcDb3dPolyline. Задача состоит в том чтобы присоединить блок с текстом к MLeader. В свойствах MLeader с блоком я нашел свойство выбора типа блока: пользовательский, квадратный и другие. Но программно не смог найти как их можно установить. И как бы изменить точку присоединения блока. Хотя похоже я ошибся) атрибут виден, но как его изменить?

Re: проблема с чтением/изменением атрибутов блока

Кравченко Ростислав пишет:

Да AcDb3dPolyline.

Ну так наверное она у тебя и оказалась в значении переменной e. Поэтому AcDbAttributeDefinition::cast(e) и возвращает 0. Или у тебя нет атрибутов в блоке, или ты до них еще не добрался.

Re: проблема с чтением/изменением атрибутов блока

pAttdef = AcDbAttributeDefinition::cast(e);
 if (pAttdef != NULL && !pAttdef->isConstant()) {
pAttdef->setTextString("A");
}

если так, то блок не отображается потом

Re: проблема с чтением/изменением атрибутов блока

Надеюсь, что при изменении определения атрибута ты открываешь его "для записи"? К тому же если редактируется определение блока необходима регенерация всего чертежа (или как минимум всех вхождений этого блока).

Re: проблема с чтением/изменением атрибутов блока

AcDbBlockTableRecord *pBlockDef;
AcDbEntity *e;
acdbOpenObject(pBlockDef, blockId, AcDb::kForRead);
AcDbBlockTableRecordIterator *pAttrIter ;
pBlockDef->newIterator(pAttrIter);
AcDbAttributeDefinition *pAttdef;
if (pAttrIter) {
    for (pAttrIter->start();!pAttrIter->done();pAttrIter->step()) {
        pAttrIter->getEntity(e, AcDb::kForWrite);
        if (pAttdef != NULL && !pAttdef->isConstant()) {
                                        
    pAttdef->setTextString(dlg.getCaption());
                                            
     }
    }
}
pBlockDef->close();
ads_regen();

Вот так правильно? Не работает.

Re: проблема с чтением/изменением атрибутов блока

А кто за тебя будет делать

e->close();  

:?:
Да и

delete(pAttrIter); 

тоже совсем не помешает.

(изменено: Кравченко Ростислав, 19 апреля 2011г. 17:31:01)

Re: проблема с чтением/изменением атрибутов блока

Спасибо большое за помощь. Теперь работает. Пожалуйста подскажите еще как изменить точку соединения MLeader и блока, тип блока?

Re: проблема с чтением/изменением атрибутов блока

Мне непонятно что именно тебе нужно. Выложи сколку экрана и готовый чертеж (с одним MLEADER).

(изменено: Кравченко Ростислав, 19 апреля 2011г. 18:05:29)

Re: проблема с чтением/изменением атрибутов блока

Блок присоединяется к MLeader с боку прямоугольника блока. Я хотел бы ему задать любую точку присоединения. Сюда записал файл http://ifolder.ru/23064940
картинка http://fotoifolder.ru/view_foto/midw92pkssog/
Вот хотелось бы линию подвести снизу блока.

Re: проблема с чтением/изменением атрибутов блока

Еще раз повторюсь - сколку экрана и готовый чертеж.

(изменено: Кравченко Ростислав, 20 апреля 2011г. 13:44:25)

Re: проблема с чтением/изменением атрибутов блока

Кто-нибудь может ответить на вопрос? :( Похоже я решил проблему, извините за беспокойства :D