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;
}