Fonction d'ajout d'entité à l'espace objet

void Ajoute_Entite (AcDbEntity* Entite, AcDbObjectId& Id_Retour)

Entite Entrée, pointeur vers l'entité à ajouter (ne doit pas être NULL).
Id_Retour Sortie, identificateur (objectId) de l'entité ajoutée.

Cette fonction ajoute une entite (Entite) à l'espace objet du dessin en cours.
Si l'opération est un succès, alors Id_Retour est initialisé à l'identificateur de l'entité nouvellement ajoutée.


void Ajoute_Entite (AcDbEntity* Entite, AcDbObjectId& Id_Retour)
{
      AcDbBlockTable* TableBD = NULL;            // Pointeur pour la table des blocs.
      AcDbBlockTableRecord* EnregBD = NULL; // Pointeur pour le bloc Espace Objet de la Table des blocs.
      Id_Retour = AcDbObjectId::kNull;

      //Récupération du dessin courant
      AcDbDatabase* Dessin_Courant = acdbHostApplicationServices()->workingDatabase();
      if ( Dessin_Courant == NULL )
      {
            acedAlert ( "Erreur d'accès au dessin courant." );
            return;
      }
      // On utilise la fonction membre getSymbolTable de la classe AcDbDatabase (le dessin)
      // pour ouvrir la table des blocs en lecture.
      if ( Dessin_Courant->getSymbolTable ( TableBD, AcDb::kForRead) != Acad::eOk )
      {
            acutPrintf ( "\nImpossible d'ouvrir la Table des Blocs." );
            return;
      }
      //TableBD contient maintenant l'adresse de la Table des blocs.
      //On utilise TableBD pour ouvrir l'enregistrement Espace Objet en écriture.
      if (TableBD->getAt ( ACDB_MODEL_SPACE, EnregBD,AcDb::kForWrite ) != Acad::eOk )
      {
            acutPrintf ( "\nImpossible d'ouvrir le bloc Espace Objet." );
            TableBD->close();
            return ;
      }
      //On ferme la table des blocs, on a plus besoin.
      if ( TableBD->close() != Acad::eOk )
      {
            acutPrintf ( "\nProblème de fermeture de la Table des blocs." );
            return ;
      }
      //On ajoute la nouvelle entité à l'espace objet (EnregBD).
      if ( EnregBD->appendAcDbEntity (Id_Retour,Entite) != Acad::eOk)
      {
            acutPrintf ( "\nImpossible d'ajouter l'entité.");
            EnregBD->close();
            return ;
       }
      //On ferme EnregBD et l'entité.
      if (EnregBD->close() != Acad::eOk )
      {
            acutPrintf ( "\nProblème de fermeture de l'espace Objet." );
      }
      if ( Entite->close() != Acad::eOk )
      {
            acutPrintf ( "\nProblème de fermeture de l'entité." );
      }
}

www.cadfr.com  

Exemple d'utilisation de la fonction : Ajoute_Entite.
Ce code démontre comment utiliser la fonction Ajoute_Entite pour ajouter une ligne
à l'espace objet du dessin en cours (ce code doit être inclus à l'intérieur d'une
structure d'application d'ObjectARX pour fonctionner):

// Déclaration d'un couple de points
AcGePoint3d PtDepart (10.0, 10.0, 0.0);
AcGePoint3d PtFin (50.0, 50.0, 0.0);

AcDbLine *LaLigne = new AcDbLine ( PtDepart, PtFin);
AcDbObjectId LaLigneId;
Ajoute_Entite (LaLigne,LaLigneId);
if ( LaLigneId == AcDbObjectId::kNull)
{
      acedAlert ( "Problème d'ajout de la ligne!");
      delete LaLigne;
      return;
}