Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

Je désire concevoir une application windows forms en vb net

qui pourra lancer autoCAD et executer des instructions.

Le lien suivant semble se rapprocher de mes volontés mais

cette "fonction" ne marche qu'en interne à AutoCAD (si je comprends bien) :

 

Out-of-Process

 

moi je veux la même chose mais externe au processus AutoCAD.

Merci d'avance

Phil

Posté(e)

Salut,

 

Tu peux faire la même chose depuis une application extérieure (sans l'attribut CommandMethod).

Utilise la liaison tardive si tu veux éviter d'avoir à référencer les bibliothèques COM qui sont dépendantes de la version d'AutoCAD et de la plateforme.

Une méthode consiste à développer/déboguer en référençant les bibliothèques pour avoir l'aide de l'intellisense, puis de remplacer tous les types AutoCAD* par Object en VB ou dynamic en C#.

  Dim acAppComObj As Object
 Dim strProgId As String = "AutoCAD.Application"

 

PS: utilise un 'Try/Catch' plutôt que le 'On Error Resume Next/If Err.Number > 0 Then' donné dans l'exemple.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Ok

merci pour la réponse

AutoCAD se lance bien. Mais comment faire pour que autocad se lance

avec un document déterminé à l'avance par mon fichier exe et attendre

que celui soit chargé complètement avant de lancer des "sendcommand" dans

ce dessin rendu courant.

a+ Phil

Posté(e)

Pour ouvrir un document, utilise Application.Documents.Open()

pour être sûr qu'autoCAD est initialisé, tu peux faire un Try/Catch dans une boucle While.

 

Un exemple:

        static void RunAcad()
       {
           dynamic acApp = null;
           const string strProgId = "AutoCAD.Application";
           try
           {
               acApp = Marshal.GetActiveObject(strProgId);
           }
           catch
           {
               try
               {
                   acApp = Activator.CreateInstance(Type.GetTypeFromProgID(strProgId), true);
               }
               catch
               {
                   MessageBox.Show("Impossible de créer une instance de 'AutoCAD.Application'.");
                   return;
               }
           }
           try
           {
               if (acApp != null)
               {
                   while (true)
                   {
                       try { acApp.Visible = true; break; }
                       catch { }
                   }
                   dynamic docs = acApp.Documents;
                   docs.Open(@"F:\TestImport.dwg");
                   dynamic doc = acApp.ActiveDocument;
                   doc.SendCommand("_circle 0,0 10 ");
                   doc.SendCommand("_zoom _extents ");
                   doc.Regen(0);
               }

           }
           catch (System.Exception ex)
           {
               MessageBox.Show("Erreur: " + ex.Message);
           }
       }

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Est-il possible d'avoir accès au contenu du fichier dwg ainsi ouvert.

il semble que l'utilisation de "Database" et "Transaction" provoque

un plantage.

A+

Phil

Posté(e)

Une application externe (out of process), ne peut que passer par l'interface COM. L'API AutoCAD .NET travaille unique "in process".

Donc, soit tu continues avec COM et l'objet AcadDocument ; soit, si tu veux utiliser l'API .NET, tu charges une DLL .NET avec (SendCommand("_netload appli.dll ") et tu lances les commandes définies dans cette appli toujours avec SendCommand.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é