I think it's relatively easy as there are similarities with other Aec dictionaries.
Reference to:
- C:\Program Files\Autodesk\AutoCAD xxxx\ACA\AecArchMgd.dll
- C:\Program Files\Autodesk\AutoCAD xxxx\ACA\AecBaseMgd.dll
Set copy local to false.
Not tested:
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.Aec.Arch.DatabaseServices;
using Autodesk.Aec.DatabaseServices;
using AcDb = Autodesk.AutoCAD.DatabaseServices;
using AecDb = Autodesk.Aec.DatabaseServices;
public static void ListListDefinition()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = Application.DocumentManager.MdiActiveDocument.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
AecDb.DictionaryListDefinition ldDict = new DictionaryListDefinition(db);
AcDb.ObjectIdCollection objectIdCollection = ldDict.Records;
foreach (AcDb.ObjectId ldId in objectIdCollection)
{
ListDefinition ld = (ListDefinition)tr.GetObject(ldId, OpenMode.ForRead);
ed.WriteMessage($"\nList defintion name: {ld.Name}");
}
}
}
public static void CreateOrAddRenameItemToListDefinition()
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database db = Application.DocumentManager.MdiActiveDocument.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
AecDb.DictionaryListDefinition ldDict = new DictionaryListDefinition(db);
try
{
// Find list definition by the name
if (ldDict.Has("MyListDefinition", tr))
{
AcDb.ObjectId ldId = ldDict.GetAt("MyListDefinition");
ListDefinition ld = (ListDefinition)tr.GetObject(ldId, OpenMode.ForWrite);
// add item to the list definition
ld.AddListItem("Name1");
ld.AddListItem("Name2");
// rename item
AcDb.ObjectId itemId = ld.GetListItem("Name3");
if (!itemId.IsNull)
{
ld.RenameList(itemId, "Name3Renamed");
}
tr.Commit();
}
else
{
ListDefinition ld = new ListDefinition();
ld.SubSetDatabaseDefaults(db);
ld.SetToStandard(db);
ldDict.AddNewRecord("MyListDefinition", ld);
ld.AddListItem("Name1");
ld.AddListItem("Name2");
ld.Description = "My list definition test";
// Set its AppliesToFilter property
System.Collections.Specialized.StringCollection strCol = new System.Collections.Specialized.StringCollection();
// You need use internal names
strCol.Add("AecListUserManualPropertyDef");
// strCol.Add("AecListUserSpaceNames")
// strCol.Add("AecListUserZoneNames")
ld.AppliesToFilter = strCol;
tr.AddNewlyCreatedDBObject(ld, true);
tr.Commit();
}
}
catch (System.Exception ex)
{
Application.ShowAlertDialog(ex.Message);
}
}
}