You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
La classe DBObject est la classe de base fondamentale pour tous les objets stockés dans une base de données AutoCAD. Elle fournit les fonctionnalités de base pour la persistance des objets, les transactions, les handles et la gestion du cycle de vie des objets. Tout objet dans la base de données de dessin — qu'il soit graphique (entités) ou non graphique (enregistrements de table de symboles, dictionnaires, etc.) — dérive de DBObject.
Namespace
Autodesk.AutoCAD.DatabaseServices
Hiérarchie d'Héritage
System.Object
└─ RXObject
└─ DBObject
├─ Entity (tous les objets graphiques)
├─ SymbolTableRecord (calques, blocs, etc.)
├─ DBDictionary
├─ XRecord
├─ SymbolTable
└─ ... (tous les objets de base de données)
Propriétés Clés
Propriété
Type
Description
ObjectId
ObjectId
Obtient l'ObjectId de cet objet
Handle
Handle
Obtient le handle unique de cet objet
Database
Database
Obtient la base de données contenant cet objet
IsErased
bool
Obtient si l'objet a été effacé
IsModified
bool
Obtient si l'objet a été modifié
IsNewObject
bool
Obtient si c'est un objet nouvellement créé
IsNotifying
bool
Obtient si l'objet notifie les réacteurs
IsReadEnabled
bool
Obtient si l'objet est ouvert pour lecture
IsWriteEnabled
bool
Obtient si l'objet est ouvert pour écriture
IsUndoing
bool
Obtient si une opération d'annulation est en cours
ExtensionDictionary
ObjectId
Obtient l'ObjectId du dictionnaire d'extension
OwnerId
ObjectId
Obtient l'ObjectId de l'objet propriétaire
Méthodes Clés
Méthode
Type de Retour
Description
Erase()
void
Efface (suppression logicielle) l'objet
Erase(bool)
void
Efface ou restaure l'objet
UpgradeOpen()
void
Met à niveau l'objet de lecture à écriture
DowngradeOpen()
void
Rétrograde l'objet d'écriture à lecture
Cancel()
void
Annule les modifications apportées à l'objet
CreateExtensionDictionary()
ObjectId
Crée un dictionnaire d'extension
GetRXClass()
RXClass
Obtient les informations de classe d'exécution
Dispose()
void
Libère l'objet
Exemples de Code
Exemple 1: Obtenir des Informations sur l'Objet
using(Transactiontr=db.TransactionManager.StartTransaction()){DBObjectobj=tr.GetObject(objectId,OpenMode.ForRead);ed.WriteMessage("\n=== Informations sur l'Objet ===");ed.WriteMessage($"\nType : {obj.GetType().Name}");ed.WriteMessage($"\nObjectId : {obj.ObjectId}");ed.WriteMessage($"\nHandle : {obj.Handle}");ed.WriteMessage($"\nBase de Données : {obj.Database.Filename}");ed.WriteMessage($"\nPropriétaire : {obj.OwnerId}");ed.WriteMessage($"\nEst Effacé : {obj.IsErased}");ed.WriteMessage($"\nEst Modifié : {obj.IsModified}");ed.WriteMessage($"\nEst Nouveau : {obj.IsNewObject}");tr.Commit();}
Exemple 2: Ouvrir des Objets pour Lecture et Écriture
using(Transactiontr=db.TransactionManager.StartTransaction()){// Ouvrir pour lectureDBObjectobj=tr.GetObject(objectId,OpenMode.ForRead);ed.WriteMessage($"\nLecture activée : {obj.IsReadEnabled}");ed.WriteMessage($"\nÉcriture activée : {obj.IsWriteEnabled}");// Mettre à niveau vers écritureobj.UpgradeOpen();ed.WriteMessage($"\nAprès mise à niveau - Écriture activée : {obj.IsWriteEnabled}");// Faire des modifications...if(objisEntityent){ent.ColorIndex=1;// Changer en rouge}// Rétrograder vers lectureobj.DowngradeOpen();ed.WriteMessage($"\nAprès rétrogradation - Écriture activée : {obj.IsWriteEnabled}");tr.Commit();}
using(Transactiontr=db.TransactionManager.StartTransaction()){Entityent=tr.GetObject(entityId,OpenMode.ForWrite)asEntity;// Sauvegarder couleur originaleshortoriginalColor=ent.ColorIndex;ed.WriteMessage($"\nCouleur originale : {originalColor}");// Faire des modificationsent.ColorIndex=1;// Rougeed.WriteMessage($"\nCouleur changée à : {ent.ColorIndex}");// Annuler les modificationsent.Cancel();ed.WriteMessage($"\nAprès annulation : {ent.ColorIndex}");// Ne pas valider - les modifications sont annuléestr.Abort();}
Exemple 7: Obtenir les Informations de Classe d'Exécution
using(Transactiontr=db.TransactionManager.StartTransaction()){DBObjectobj=tr.GetObject(objectId,OpenMode.ForRead);RXClassrxClass=obj.GetRXClass();ed.WriteMessage("\n=== Info Classe Exécution ===");ed.WriteMessage($"\nNom Classe : {rxClass.Name}");ed.WriteMessage($"\nNom DXF : {rxClass.DxfName}");ed.WriteMessage($"\nNom App : {rxClass.AppName}");// Vérifier hiérarchie de classeRXClassparent=rxClass.MyParent;while(parent!=null){ed.WriteMessage($"\nParent : {parent.Name}");parent=parent.MyParent;}tr.Commit();}
Exemple 8: Itérer à Travers Tous les Objets de la Base de Données
using(Transactiontr=db.TransactionManager.StartTransaction()){// Itérer à travers tous les objets dans la base de donnéesDictionary<string,int>objectCounts=newDictionary<string,int>();// Obtenir toutes les entités dans l'espace objetBlockTablebt=tr.GetObject(db.BlockTableId,OpenMode.ForRead)asBlockTable;BlockTableRecordmodelSpace=tr.GetObject(bt[BlockTableRecord.ModelSpace],OpenMode.ForRead)asBlockTableRecord;foreach(ObjectIdobjIdinmodelSpace){DBObjectobj=tr.GetObject(objId,OpenMode.ForRead);stringtypeName=obj.GetType().Name;if(objectCounts.ContainsKey(typeName))objectCounts[typeName]++;elseobjectCounts[typeName]=1;}ed.WriteMessage("\n=== Compte Types d'Objets ===");foreach(varkvpinobjectCounts.OrderByDescending(x =>x.Value)){ed.WriteMessage($"\n{kvp.Key} : {kvp.Value}");}tr.Commit();}
Exemple 9: Comparer des Objets par Handle
using(Transactiontr=db.TransactionManager.StartTransaction()){DBObjectobj1=tr.GetObject(objectId1,OpenMode.ForRead);DBObjectobj2=tr.GetObject(objectId2,OpenMode.ForRead);// Comparer par ObjectIdboolsameById=obj1.ObjectId==obj2.ObjectId;// Comparer par HandleboolsameByHandle=obj1.Handle==obj2.Handle;ed.WriteMessage($"\nIdentique par ObjectId : {sameById}");ed.WriteMessage($"\nIdentique par Handle : {sameByHandle}");ed.WriteMessage($"\nObj1 Handle : {obj1.Handle}");ed.WriteMessage($"\nObj2 Handle : {obj2.Handle}");tr.Commit();}
Exemple 10: Trouver le Propriétaire de l'Objet
using(Transactiontr=db.TransactionManager.StartTransaction()){DBObjectobj=tr.GetObject(objectId,OpenMode.ForRead);ed.WriteMessage("\n=== Chaîne de Propriété de l'Objet ===");ed.WriteMessage($"\nObjet : {obj.GetType().Name} ({obj.Handle})");// Remonter la chaîne de propriétéObjectIdcurrentOwnerId=obj.OwnerId;intlevel=1;while(!currentOwnerId.IsNull){DBObjectowner=tr.GetObject(currentOwnerId,OpenMode.ForRead);ed.WriteMessage($"\n{newstring(' ',level*2)}Propriétaire {level} : {owner.GetType().Name} ({owner.Handle})");currentOwnerId=owner.OwnerId;level++;// Empêcher les boucles infiniesif(level>10)break;}tr.Commit();}
Cycle de Vie de l'Objet
Création
Créer une nouvelle instance d'objet
Ajouter au conteneur (BlockTableRecord, SymbolTable, Dictionary, etc.)
Appeler Transaction.AddNewlyCreatedDBObject()
Valider la transaction
Modification
Ouvrir l'objet avec OpenMode.ForWrite
Modifier les propriétés
Valider la transaction (ou appeler Cancel() pour annuler)
Suppression
Ouvrir l'objet avec OpenMode.ForWrite
Appeler Erase() pour la suppression logicielle
Valider la transaction
Appeler Erase(false) pour restaurer si nécessaire
Modes d'Ouverture
Mode
Description
Usage
ForRead
Accès lecture seule
Interrogation de propriétés, pas de modifications
ForWrite
Accès lecture et écriture
Modification de propriétés, effacement
ForNotify
Notification seulement
Notifications de réacteur
Meilleures Pratiques
Toujours Utiliser des Transactions : Ne jamais travailler avec des DBObjects en dehors des transactions
Ouvrir avec le Mode Correct : Utilisez ForRead quand c'est possible pour éviter le verrouillage
Mettre à Niveau Si Nécessaire : Utilisez UpgradeOpen() pour passer de lecture à écriture
Libérer Correctement : Laissez les transactions gérer la libération, ou utilisez des instructions using
Vérifier IsErased : Vérifiez que l'objet n'a pas été supprimé avant d'y accéder
Gérer les Exceptions : Enveloppez les opérations de base de données dans des blocs try-catch
Utiliser des Handles pour la Persistance : Les handles persistent entre les sessions, les ObjectIds non
Dictionnaires d'Extension : Utilisez pour le stockage de données personnalisées sur les objets
Vérifier le Propriétaire : Comprenez la propriété de l'objet avant d'effacer
Objets Associés
Entity - Classe dérivée pour les objets graphiques
DBDictionary - Classe dérivée pour les dictionnaires
XRecord - Classe dérivée pour les données personnalisées