Тема: Как получить список имен всех Layers в чертеже?

Всем доброго времени суток!
Опять у меня вопрос начинающего.
Пытаюсь получить список имен всех слоев(layers) в чертеже
ArrayList names = new ArrayList();
Document pDoc = AcadApp.DocumentManager.MdiActiveDocument;
Database pDb = pDoc.Database;
using (Transaction pTr = pDb.TransactionManager.StartTransaction())
try
{
DBObjectCollection list = pTr.GetAllObjects();
foreach(DBObject dbObj in list)
{
  if((dbObj.GetType()).Name == "LayerTableRecord")
  {
    names.Add(((LayerTableRecord)dbObj).Name)
  }
}
catch
{....}
Однако при проверке оказывается что в list нет ни одного объекта.
Вообще изначально думал что можно взять LayerTableRecord работая с LayerTable, но не нашел там ничего подходящего (во всяком случае на первый взгляд)
Уважаемые Гуру, подскажите где я допускаю ошибки, Каково в этом случае правильное решение.
Зараннее благодарен за помошь

Re: Как получить список имен всех Layers в чертеже?

// Define Command "LISTLAYERS"
[CommandMethod("LISTLAYERS")]
static public void ListLayers()
{
  Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
  // ArrayList names = new ArrayList();
  Database db = HostApplicationServices.WorkingDatabase;
  Transaction trans = db.TransactionManager.StartTransaction();
  try
  {
    LayerTable lt = (LayerTable)(trans.GetObject(db.LayerTableId, OpenMode.ForRead));
    IEnumerator layerIter = lt.GetEnumerator();
    while( layerIter.MoveNext() )
    {
      ObjectId id = (ObjectId)(layerIter.Current);
      LayerTableRecord ltr = (LayerTableRecord)(trans.GetObject(id, OpenMode.ForRead));
      // names.Add(ltr.Name);
      ed.WriteMessage("\n"+ ltr.Name);
    }
  }
  finally
  {
  }
}

Re: Как получить список имен всех Layers в чертеже?

Еще раз спасибо за помошь и информацию, которая возможно и лежит на поверхности но не всегда видна изза отсутствия опыта.
Кстати в какой то момент пробовал я экспереминтировать в процессе поиска решения с IEnumerator, но видимо что то сделал не так. Еще раз спасибо. Иду анализировать свои ошибки и двигаться дальше
(чтоб меньше чайниковских вопросов задавать :))
с уважением spongebob

Re: Как получить список имен всех Layers в чертеже?

> spongebob
Еще один (более лаконичный) вариант итерации по слоям:

LayerTable lt = (LayerTable)(trans.GetObject(db.LayerTableId, OpenMode.ForRead));
foreach (ObjectId id in lt)
{
  LayerTableRecord ltr = (LayerTableRecord)(trans.GetObject(id, OpenMode.ForRead));
  // names.Add(btr.Name);
  ed.WriteMessage("\n"+ ltr.Name);
}

К сожалению эти вопросы в ObjectARX SDK никак не освещены, в примерах тоже ничего нет и нужно включать интуицию в простейших задачах, которые в "чистом" ObjectARX решаются элементарным образом.

Re: Как получить список имен всех Layers в чертеже?

К той документации и примерам, которые есть в составе ObjectARX 2006 для .NET есть еще несколько полезных вещей:
1) .NET version of the ObjectARX Developer's Guide - http://discussion.autodesk.com/thread.j … ID=4903982
2) AutoCAD .NET API Labs - http://discussion.autodesk.com/thread.j … ID=4915964
3) MgdDbg C# app for Acad2006 - http://discussion.autodesk.com/thread.j … ID=4907654

Re: Как получить список имен всех Layers в чертеже?

Еще раз спасибо!
Глянул пока что в кратце но почерпнуть информацию будет откуда. А то ведь ситуация такая что производители переходят на использование .NET а документации практически никакой. А после года сидения в C# (при небольшом опыте работы программистом до C#) на код в С++ смотрю с тоской, хотя раньше все было таким родным и знакомым(личное впечатление).
Пришлось вот пол года назад с вешью подобной ObjectARX столкнуться но для GeoMedia так там для новой версии под .NET описаний и примеров (особенно для C#) практически не было.
Ладно, не буду засорять www философскими излияниями. ЕЩЕ РАЗ БОЛЬШОЕ СПАСИБО ЗА ПОМОШЬ И ИНФОРМАЦИЮ!!!!!