ObjectIdCollection est un conteneur spécialisé conçu pour contenir une liste de structures ObjectId. Il est extensivement utilisé dans l'API AutoCAD pour des opérations nécessitant plusieurs références d'objets, telles que l'effacement en masse, la gestion de transactions, et le passage de jeux de sélection aux méthodes API.
Autodesk.AutoCAD.DatabaseServices
| Propriété | Type | Description |
|---|---|---|
Count |
int |
Obtient le nombre d'IDs dans la collection. |
this[int] |
ObjectId |
Indexeur pour obtenir/définir l'ID à l'index spécifique. |
| Méthode | Type de Retour | Description |
|---|---|---|
Add(ObjectId) |
int |
Ajoute un ID à la fin. Retourne constant 0. |
Remove(ObjectId) |
void |
Supprime la première occurrence de l'ID. |
Contains(ObjectId) |
bool |
Vérifie si l'ID existe dans la collection. |
Clear() |
void |
Supprime tous les éléments. |
ToArray() |
ObjectId[] |
Copie les éléments vers un nouveau tableau. |
CopyTo(ObjectId[], int) |
void |
Copie les éléments vers un tableau existant. |
ObjectIdCollection ids = new ObjectIdCollection();
// En supposant que vous avez des IDs d'objets
ids.Add(lineId);
ids.Add(circleId);
ids.Add(arcId);
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage($"\nLa collection a {ids.Count} éléments.");using (Transaction tr = db.TransactionManager.StartTransaction())
{
ObjectIdCollection idsToErase = new ObjectIdCollection();
// ... rassembler IDs ...
idsToErase.Add(someId);
foreach (ObjectId id in idsToErase)
{
DBObject obj = tr.GetObject(id, OpenMode.ForWrite);
obj.Erase();
}
tr.Commit();
}PromptSelectionResult selRes = ed.GetSelection();
if (selRes.Status == PromptStatus.OK)
{
// SelectionSet.GetObjectIds retourne ObjectId[]
ObjectId[] idArray = selRes.Value.GetObjectIds();
// Créer collection depuis tableau
ObjectIdCollection col = new ObjectIdCollection(idArray);
ed.WriteMessage($"\nConverti {col.Count} éléments sélectionnés.");
}foreach (ObjectId id in myCollection)
{
// Effectuer vérification
if (id.IsNull) continue;
// Traiter ID
}- Libération Non Requise : Contrairement à
DBObject,ObjectIdCollectionest un wrapper géré autour d'une liste simple et ne nécessite pas strictement de libération, mais implémente généralementIDisposabledans les wrappers COM. En .NET, c'est généralement sûr, mais les blocsusingsont une bonne pratique si disponible. - Performance : Pour des listes massives (100k+),
List<ObjectId>standard pourrait être légèrement plus rapide, mais les méthodes API nécessitent spécifiquementObjectIdCollection. Utilisez la collection native lors de l'interaction avec les méthodes AutoCAD.
- ObjectId - Le type d'élément.
- DBObjectCollection - Collection des objets eux-mêmes.