Тема: Как регенерировать custom objeсt?

после содания пользовательского entity, по команде _3dorbit акад виснет...однако, если просле создания объектов сделать regen all, все нормально и _3dorbit работает как новая???

Re: Как регенерировать custom objeсt?

> Миша
Была такая же ерунда, только регенерация не помогала smile По другим причинам пришлось переработать код, проблема исчезла... Насколько я понял, проблемы были в функции worldDraw: поэксперементируй с ней...

Re: Как регенерировать custom objeсt?

> Миша
Попробуй еще сразу после создания объекта открыть его на запись, выполнить для него метод recordGraphicsModified и закрыть его, хотя мне кажется, что archimag прав и проблема именно в worldDraw или viewportDraw.

Re: Как регенерировать custom objeсt?

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

Re: Как регенерировать custom objeсt?

> Миша
Если это не большой секрет, выложи исходник на форуме или пришли мне - посмотрю.

Re: Как регенерировать custom objeсt?

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

Re: Как регенерировать custom objeсt?

> Александр
Ривилис (2005-09-18 22:13:24
послал код

Re: Как регенерировать custom objeсt?

> Миша

> archimag
IMHO разобрались. В worldDraw не следует использовать _bstr_t для преобразования из double. Видимо происходят утечка памяти...

Re: Как регенерировать custom objeсt?

ок, спасибо!!! :))

Re: Как регенерировать custom objeсt?

> Александр Ривилис
ИМХО, очень странно, при чём тут _bstr_t (кода я не видел)? Вообще, за этот год (в течении которого я работаю с ObjectArx) у меня накопилось много нехороших слов в адресс Autodesk: ужасная документация, куча глюков, ощущаю себя скорей сапёром, чем программистом smile

Re: Как регенерировать custom objeсt?

> archimag
Зато как развивается интуиция! biggrin

Re: Как регенерировать custom objeсt?

> Александр Ривилис
Рановато я обрадовался. Взял голый пример clonemsg, запустил в autocad-e, создал объект, запустил комманду 3dorbit, потом создаю еще раз объект, запускаю 3dorbit и оппаньки, мы висим!!!

Re: Как регенерировать custom objeсt?

> Миша
Все точно. Очень похоже на баг AutoCAD, но выкрутиться можно.
1) после добавления примитива в базу (append) закрыть его;
2) открыть его снова на запись и  выполнить для него recordGraphicsModified();
3) закрыть его.
Как ни странно, но после таких манипуляций эта ошибка исчезает. smile

Re: Как регенерировать custom objeсt?

> Александр Ривилис
Дааа....таки это решило проблему :))Сапсибо еще раз!!!!> Александр Ривилис (2005-09-19 23:29:39)

Re: Как регенерировать custom objeсt?

> Миша
Оказалось, что это баг не AutoCAD и даже не ObjectARX. Это скорее баг компилятора C++. В этом примитиве есть метод id()(не виртуальный), который перекрывает аналогичный метод родительского (точнее прадедушкиного) класса. Если его переименовать, то все становится на свои места.