15/11/2013
Генерирование данных об использовании слоёв перед очисткой/удалением
Иногда случается, что не удаётся очистить слой и его свойство "IsUsed" возвращает true даже если этот слой не используется. Причина этого в том, что AutoCAD хранит информацию об использованных слоях и обновляет её только тогда, когда это требуется. Чтобы форсировать обновление этих данных следует использовать метод "GenerateUsageData" объекта LayerTable.Это пример кода, который пытается удалить записи таблицы слоёв после вызова "GenerateUsageData".
Код - C#: [Выделить]
- [CommandMethod("Test")]
- public void TestMethod()
- {
- Document document
- = Application.DocumentManager.MdiActiveDocument;
- Database db = document.Database;
- using (Transaction tr
- = db.TransactionManager.StartTransaction())
- {
- LayerTable lt = tr.GetObject(
- db.LayerTableId,
- OpenMode.ForRead
- ) as LayerTable;
- lt.GenerateUsageData();
- foreach (ObjectId oid in lt)
- {
- LayerTableRecord ltr = tr.GetObject
- (
- oid,
- OpenMode.ForRead
- ) as LayerTableRecord;
- if (ltr.IsUsed == false)
- {
- ltr.UpgradeOpen();
- ltr.Erase();
- }
- }
- tr.Commit();
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2012/05/generate-layer-usage-data-before-purgedelete.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=324
Опубликовано 15.11.2013