(изменено: Олег Бевз, 22 ноября 2009г. 06:56:50)

Тема: Текст линии размера

Всем добрый день.Пытаюсь редактировать текст на размерной линии следующим образом:

AcDbRotatedDimension *pDimLine = new AcDbRotatedDimension(fAngle,xLine1Start,xLine2Start,ptCenter,sValue,AcDbObjectId::kNull); 
        //Определение стиля текста
        
        AcDbEntity *pEnt;

        AcDbObjectId id;
        AcDbObjectId EntId;
        id = pDimLine->dimBlockId ();
        AcDbBlockTableRecord *tableRecord;
        acdbOpenAcDbObject ((AcDbObject *&) tableRecord, id, AcDb::kForWrite);
        AcDbBlockTableRecordIterator *iterator;
        tableRecord->newIterator(iterator);

Но по каким то причинам в id записывается нулевое значение. Скажите пожалуйста, что не так?

Re: Текст линии размера

Уже исправил, оказывается нужно было всего лишь записать размерную линию в базу данных чертежа перед тем, как определить её текстовый стиль.

(изменено: Олег Бевз, 27 ноября 2009г. 06:36:59)

Re: Текст линии размера

Добрый день. Столкнулся с проблемой редактирования стиля текста и  линий у размерной линии. Изначально размерная

линия выводится правильно, но при малейшем изменении все отредактированный мною параметры возвращаются в исходное

состояние (стандартный стиль текста и стандартный цвет). Стиль текста при этом сохраняю в базе данных. Редактирую

размерную линию следующим образом:

AcDbRotatedDimension *pDimLine = new AcDbRotatedDimension

(fAngle,xLine1Start,xLine2Start,ptCenter,sValue,AcDbObjectId::kNull); 
        
        
AcDbObjectId DimLineId;
//Сохранение размера в базе данных

AddBlockTable(pDimLine,DimLineId);
pDimLine->close();


AcDbEntity *pEnt;
AcDbObjectId id;
id = pDimLine->dimBlockId ();
AcDbBlockTableRecord *tableRecord;
acdbOpenAcDbObject ((AcDbObject *&) tableRecord, id, AcDb::kForWrite);
AcDbBlockTableRecordIterator *iterator;
tableRecord->newIterator(iterator);
while (!iterator->done()) 
    {
        iterator->getEntity(pEnt, AcDb::kForRead);
        AcDbObjectId EntID;
        iterator->getEntityId(EntID);
            
        if(pEnt->isKindOf(AcDbMText::desc ())) 
        {
            pEnt->upgradeOpen();
            AcDbMText *pText = (AcDbMText *)pEnt;
            AddBlockTable(pText,EntID);
            ...
            //Редактирование стиля текста
            ...
            pText->close();
            }
        if(pEnt->isKindOf(AcDbLine::desc ()))
        {
            
            pEnt->upgradeOpen();
            AcDbLine *pLine = (AcDbLine *)pEnt;
            ...
            //Редактирование линии
            ...
            pLine->close();
        }
        pEnt->close();
        iterator->step();
    }
tableRecord->close();
        
pDimLine->recomputeDimBlock(true);

Re: Текст линии размера

У тебя куча ошибок:
1. Ты сначала закрываешь pDimLine

pDimLine->close();

а потом пытаешься получить из нее информацию

id = pDimLine->dimBlockId ();

2. Так делать нельзя:

         pEnt->upgradeOpen();
         AcDbMText *pText = (AcDbMText *)pEnt;
         AddBlockTable(pText,EntID); 

Если примитив уже находится в базе чертежа, то повторно его туда добавлять нельзя. Можно добавлять копию, которая еще не добавлена.
3. И самое принципиальное по сути вопроса. Сколько бы ты не пытался править содержимое размерного блока, при изменениях размера он будет пересчитан и исправлен AutoCAD'ом. Поэтому править нужно не размерный блок, а сам примитив размера и/или размерный стиль.