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.
Besoin d'un développement spécifique pour AutoCAD ?
Développement de compléments à AutoCAD et aux autres logiciels Autodesk (AutoCAD Electrical, AutoCAD Mechanical, Inventor, Revit, Vault, Navisworks...). C#/VB/.NET, C++/ObjectARX, AutoLISP, VBA.
Migration de vos projets VBA en .NET, intégration RealDWG dans vos applications, développement sur plateforme AutoCAD OEM et Inventor OEM.
Assistance technique AutoCAD, Inventor, Revit, Vault.
Maxence DELANNOY - Tél. : 06.46.40.75.66 - maxence.delannoy@wiip.fr
|