stugeol Posté(e) le 13 février 2013 Posté(e) le 13 février 2013 Bonjour,Aprés la programmation de divers applications en VB.net sous windows, je veux développez une application interactive avec Autocad.Comment faire pour savoir si Autocad est ouvert?Comment faire pour lister les documents ouverts?Comment faire pour activer un documents? Je vous remercie par avance.Cordialement. Petit à petit on devient moins petit
(gile) Posté(e) le 13 février 2013 Posté(e) le 13 février 2013 Salut, Si je comprends bien, tu veux faire une application externe à AutoCAD (exe).Comment faire pour savoir si Autocad est ouvert?La méthode statique System.Diagnostics.Process.GetProcessesByName() retourne une liste des processus en cours pour le nom spécifié, donc si Process.GetProcessesByName("acad").Length est supérieur à 0 c'est qu'il y a au moins un processus AutoCAD en cours. Comment faire pour lister les documents ouverts?Il faut d'abord accéder à l'application AutoCAD. Ceci ne peut se faire depuis l'extérieur que par l'interface COM, il faut donc référencer Autodesk.AutoCAD.Interop (et peut-être Autodesk.AutoCAD.Interop.Common) pour la version d'AutoCAD et la plateforme ciblée.Une fois obtenu un objet AcadApplication, celui-ci a une propriété documents qui contient les documents ouverts. Comment faire pour activer un documents?L'objet AcadApplication a une propriété ActiveDocument à laquelle on peut affecter un document via la méthode Item() de la classe Documents. Un petit exemple d'application Console (ça pourrait être un formulaire Windows) qui teste l'existence d'un ou plusieurs processus AutoCAD.exe, obtient l'application AutoCAD (ici 2013) si un processus est trouvé, liste les documents ouverts et rend "Dessin1.dwg" actif si celui-ci fait parti des documents ouverts. C#using System; using System.Runtime.InteropServices; using Autodesk.AutoCAD.Interop; namespace StandAloneApplication { class Program { static void Main() { System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName("acad"); if (procs.Length > 0) { bool hasDrawing = false; AcadApplication acadApp = (AcadApplication)Marshal.GetActiveObject("AutoCAD.Application.19"); foreach (AcadDocument doc in acadApp.Documents) { Console.WriteLine(doc.Name); if (doc.Name == "Dessin1.dwg") { hasDrawing = true; } } if (hasDrawing) { acadApp.ActiveDocument = acadApp.Documents.Item("Dessin1.dwg"); } } } } } VBImports System.Runtime.InteropServices Imports Autodesk.AutoCAD.Interop Namespace StandAloneApplication Class Program Private Shared Sub Main() Dim procs As System.Diagnostics.Process() = System.Diagnostics.Process.GetProcessesByName("acad") If procs.Length > 0 Then Dim hasDrawing As Boolean = False Dim acadApp As AcadApplication = DirectCast(Marshal.GetActiveObject("AutoCAD.Application.19"), AcadApplication) For Each doc As AcadDocument In acadApp.Documents Console.WriteLine(doc.Name) If doc.Name = "Dessin1.dwg" Then hasDrawing = True End If Next If hasDrawing Then acadApp.ActiveDocument = acadApp.Documents.Item("Dessin1.dwg") End If End If End Sub End Class End Namespace Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
stugeol Posté(e) le 26 février 2013 Auteur Posté(e) le 26 février 2013 Ces dernier temps je suis un peut en stand by.Je te remercie Gile pour toutes ces informations (Avec un peut de retard).Cordialement. Petit à petit on devient moins petit
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant