@youssefGC wrote:
directly access the specified polyline using the previously stored list of Handle.
Storing ObjectIds instead of Handles will avoid you converting Objectid into Handle (with ObjectId.Handle) and converting back Handle into ObjectId (with .TryGetObjectId).
Here's an example:
[CommandMethod("SETXRECORD")]
public static void SetXrecord()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
var psr = ed.GetSelection();
if (psr.Status != PromptStatus.OK)
return;
using (var tr = db.TransactionManager.StartTransaction())
{
var nod = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);
DBDictionary dict;
if (nod.Contains(dictName))
{
dict = (DBDictionary)tr.GetObject(nod.GetAt(dictName), OpenMode.ForRead);
}
else
{
dict = new DBDictionary();
tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForWrite);
nod.SetAt(dictName, dict);
tr.AddNewlyCreatedDBObject(dict, true);
}
Xrecord xrec;
if (dict.Contains(xrecKey))
{
xrec = (Xrecord)tr.GetObject(dict.GetAt(xrecKey), OpenMode.ForWrite);
}
else
{
xrec = new Xrecord();
if (!dict.IsWriteEnabled)
tr.GetObject(dict.ObjectId, OpenMode.ForRead);
dict.SetAt(xrecKey, xrec);
tr.AddNewlyCreatedDBObject(xrec, true);
}
xrec.Data = new ResultBuffer(
psr.Value.GetObjectIds()
.Select(id => new TypedValue(330, id))
.ToArray());
tr.Commit();
}
}
[CommandMethod("GETXRECORD", CommandFlags.Redraw)]
public static void GetXrecord()
{
var doc = Application.DocumentManager.MdiActiveDocument;
var db = doc.Database;
var ed = doc.Editor;
using (var tr = db.TransactionManager.StartTransaction())
{
var nod = (DBDictionary)tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead);
if (!nod.Contains(dictName))
return;
var dict = (DBDictionary)tr.GetObject(nod.GetAt(dictName), OpenMode.ForRead);
if (!dict.Contains(xrecKey))
return;
var xrec = (Xrecord)tr.GetObject(dict.GetAt(xrecKey), OpenMode.ForRead);
var data = xrec.Data;
if (data == null)
return;
var ids = data.AsArray().Select(tv => (ObjectId)tv.Value).Where(id => !id.IsNull);
ed.SetImpliedSelection(ids.ToArray());
tr.Commit();
}
}