@Alexander.Rivilis Not so complicated...
Here's an example for both: all objects and all entities in spaces.
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using System.Collections.Generic;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Core.Application;
namespace GetAllObjectsInDatabase
{
public class Commands
{
[CommandMethod("TEST1")]
public static void Test1()
{
var doc = AcAp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
foreach (var item in GetAllObjects(db))
{
ed.WriteMessage($"\n{item.Key.Handle,-6} {item.Value}");
}
}
[CommandMethod("TEST2")]
public static void Test2()
{
var doc = AcAp.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
foreach (var item in GetAllEntities(db))
{
ed.WriteMessage($"\n{item.Key.Handle,-6} {item.Value}");
}
}
static Dictionary<ObjectId, string> GetAllObjects(Database db)
{
var dict = new Dictionary<ObjectId, string>();
for (long i = 0; i < db.Handseed.Value; i++)
{
if (db.TryGetObjectId(new Handle(i), out ObjectId id))
dict.Add(id, id.ObjectClass.Name);
}
return dict;
}
static Dictionary<ObjectId, string> GetAllEntities(Database db)
{
var dict = new Dictionary<ObjectId, string>();
using (var tr = db.TransactionManager.StartOpenCloseTransaction())
{
var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
foreach (var btrId in bt)
{
var btr = (BlockTableRecord)tr.GetObject(btrId, OpenMode.ForRead);
if (btr.IsLayout)
{
foreach (var id in btr)
{
dict.Add(id, id.ObjectClass.Name);
}
}
}
tr.Commit();
}
return dict;
}
}
}