- все версии AutoCAD не старее чем 2009-я (в более старых не тестировал)
- nanoCAD 6.0 (и любые более новые версии)
- BricsCAD 14.2 (и любые более новые версии)
- любое автономное приложение, использующее в своей работе платформу Teigha.
Я подтверждаю, что BricsCAD аварийно завершает работу в результате выполнения прилагаемого кода. Нулевой указатель передается в панель Свойств объектов (свойство «Annotative»). Проблема устранена в версии v15.1.02 и всех последующих версиях.
Аварийного завершения работы можно избежать двумя способами:
1. закрыть панель Свойств;
2. в методе GetFreeAnnotativeScaleIds() удалять все AnnotationScale объекты, кроме текущего (определен в переменной CANNOSCALE)
При дальнейшем изучении проблемы выяснилось, что AcDbDatabase::purge(AcDbObjectIdArray&) из ObjectARX не возвращает id текущего именованного масштаба (задается переменной CANNOSCALE). В то же время, этот id возвращается методом OdDbDatabase::purge(OdDbObjectIdArray&) в Teigha. Баг репорт с этой проблемой был направлен в Open Design Alliance.
Мною были внесены предложенные изменения в исходный код метода GetFreeAnnotativeScaleIds и проблема с работой команды rmScales исчезла.
В коде определены следующие команды:
- proxy — вывести в консоль информацию о количестве объектов ProxyEntity и ProxyObject, имеющихся в текущей базе данных чертежа.
- xProxy — расчленить все объекты ProxyEntity имеющиеся в текущей базе данных чертежа.
- rmProxy — удалить из текущей базы данных чертежа все объекты ProxyEntity и ProxyObject.
- rmScales — удалить из текущей базы данных чертежа все неиспользуемые аннотативные масштабы из общего списка аннотативных масштабов.
- AutoCAD 2009 SP3 x64 Enu
- AutoCAD 2015 SP1 x64 Enu
- nanoCAD 6.0 x64 Rus (при этом необходимо установить обновление hostdbmgd.zip)
- BricsCAD 14.2.17 x64 Enu
- собственное приложение, работающее на основе платформы Teigha 4.0.