А можно не использовать фильтр вообще, а просто перебрать все объекты в базеА перебрать не медленнее будет чем SelectionSet?
object.GetType().NameКак-то так без проверки:
Хотя, это не будет Dxf-имя...
А перебрать не медленнее будет чем SelectionSet?Будет намного быстрее.
А можно не использовать фильтр вообще, а просто перебрать все объекты в базе и взять те, которые подходят по условию. И могу сказать сразу - это быстро работает (если конечно не косячно сделать)
Есть код, как сделать это не "косячно"?А что такое "косячно"?
Чем отличается Entity от DBObject? DBObject это любой объект в базе?Да. Например слой (LayerTableRecord) или блок (BlockTableRecord) или полилиния (Polyline), но только последний из них еще и примитив (Entity)
А что такое "косячно"?Не знаю. Александр написал, лишь бы сделать некосячно. Может нюансы есть.
Чем отличается Entity от DBObject?Я предполагаю, что Вы знакомы с основными принципами ООП и думаю для полной ясности кто и что, достаточно будет посмотреть диаграмму классов в файле ...\ObjectARX_20ХХ\classmap\classmap.dwg , раздел ObjectARX 20XX Managed Class Hierarchy
:) Не очень знаком. Но данная диаграммка полезная штука кое что прояснилось. Спасибо.Чем отличается Entity от DBObject?Я предполагаю, что Вы знакомы с основными принципами ООП и думаю для полной ясности кто и что, достаточно будет посмотреть диаграмму классов в файле ...\ObjectARX_20ХХ\classmap\classmap.dwg , раздел ObjectARX 20XX Managed Class Hierarchy
И так, как в коде ниже можно найти только объекты, потом из них сделать Entity и дальше отсеивать по слоям и XData?Ниже не код, а обрывок кода. Каким образом кто-то может узнать что такое btr и как ты его получил?
Александр можете объяснить по этому фрагментуКод - C# [Выбрать]
... BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord; foreach (ObjectId id in btr) { if (id.ObjectClass.Name == RXClass.GetClass(typeof(Circle)).Name) { Circle circle = tr.GetObject(id, OpenMode.ForRead) as Circle; ... }
Здравствуйте, а можно пример на VB NET. Я знаю objectID а вот мне с этим делать не знаю? Надо выбрать примитив (блок) считать его имя, координаты и атрибут.Здесь все коды приведены из расчета использования AutoCAD .NET API, а не COM/ActiveX
Не давно начал разбираться и пока не понимаю в чём разница то есть где писать код, но спасибо за ответ.Разница в том, что использовать AutoCAD .NET API можно только в dll-сборке, которая загружается внутрь AutoCAD (команда _NETLOAD). И возможностей в AutoCAD .NET API на порядок больше, чем в COM/ActiveX (которое можно использовать вне AutoCAD и которое или запускает AutoCAD или подключается к уже запущенному). Заодно сразу рекомендую изучать C# вместо VB.NET - даже по этому форуму видно, что из 10 программистов 9 использует C# и только одни VB.NET. И соответственно примеров на C# в 10 раз больше.
но он работает правда иногда выскакивает исключение типаСтандартное исключение, которое возникает при работе через COM/ActiveX.