Тема: Как регенерировать custom objeсt?
после содания пользовательского entity, по команде _3dorbit акад виснет...однако, если просле создания объектов сделать regen all, все нормально и _3dorbit работает как новая???
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → ObjectARX → Как регенерировать custom objeсt?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
после содания пользовательского entity, по команде _3dorbit акад виснет...однако, если просле создания объектов сделать regen all, все нормально и _3dorbit работает как новая???
> Миша
Была такая же ерунда, только регенерация не помогала По другим причинам пришлось переработать код, проблема исчезла... Насколько я понял, проблемы были в функции worldDraw: поэксперементируй с ней...
> Миша
Попробуй еще сразу после создания объекта открыть его на запись, выполнить для него метод recordGraphicsModified и закрыть его, хотя мне кажется, что archimag прав и проблема именно в worldDraw или viewportDraw.
поэксперементировал, внутри функции создаю только одину окружность и все, проблема в чем-то другом
> Миша
Если это не большой секрет, выложи исходник на форуме или пришли мне - посмотрю.
Кстати, а что такое "создаю окружность"? Если создаешь AcDbCircle (да и вообще любой примитив), то этого лучше в этом методе не делать. Создавай примитивы в конструкторе своего класса, а в этом методе только модифицируй и отображай их. Это защитит тебя от утечек памяти и множества других проблем. Не забывай, что этот метод вызывается огромное количество раз при работе команды 3DORBIT.
> Александр
Ривилис (2005-09-18 22:13:24
послал код
> Миша
> archimag
IMHO разобрались. В worldDraw не следует использовать _bstr_t для преобразования из double. Видимо происходят утечка памяти...
> Александр Ривилис
ИМХО, очень странно, при чём тут _bstr_t (кода я не видел)? Вообще, за этот год (в течении которого я работаю с ObjectArx) у меня накопилось много нехороших слов в адресс Autodesk: ужасная документация, куча глюков, ощущаю себя скорей сапёром, чем программистом
> archimag
Зато как развивается интуиция!
> Александр Ривилис
Рановато я обрадовался. Взял голый пример clonemsg, запустил в autocad-e, создал объект, запустил комманду 3dorbit, потом создаю еще раз объект, запускаю 3dorbit и оппаньки, мы висим!!!
> Миша
Все точно. Очень похоже на баг AutoCAD, но выкрутиться можно.
1) после добавления примитива в базу (append) закрыть его;
2) открыть его снова на запись и выполнить для него recordGraphicsModified();
3) закрыть его.
Как ни странно, но после таких манипуляций эта ошибка исчезает.
> Александр Ривилис
Дааа....таки это решило проблему :))Сапсибо еще раз!!!!> Александр Ривилис (2005-09-19 23:29:39)
> Миша
Оказалось, что это баг не AutoCAD и даже не ObjectARX. Это скорее баг компилятора C++. В этом примитиве есть метод id()(не виртуальный), который перекрывает аналогичный метод родительского (точнее прадедушкиного) класса. Если его переименовать, то все становится на свои места.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → ObjectARX → Как регенерировать custom objeсt?
Форум работает на PunBB, при поддержке Informer Technologies, Inc