Aller au contenu

Plugin Electrical avec Ruban pour l'entreprise


Daiz

Messages recommandés

Bonjour,

 

Je suis ravi d'avoir trouver CADxp car ça fait longtemps que je cherche un site dédié à AutoCAD où je peux trouver des développeurs.

 

Depuis 6 ans, j'utilise AutoCAD et j'ai la chance de travailler avec AutoCAD Electrical 2015. Je suis également passionné d'informatique depuis 10 ans.

 

Je souhaite aujourd'hui développer un plugin digne de ce nom ("Plugin.bundle") pour intégrer le processus qualité de ma société dans AutoCAD et faciliter le travail sur de grosses affaires (20 Go de fichiers Word, Excel, PDF et DWG indicés). Ma société travaille avec 4 ou 5 profils de clients.

 

J'ai développé une application en Java (et Swing) qui convertit nos liste d'E/S automate en fichier Excel pour créer nos folios de cartes automate en automatique avec Electrical.

 

Aujourd'hui je passe à l'étape supérieure : Ajouter un élément au ruban personnalisé qui intègre ce développement. Puis, progressivement, ajouter de nouvelles fonctionnalités.

 

Mais je suis une bille en .NET ! En parcourant la toile, j'ai dû me faire un noeud au cerveau... en passant...

 

Ma première question est simple : Quel est le principe de fonctionnement du fichier myPlugin.cs ? Quelle partie de mon code est managée, non-managée au sein de mon projet ?

 

Merci par avance

 

Daiz

Lien vers le commentaire
Partager sur d’autres sites

Salut et bienvenue,

 

Typiquement, une application .NET pour AutocAD est une DLL qui utilise l'API .NET d'AutoCAD pour définir de nouvelles commandes ou fonction LISP et/ou initialiser certains comportements via des getionnaires d'évènements.

 

Si je comprends bien ce que tu veux faire (mais je ne connais pas Electrical ni Java et ne sais donc pas comment ton application est liée à AutoCAD), tu voudrais créer un plug-in pour lancer une ou plusieurs applications extérieures (des EXEs, j'imagine) depuis le ruban d'AutoCAD.

 

Si c'est bien le cas, je pense que tu n'as pas besoin d'utiliser .NET, une expression LISP avec la fonction startapp devrait suffire. Essaye, depuis AutoCAD, de lancer l'expression suivante (après avoir changé le chemin de l'application, bien sûr) :

(startapp "C:\\Dossier Appli\\Appli.exe")

Si ça fonctionne comme tu veux, construire le plug-in devrait être simple.

Depuis AutoCAD, tu crées un CUIX partiel dans lequel tu définis ton ruban avec une ou plusieurs nouvelles commandes utilisant des expressions LISP similaires à celle ci-dessus.

Exemple de macro de commande : C^C^(startapp "Appli.exe")

 

Puis tu construit ton dossier Appli.bundle en plaçant le CUIX partiel et les assemblies nécessaires au fonctionnement dans le même dossier (typiquement Appli.bundle\Contents) Tu définis dans le fichier PackageContents.xml le chargement automatique du CUIX. Ça devrait suffire.

  • Upvote 1

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile) et merci de ta réponse.

 

J'ai déjà créé un cuix contenant mon ruban partiel à l'aide du tuto d'Autodesk. Il faut que je vérifie l'architecture de mon bundle car le ruban n'est pas modifié au démarrage d'AutoCAD. Je ne veux pas utiliser NETLOAD d'ailleurs. Je veux faire les choses bien :)

 

Je ne veux pas faire d'appel d'exe en fait, je souhaite apprendre le .NET et donc... reprendre le code en C#.

Lien vers le commentaire
Partager sur d’autres sites

Je ne veux pas faire d'appel d'exe en fait, je souhaite apprendre le .NET et donc... reprendre le code en C#.

 

OK, j'avais mal compris.

 

Si tu viens de Java, tu ne devrais pas avoir trop de mal, l'architecture de .NET est largement inspirée de celle de Java (le CLR de .NET est en gros l'équivalent de la machine virtuelle de Java) et la syntaxe de C# proche de celle de Java.

Reste à apprendre l'API .NET d'AutoCAD (et peut-être celle spécifique à Electrical).

 

