AutoCAD .NET API : exporter des entités dans un DXF

Pour un projet, je dois exporter certaines entités dans un fichier DXF. Sur la classe DBObject, il y a une méthode DxfOut qui semblerait adaptée mais elle prend en argument un objet de la classe DxfFiler qu'on ne sait pas créer (son constructeur prend en argument un pointeur). Donc il faut trouver une approche alternative. Par exemple, utiliser une "side database" sur lequel on a une autre méthode DxfOut :

[CommandMethod("WIIPDXFOUT")]
public void DxfOut()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;
    Database db = doc.Database;
    Editor ed = doc.Editor;

    PromptEntityResult per = ed.GetEntity("\nSélectionnez une entité: ");
    if (per.Status == PromptStatus.Cancel) return;

    using (Transaction tr = db.TransactionManager.StartTransaction())
    {
        DBObject dbo = per.ObjectId.GetObject(OpenMode.ForRead);

        using (var dxfDb = new Database(true, true))
        {
            dxfDb.WblockCloneObjects(new ObjectIdCollection(new []{per.ObjectId}),
                SymbolUtilityServices.GetBlockModelSpaceId(dxfDb), new IdMapping(), 
                DuplicateRecordCloning.Ignore,  false);
            dxfDb.DxfOut(Path.Combine(Path.GetTempPath(), dbo.Handle + ".dxf"), 
                7, DwgVersion.AC1009 /* AutoCAD R12 */);
        }

        tr.Commit();
    }
}

On copie les entités de la base de données du document actif vers la base de données temporaire avec WblockCloneObjects. Notez que la commande copie l'entité dans espace objet, si vous voulez copier des entités dans l'espace papier, il faudra adapter le code en conséquence.

Etiquettes:

Ajouter un commentaire