Classement
Contenu populaire
Affichage du contenu avec la meilleure réputation le 26/05/2014 dans toutes les zones
-
Salut, Tout d'abord, qu'on soit bien d'accord sur le vocabulaire, en jargon .NET, un assembly représente une DLL (ou un EXE) ce qui correspond à un projet Visual Studio. Le projet peut contenir plusieurs fichiers de code source .cs (une convention voudrait un fichier par classe, mais il est tout à fait possible de définir plusieurs classes dans un même fichier). Concernant ton problème, avant d'utiliser le bundle pour le chargement automatique, as-tu testé ton code en le lançant depuis Visual studio ? L'initialisation et la commande fonctionnent-elle bien dans ce contexte ? Si ce n'est pas le cas, débogue ton code avant de t'occuper de CUIX et de chargement automatique. Ensuite, à propos du bundle, tu peux déjà supprimer le noeud du fichier PackageContents.xml. Ce noeud n'est utile que si on utilise LoadOnCommandInvocation="True". Sinon, as tu essayé de lancer la commande en entrant son nom ? Si elle démarre depuis la ligne de commande et pas depuis le ruban, le problème vient du CUIX.1 point
-
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.1 point
-
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.1 point
-
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.1 point
