У меня есть объекты на чертеже Autocad со свойством Base
. Я пытаюсь найти все объекты на этом чертеже со свойством Base
, имеющим определенное строковое значение, например "Pipe
".
Я могу повторять объекты на чертеже и получать идентификаторы всех объектов. Затем я получаю все свойства объекта с этим идентификатором и проверяю, есть ли свойство с именем Base = "Pipe"
.
Производительность итерации недостаточно высока. Есть ли способ напрямую получить идентификаторы объектов со свойством Base = "Pipe"
?
Вот как я перебираю все объекты:
List<ObjectId> ObjectIds = new List<ObjectId>();
foreach (Document Document in Documents)
{
Database Database = Document.Database;
using (Transaction Transaction = Database.TransactionManager.StartTransaction())
{
for (long i = Database.BlockTableId.Handle.Value; i < Database.Handseed.Value; i++)
{
ObjectId Id;
if (Database.TryGetObjectId(new Handle(i), out Id))
{
ObjectIds.Add(Id);
}
}
Transaction.Commit();
}
}
И вот как я получаю все свойства объектов в моей коллекции ObjectIds
.
public static DataLinksManager DataLinks
{
get
{
if (null == _DataLinks)
{
StringCollection Coll = Autodesk.ProcessPower.DataLinks.DataLinksManager.GetLinkManagerNames();
if (Coll.Count > 0)
{
if (Coll[0] != string.Empty)
{
_DataLinks = Autodesk.ProcessPower.DataLinks.DataLinksManager.GetManager(Coll[0]);
}
}
}
return _DataLinks;
}
}
private static DataLinksManager _DataLinks;
foreach(var Id in ObjectIds)
{
List<KeyValuePair<string, string>> Properties = DataLinks.GetAllProperties(Id, true);
// I check existence of my property and if so its value.
}