> Александр Ривилис
:) - Ну дак блин е-мое... одни буквы и цифры. Можно свое окошко написать, где самому отображать приметивы, селектить, бегать по базе, заниматься трансформацией систем координат... короче все это от плохой жизни...
вернее даже от плохой модели автокада. (Ругать не строить, но все понимают что все корни уходят в глубокое прошлое откуда растет много проблем )
Например было бы не хило для AcDbBlockTableRecorda - сделать некий класс AcDbBlockTableModel - который был бы нагружен полезной функциональностью типа.
______________________________
Конструктор:
AcDbBlockTableModel::AcDbBlockTableModel(blkId)
Global Model Functions
select(3DSpace) (всякие селекты, по 3D областям)
select(Layer) (селекты по слоям)
....
View Model Functions
setViewCamera( pos, Matrix ) - установка камеры
getObjectsInView(_ARR<AcDbObjectId>&)
select( 2dBox ) - селекты по рамке и контурам...
...
________________________________
Ну почему World и View - вообще разнесены и не связаны в одну модель, почему такая привязка к приметивам на дисплее (виртуальном)? Я уже ранее писал, что если объект поставить Invisible, то он вообще исключается из всяких операций input point processing - а от сюда растет куча бед с update-ами, refresh-ами. Короче то что видно на экране - реально завязали с моделью.
Поясню. Все объекты отрисовывают себя в worldDraw в конечном итоге приметивами. Далее эти приметивы запоминаются в некотором дереве AcGsModel. Далее AcGsModel отображается на экран. Весь input point processing происходит не с реальными объектами а через AcGsNode - достукиваются до реальных объектов (типа получить osnap и все такое). Как результат косяки когда в процессе input point-нга (gripping, dragging еtс) происходит изменение каких-либо объектов - это отображается не сразу. Более того при gripping, dragging - вставляют в AcGsModel приметивы, которые принадлежат объектам не из модели (типа клон таскаемого объекта), при flushGraphics() - для изменившихся объектов убивают их старые AcGsNode - (приметивы) и вставляют новые - т.е. дергают worldDraw() - и в этот момент убивают все AcGsNode - темпоральных объектов. Посему модификация объектов при dragging-е приводит к "глюкам". Кстати уже только саму AcGsModel - отображают на экране.... при этом если что-то не попало в "вид", то вообще исключают из input point processinga...
Хотя спорить не буду - в целом модель как она есть сейчас получилась приемлемой, но со своими проблемами и косяками.
А сделать даже для ObjectARX что-нибудь аля AcDbBlockTableModel как я описал выше - вообще не вижу проблем т.к. это расширение старого а не его изменение... Но не каждому же пользователю это делать самому и итераторами бегать по базе, паралельно трансформируя системы координат и точки...