Обновление объекта

Автор redfox, 10.11.11, 00:17:02

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

redfox

Здравствуйте!

ILineDimensionPtr pLineDim;    //получение pLineDim вырезал для наглядности
IDimensionTextPtr pDimText;
ITextLinePtr pTextLine;

pDimText = pLineDim;
pTextLine = pDimText->Suffix;
pTextLine->Clear();
pLineDim->_Update();

Подскажите как правильно обновить объект "Линейный размер", а то путем pLineDim->_Update()  он его не до конца обновляет (размер изменился, но на экране это не отображается)


redfox

Благодарю!
Но этот пример советует вызвать dim->Update() , который в моём случае почему-то не полностью эффективен (изменение размера видно только когда его редактируешь из компаса)
Помимо dim->Update(); следует ли вызывать доп.функции обновления (экрана, родительских объектов и т.д.)

После задания парамеров размера требуется вызвать метод IModelObject::Update.

IModelObject::Update Обновить данные объекта.

Синтаксис Automation:
BOOL Update( );

Синтаксис COM:
HRESULT Update ( [out, retval] VARIANT_BOOL* pRes );

Возвращаемое значение:
TRUE - в случае успешного завершения,
FALSE - в случае неудачи.

Примечание:

1. Метод Update необходимо вызвать для объекта, свойства которого были изменены (после вызова Set- cвойств или методов интерфейса), чтобы эти изменения вступили в силу.
2. Метод Update вернёт TRUE в случае успеха и FALSE в случае неудачи.
3. Вызов Update сработает как при изменении одного свойства, так и при изменении группы свойств объекта.


redfox

Благодарю

Справку читал и пытался получить IModelObject, но это базовый интерфейс для всех модельных объектов, а у меня 2D документ

Да действительно то для 3D размеров, по идеи должен обновляться по Вашему коду. Можно попробовать обновить документ или IDrawingObject::Update.

redfox

11.11.11, 23:36:41 #6 Последнее редактирование: 12.11.11, 00:12:50 от redfox
IDrawingObjectPtr pLD( IUnknownPtr(pLineDim, false) );
pLD->_Update();

и....ничего...

Вот выкрутился таким методом:
ksGetObjParam   получаю параметры размера
ksSetObjParam   и тут же их записываю
С помощью такого извращенного метода размер корректно обновляется

Sabahs, а документ как обновить?

Можно глянуть код где Вы создаете либо берете на редактирование
Цитата: redfox от 10.11.11, 00:17:02
ILineDimensionPtr pLineDim;    //получение pLineDim вырезал для наглядности
потому, что pLineDim->_Update(); должен изменять размер если Вы его правильно создали или взяли на редактирование.

redfox

KompasObject* pKompas5;
pKompas5 = (KompasObject *)(IDispatch*) GetActiveOleObject( "KOMPAS.Application.5" );

long r_obj = obj.lVal;

pLineDim = pKompas5->TransferReference(r_obj, 0);

obj - тип VARIANT, передающийся в событие (ntSelectionMngNotify-ksmSelect)

Вам нужно получать из события указатель на интерфейс размера, а затем использовать функцию TransferInterface для перевода интерфейса в API7 или не заморачиваться, а работать с полученным интерфейсом API5 ksLDimParam.


redfox

Sabahs благодарю, буду пробовать