Тема: Использование AcDbMText в объекте, наследуемом от AcDbEntity

Здравствуйте.
Помогите пожалуйста разобраться.
Я наследую класс от AcDbEntity, который при своём отображении должен выводить текст. Я слышал, что можно не прибегая к mode->geometry().text использовать AcDbMText.
1)Если объект данного класса создавать в моём классе, то как же его(MText) выводить на экран - ведь для этого необходимо MText вставить в ту же базу данных, в которой находится мой объект?
Может быть следует наследовать не от AcDbEntity, а от AcDbMText?
2)Как сохранять/загружать MText в функциях dxfInFields,dxfOutFields,dwgOutFields и dwgInFields? Нужно ли до его загрузки уничтожать уже имеющийся объект данного класса.
Буду рад любым предложениям. Заранее спасибо.

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

в viewportDraw во входных параметрах есть указатель на графический контекст. Его можно использовать для отрисовки временного объекта.
например

Acad::ErrorStatus _Armatura_ARX_insert::monitorInputPoint(bool& appendToTooltipStr,
                                                          char*& additionalTooltipString,
                                                          AcGiViewportDraw* mode,
                                                          AcApDocument* document,
...
{
...
        AcDbCircle *pC=new AcDbCircle(...);
        mode->geometry().draw(pC);
        delete pC;
...
}

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

БОЛЬШОЕ спасибо.
А вот ещё вопрос.
Если я таким способом нарисую MText, то будет ли выведено стандартное AutoCAD'овское окно для редактирования текста после двойного щелчка на изображении текста?

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

нет.
Откроется только стандартное окно свойств с общими свойствами (общих для AcDbEntity). Возможность добавления собственных - отдельная песня.
Да и ещё - в примере я показал как отрисовать круг (в общем случае - любой объект). Это не означает, что объект унаследован от круга (хотя на чертеже отрисован будет именно он).
То есть есть можно иметь объект унаследованный от MText и отрисовывать его с помощью его же функции viewportDraw(), а можно унаследовать от AcDbEntity, но отрисовывать MText перегрузив отрисовку своей функцией, при этом в dwgOut() сохранять только текстовую строку.

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

Я пробовал вызвать mode->geometry().draw(...), но изображения MText'а не появилось. Наверное, что-то не так сделал :)
Однако я вышел из ситуации следующим образом. В своём объекте объявил HardOwner на MText. После создания моего объекта, отдельного объекта MText и после занесения их в базу данных вызывается функция-член моего класса, которая инициализирует мой HardOwner ID'шником созданного MText'а.
Таким образом, я вообще с текстом не работаю - это задача MText'а. Единственное - нужно сохранять/загружать HardOwner в функциях dxfInFields,dxfOutFields,dwgOutFields и dwgInFields.
Ещё раз БОЛЬШООООЕ спасибо.

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

8-( ) надо ж было так заморочиться...
а не боишься, что указанный ID'шником МТекст может быть "случайно" удалён пользователем и при обращении к нему всё повиснет?

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

Да нет, не виснет вроде :)

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

В свое время тоже долго мучился, используя  mode->geometry().draw( ) для отрисовки МТекст-а. Для того, чтобы он отображался, нужно обязательно использовать метод setTextStyle(styleId). Для создания отдельного примитива МТекст - этот метод необязателен, так как в конструкторе уже есть ссылка на текущий текстовый стиль.
Вот код с минимально-необходимыми методами для создания МТекст-а

    AcDbMText *pText = new AcDbMText;
    pText->setLocation(...);
    pText->setContents(...);
    pText->setTextHeight(...);
    pText->setTextStyle(...);
    pText->setPropertiesFrom(this);
    mode->geometry().draw(pText);
    delete pText;

Метод setPropertiesFrom(), также необходим, для того чтобы при изменении свойств своего объекта (цвет, вес линии, и.т.д.) менялись свойства и МТекст-а, включенного в этот объект

Re: Использование AcDbMText в объекте, наследуемом от AcDbEntity

О. Спасибо. Мало ли проблемы с HardOwner'ом появяться, так я Вашим советом обязательно воспользуюсь.