Информация об AutoCAD SDK:
http://usa.autodesk.com/adsk/servlet/in … id=1911627
ObjectARX for AutoCAD 2008 (exe, 30.2 Мб):
http://usa.autodesk.com/adsk/servlet/it … ;id=785550
> Александр Ривилис (2008-02-26 16:18:02)
В медленной реализации это возможно и глупость :) а в быстрой было бы многим полезно.
> Dangee (2008-02-27 09:17:08)
Попробуй еще вариант с хранением списка всех id в чертеже (сообщение от 2008-02-26 16:06:09). Только после получения списка отсортируй его и применяй бинарный поиск, тогда избавишься от итератора.
Еще можешь попробовать в этом же списке сохранить текущее состояние (видимость) объектов. Это чревато рассинхронизацией с базой чертежа, если кто-то захочет изменить видимость объекта другим способом, зато можно будет не открывать все объекты для чтения, а только те которые изменить сразу на запись.
Александр Вы как на это смотрите?
> Александр Ривилис (2008-02-26 18:53:37)
А зачем в блоке else вот этот код
...
if (!aSel.contains(id)) {
...
}
ведь у нас ничего не выбрано?
И тут:
AcDbEntityPointer pEnt(id,AcDb::kForRead);
if (pEnt.openStatus() == Acad::eOk) {
if (pEnt->visibility() == AcDb::kInvisible && pEnt->upgradeOpen() == Acad::eOk) {
pEnt->setVisibility(AcDb::kVisible);
}
}
стоит ли проверять невидимость объекта, если количество видимых объектов значительно меньше количества невидимых? Большой переработки при установки видимости ВСЕМ не должно быть:
AcDbEntityPointer pEnt(id,AcDb::kForWrite);
if (pEnt.openStatus() == Acad::eOk) {
pEnt->setVisibility(AcDb::kVisible);
}