Aller au contenu

VB.net Contrôler si autocad est ouvert


stugeol

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

VB

Imports 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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines aprè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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité