Страница 1 из 1

2DLine возврат в место создания

СообщениеДобавлено: 07 сен 2009 08:39
Artem
Здравствуйте уважаемые камрады. При создании линии и использовании
CATI2DLine - HRESULT SetLineData(const double *pRootPoint, const double *pDirection) после закрытия и открытия чертежа линия возвращается на место своего создания.Это лечится?

Re: 2DLine возврат в место создания

СообщениеДобавлено: 07 сен 2009 10:56
booSter
"Апдэйт" "скетчу" или "въю" перед сохранением/закрытием делается ?

Re: 2DLine возврат в место создания

СообщениеДобавлено: 07 сен 2009 12:52
Artem
И програмно и вручную делал, и Dispatch(CATCreate/CATModify) делал.....Еще заметил - если редактировать линию, то в меню редактора хоть и новые координаты стоят - но если нажать cancel также в место создания возвращается....После ок и если мышью подвигать то все окей

Re: 2DLine возврат в место создания

СообщениеДобавлено: 07 сен 2009 13:06
booSter
А линия не связана ли с точками (CATI2DPoint) по концам ?
Если да, то нужно менять параметры концевых точек, а линия сама перестроится при "апдэйте".

Ещё один нюансик:
Перед тем, как что-либо начать менять в "скетче" нужно вызывать OpenEdition, а после завершения редактирования CloseEdition и после этого вызывать CATISpecObject#Update на "скетче". OpenEdition и CloseEdition определены в CATISketchEditor, а CATISketch прямой его наследник.

Re: 2DLine возврат в место создания

СообщениеДобавлено: 07 сен 2009 13:20
Artem
Линию делаю в виде чертежа без привязки к точкам.
Код: Выделить всё
   r = Line2D->get_StartPoint(Point1);
   r = Line2D->get_EndPoint(Point2);
   r = Point1->SetData(XY[0],XY[1]);
   r = Point2->SetData(XY[0]+4,XY[1]+5);

- вот это вот тоже не помогает(((((..........Кстати подобная же функция для текста работает замечательно

Re: 2DLine возврат в место создания

СообщениеДобавлено: 08 сен 2009 11:41
booSter
Во ещё мысль для "обкуривания" :pioneer1: :

В случае если редактирование "дравинга" происходит под транзакцией (т.е. во время исполнения "стэйт комманды" (CATStateCommand) с включенным "анду" (Undo/Redo)) и транзакция по завершении команды откатывается (т.е. "стэйт комманда" завершается переходом в "кансел стэйт" CATStateCommand#CATGetCancelState()) то редактируемый документ возвращается (по возможности) в исходное состояние (т.е. состояние до запуска "стэйт комманды"), чем, собственно, этот спец-эффект можно отчасти объяснить.

Re: 2DLine возврат в место создания

СообщениеДобавлено: 08 сен 2009 15:42
Artem
OpenEdition/CloseEdition и даже saveedition вообще никак-вылетает.....Хмм ну может быть это из-за того откуда вызывается изменение положения -из диспатча модельевентса другого обьекта-при изменении положения этого обьекта линия автоматом двигается за ним.....Может метода конечно и в корне не правильная-но с текстом прокатывает на ура....и с линией работала -пока не попробовал закрыть/открыть документ...

Re: 2DLine возврат в место создания

СообщениеДобавлено: 18 сен 2009 09:26
Artem
Думал пройду по ключам - найду х/у и задам их вручную. Два ключа типа Х и У не нашел ни у точки, ни у линии,зато у обоих есть лист с даблами (какой то там data... 100% оно - данные меняются при изменении координат).Толи они чисто на оутпут, толи механизмы обновления работают как то не так(вызывается вроде нормально) -ну не работает и баста((((...
Сделал свой элемент на основе 2DLine....переопределил CATIModelEvents - в диспатче задаю данные для 2х tk_double(x/y), а в гетдиспатче - который при загрузке документа вызывается, их возвращаю на место...вот какое-то такое извращение получилось....