PhilBat Posté(e) le 3 avril 2013 Posté(e) le 3 avril 2013 Bonjour à tous,Je désire concevoir une application windows forms en vb netqui pourra lancer autoCAD et executer des instructions.Le lien suivant semble se rapprocher de mes volontés maiscette "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'avancePhil
(gile) Posté(e) le 3 avril 2013 Posté(e) le 3 avril 2013 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
PhilBat Posté(e) le 3 avril 2013 Auteur Posté(e) le 3 avril 2013 Okmerci pour la réponseAutoCAD se lance bien. Mais comment faire pour que autocad se lanceavec un document déterminé à l'avance par mon fichier exe et attendreque celui soit chargé complètement avant de lancer des "sendcommand" dansce dessin rendu courant.a+ Phil
(gile) Posté(e) le 3 avril 2013 Posté(e) le 3 avril 2013 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
PhilBat Posté(e) le 4 avril 2013 Auteur Posté(e) le 4 avril 2013 Est-il possible d'avoir accès au contenu du fichier dwg ainsi ouvert.il semble que l'utilisation de "Database" et "Transaction" provoqueun plantage.A+Phil
(gile) Posté(e) le 4 avril 2013 Posté(e) le 4 avril 2013 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
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