|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
ImprintEntity - утечка памяти (ObjectArx / C++)
прохраммист ObjectArx
Регистрация: 01.11.2010
Сообщений: 40
|
||
Просмотров: 7116
|
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Glam Troll, ты в заголовке темы укажи - язык, под какую версию пишешь и проч.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411
|
Можешь: Как переименовать тему?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Если на C++, да к тому же член ADN, то прямая дорога сюда: http://adn-cis.org/forum/index.php?board=3.0
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic) |
||||
![]() |
|
||||
Цитата:
P.S.: А с acdbEntNext ты меня пробил на ностальгию. Я эту функцию не использовал лет пятнадцать.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
Разумеется габаритные контейнеры проверяю. Тут без проверки, чтобы ошибку явно показать. На каждый импринт "утекает" буквально килобайт памяти, но из-за сложности конструкции накапливаются десятки гигабайт за считанные минуты...
С габаритными контейнерами у автокада тоже баг есть (или фича ![]() Цитата:
![]() |
|||
![]() |
|
||||
Тебя интересуют 3DSolid'ы только в Пространстве Модели или все, которые есть в чертеже, в том числе и лежащие в блоках?
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
Интересуют вообще все entity, которые есть в БД документа. Причём, типы некоторых из них мне даже неизвестны (сторонняя библиотека по AcDbObjectId возвращает его солидное представление). В простейшем случае, нужны все солиды и сюрфэйсы с видимых слоёв, включая те, которые в блоках или вставлены по xref.
Кстати! Нынешний код вполне рабочий и его быстродействие меня вполне устраивает. А вот с блоками есть непонятки. К телам в блоках ведь могут применяться различные трансформации и, вытаскивая тело из блока, у меня не всегда эти трансформации удаётся применить. Проблема настолько редкая, что я даже про неё не стал спрашивать в виде отдельной темы. Может сталкивались с подобным? |
|||
![]() |
|
||||
Цитата:
Цитата:
Код:
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
|
|||
![]() |
|
||||
Перечитай,только внимательно мой код и обрати внимание на pDb->getAcDbObjectId(id,false,h)) - без него ты можешь получить несуществующий в даном чертеже AcDbHandle
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
Действительно, не обратил внимания. С учётом огромного количества объектов в документе (там ещё и текст и 2Д построения и куча прочего мусора) и их создания/удаления код выглядит как-то опасно. В принципе, инвалидный объект всё-равно не откроется. А вот что может потребоваться тысячи идентификаторов уже "удалённых" объектов отсеивать... Думаю, автокад делает примерно то же самое в методе acdbEntNext, пропуская идентификаторы удалённых объектов.
|
|||
![]() |
|
||||
Можешь из спортивного интереса засечь скорость работы обоих методов. Достоинство моего метода в том, что можно работать и с чертежами, которые не загружены в редактор AutoCAD (т.е. открыты через AcDbDatabase::readDwgFile) или не являются активными в редакторе AutoCAD. Функция acedEntNext работает только с активным dwg-файлом.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
|
|||
![]() |
|
||||
В дальнейшем, пожалуйста, посмотри в мою подпись и можешь задавать вопросы там. Во всяком случае специалистов по ObjectARX там больше и легче программистским коллективом "давить на Autodesk".
![]()
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
А в чем причина такого частого вызова (видимо идет сравнение "каждый к каждому") - какова конечная цель? Быть может возможно будет придумать оптимизацию.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
В реальной программе imprint делается только для тех тел, чьи габаритные контейнеры пересекаются (но это всё-равно тысячи вызовов). По этим телам строится КЭ сетка и сеточному генератору необходимо, чтобы в зоне контакта сетки совпадали. Обеспечить это можно только проецированием тел друг на друга. Если с плоскими гранями ещё можно что-то придумать, дробить самостоятельно сетку, после получения её из BREP'a, то вот с не плоскими поверхностями выбора никакого нет. BREP аппроксимирует кривые так, как ему приспичит и состыковать тела просто невозможно без imprint'a.
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Вот эту часть можно поподробней -оперируя только автокадными понятиями.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
прохраммист ObjectArx Регистрация: 01.11.2010
Сообщений: 40
|
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как бороться с ошибкой выделения памяти | ratkill | SCAD | 14 | 07.09.2015 16:20 |
VBA: утечка памяти при вставке блоков | Mikha | Программирование | 13 | 03.04.2009 09:18 |
При запуске Lisp идет утечка памяти | Name | LISP | 6 | 24.07.2007 14:36 |
Утечка памяти | mental | Программирование | 2 | 22.02.2007 07:40 |
Лира 9.2 + 1 Гб оперативной памяти | nikе | Лира / Лира-САПР | 3 | 28.01.2006 19:02 |