Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Андрей Бушман от 24-12-2014, 14:14:21

Название: ObjectIdGraph
Отправлено: Андрей Бушман от 24-12-2014, 14:14:21
Доброго времени суток.

Меня интересует аргумент метода Database.Purge (ObjectIdGraph). Я сам должен создавать  и наполнять содержимым объект ObjectIdGraph? Если "да", то гораздо проще было бы использовать перегруженный вариант Database.Purge (ObjectIdCollection)... Или всё же можно как-то получить уже сформированный объект ObjectIdGraph с тем, чтобы передать его в Database.Purge?

Кроме того, ObjectIdGraph имеет default public constructor в AutoCAD 2015, но я не вижу его в AutoCAD 2009. Как создавать ObjectIdGraph в AutoCAD 2009?

Спасибо
Название: Re: ObjectIdGraph
Отправлено: Александр Ривилис от 24-12-2014, 14:56:43
Кроме того, ObjectIdGraph имеет default public constructor в AutoCAD 2015, но я не вижу его в AutoCAD 2009. Как создавать ObjectIdGraph в AutoCAD 2009?
Сразу чтобы не было лишних вопросов - ответ одного из членов команды разработчиков AutoCAD:
Цитировать
You can't use the ObjectIdGraph class in Acad versions prior to Acad 2012 because the class was not implemented.  I fixed that in Acad 2012.
Т.е. для всех версий до 2012 использовать этот метод нельзя.
Я сам должен создавать  и наполнять содержимым объект ObjectIdGraph? Если "да", то гораздо проще было бы использовать перегруженный вариант Database.Purge (ObjectIdCollection)... Или всё же можно как-то получить уже сформированный объект ObjectIdGraph с тем, чтобы передать его в Database.Purge?
Польза от этого метода в том, что его не нужно вызвать повторно если ты ищешь возможность удалить и (например) блоки и (например) слои, на которые эти блоки ссылаются. Т.е. в случае с ObjectIdGraph достаточно одного вызова, а с ObjectIdCollection как минимум два.
Название: Re: ObjectIdGraph
Отправлено: Андрей Бушман от 24-12-2014, 15:04:21
Польза от этого метода в том, что его не нужно вызвать повторно если ты ищчешь возможность удалить и (например) блоки и (например) слои, на которые эти блоки ссылаются. Т.е. в случае с ObjectIdGraph достаточно одного вызова, а с ObjectIdCollection как минимум два.
Т.е. нужно самому строить это дерево? Насколько я понимаю, для этого всё равно потребуется выполнить итерацию по всем объектам?
Название: Re: ObjectIdGraph
Отправлено: Александр Ривилис от 24-12-2014, 15:21:09
Т.е. нужно самому строить это дерево?
Нет. Строить не нужно. При помощи метода AddNode просто добавляешь те ObjectId, которые нужно проверить на возможность безболезненного удаления. Повторная итерация не нужна. Впрочем в native-коде когда-то очень давно был баг, при котором кое-что в "дереве" оставалось, чему там быть не должно. Ну и потом требовался _AUDIT чертежа для исправления ошибок.
Название: Re: ObjectIdGraph
Отправлено: Андрей Бушман от 24-12-2014, 15:33:36
Спасибо.