Quelques conseils :


     
  • Télécharger et installer Visual Studio (si ce n'est déjà fait) . Les versions Express (gratuites) sont généralement suffisantes (VS2010, VS2012, VS2013). Si besoin, faire quelques tutos dans l'environnement Windows (hors AutoCAD) pour se familiariser avec l'IDE.
  • Télécharger les versions d'ObjectARX correspondant aux versions d'AutoCAD ciblées (pour les versions antérieures à 2013, je peux peut-être te les fournir), on y trouve une documentation qui, quoique souvent sommaire, est la seule à exister, des exemples de code, ainsi que les librairies AutoCAD à référencer dans les projets.
  • Se construire un ou plusieurs modèles de projet AutoCAD pour Visual Studio. Outre le fait que ces modèles permettront de démarrer des projets plus facilement, ces tutos, à mon avis, aident à comprendre la structure d'un peojet Visual Studio.
  • Faire les rares tutoriels qui existent pour AutoCAD .NET : AutoCAD 201X .NET Training et My First AutoCAD Plug-in sur cette page. Je recommande plutôt le premier qui est plus progressif et couvre plus de fonctionnalités, le second est plus centré sur une API particulière (Overrule) qui est loin d'être la plus simple à appréhender.
  • Consulter AutoCAD .NET Developper's Guide où les fonctionnalités de base sont décrites avec des exemples.
  • Ne pas hésiter à poser des questions dans le forum approprié, nous ne sommes pas si nombreux à utiliser .NET, mais je n'ai pas souvenir d'une question sans (tentative de) réponse.

  • Upvote 1

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse complète (elle va me service de guide)

 

J'ai déjà fait un petit tour de ces pages avant de poster une question bête sur le forum. Et je ferai attention où je la posterai, promis :P

 

Equipé de VS2013, j'ai installé ObjectARX qui ne contient plus grand chose dans /inc. J'ai donc configuré mes références AutoCAD pour Autodesk/AutoCAD 2015/[...]

 

Ce qui me manque finalement c'est des modèles de départ un peu plus "fournis". Mais tous les projets que j'ai croisé n'utilisent que myCommands.cs qui s'instancie une fois par document (ce que je ne souhaite pas) et encore rien pour myPlugin.cs

Lien vers le commentaire
Partager sur d’autres sites

Ce qui me manque finalement c'est des modèles de départ un peu plus "fournis". Mais tous les projets que j'ai croisé n'utilisent que myCommands.cs qui s'instancie une fois par document (ce que je ne souhaite pas) et encore rien pour myPlugin.cs

 

Une DLL .NET chargée dans AutoCAD pour la session.

Si tu veux que des membres d'une classe soient partagés par tous les documents (y compris ceux ouverts ultérieurement), il suffit de les qualifier de static. Ceci concerne aussi les méthodes qui définissent des commandes.

 

Tu peux essayer le code suivant (inspiré de ce sujet).

 

using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices.Application;

[assembly: CommandClass(typeof(CommandSample.LocalCommand))]
[assembly: CommandClass(typeof(CommandSample.GlobalCommand))]

namespace CommandSample
{
   public class LocalCommand
   {
       private int cnt1 = 0;
       private static int cnt2 = 0;

       [CommandMethod("local")]
       public void Local()
       {
           Editor ed = AcAp.DocumentManager.MdiActiveDocument.Editor;
           ed.WriteMessage("\nValeur locale : {0} valeur globale = {1}", cnt1++, cnt2++);
       }
   }

   public static class GlobalCommand
   {
       private static int cnt = 0;

       [CommandMethod("global")]
       public static void Global()
       {
           Editor ed = AcAp.DocumentManager.MdiActiveDocument.Editor;
           ed.WriteMessage("\nValeur : {0}", cnt++);
       }
   }
}

Dans la classe LocalCommand, deux champs de type int sont initialisés dont un (cnt2) est qualifié de static. Dans la classe GlobalCommand, la méthode qui définit la commande GLOBAL est qualifiée de static, elle ne peut utiliser que des membres eux même qualifié de static. Les deux commandes font la même chose : afficher la valeur des champs et les incrémenter.

Exécuter les commandes dans un dessin, puis dans un autre montre clairement la différence de comportement entre les champs static qui conservent leur valeur d'un dessin à l'autre et le champ non static qui est réinitialisé à 0 à chaque nouveau dessin.

 

 

Si tu veux des modèles "plus fournis", tu peux, à partir du tutoriel "Créer un modèle C# pour AutoCAD avec Visual Studio Express" te créer d'autres modèles aussi "fournis" que tu veux.

 

Quand tu parles de "myCommand.cs" et "myPlugin.cs", j'imagine que tu veux parler des classes générées par "AutoCAD .NET Wizards".

La classe "myPlugin.cs" est simplement une classe qui implémente l'interface IExtensionApplication. Celle-ci est utilisée pour initialiser des données et/ou des fonctionnalités au chargement du projet comme des menus contextuels ou, plus couramment, des gestionnaires d'évènements. Un exemple ici.

  • Upvote 1

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Bin simplement merci pour ton travail et les différents partages présents sur le forum.

 

Tu as exorcisé pas mal de mes interrogations car je faisais quelques confusions.

 

Merci encore.

 

Je partagerai dans la section ObjectARX/DBX, C++, .NET, RealDWG des bouts de code

 

J'ai déjà quelques classes métier dont une fabrique qui utilise le code http://msdn.microsoft.com/fr-fr/library/bb513869.aspx

Lien vers le commentaire
Partager sur d’autres sites

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é