Vous êtes sur la page 1sur 8

Crer un modle VB pour AutoCAD avec Visual Studio Express

L'objectif de ce tutoriel est de montrer comment crer un modle de dmarrage d'un nouveau projet VB pour AutoCAD dans Visual Studio E press! modle permettant de lancer automati"uement AutoCAD en c#argeant la DLL depuis Visual Studio en mode Debug$ L'e emple montr utilise Visual Studio E press %&'% pour (indo)s Des*top mais il est facilement transposable pour les versions antrieures +Visual Basic E press %&'& ou %&&,-$ .l / sera cr un modle pour AutoCAD %&'0 mais l1 encore il est possible de transposer pour cibler d'autres versions d'AutoCAD$ Le c#emin du rpertoire de sortie pour le mode Debug utilis dans l'e emple est celui par dfaut +$2bin2debug-$

Dmarrer un nouveau projet


Dans Visual Studio! c#oisir le langage Visual Basic +inutile avec les versions %&'& ou %&&,- et le t/pe de projet 3 Bibliothque de classes$ 4enommer le projet 3 AcadVb%&'0 par e emple! et c#anger le c#emin de l'emplacement comme dsir$

Gilles Chanteau

Spcifier le Framework cibl


5uvrir la fen6tre proprit du projet 3 dans l'e plorateur de solutions! slectionner le projet AcadVb%&'0! puis clic droit et Proprits ou cli"uer sur l'ic7ne en forme de cl plate +VS %&'% uni"uement-$ Dans la fen6tre de Proprits! onglet Application! c#oisir le 8rame)or* cible dans la liste droulante$

.l est prfrable de cibler la version du 8rame)or* correspondant 1 celle installe par la version d'AutoCAD pour la "uelle le modle est cr 3 AutoCAD %&&9 1 %&&: 3 $;E< 8rame)or* %$& AutoCAD %&'& 1 %&'' 3 $;E< 8rame)or* 0$= AutoCAD %&'% 1 %&'> 3 $;E< 8rame)or* >$&

Avec les versions prcdentes de Visual Studio! pour spcifier le 8rame)or* 3 depuis l'onglet Compiler! cli"uer sur Options avances de compilation et dans la boite de dialogue Paramtres avancs du compilateur c#oisir le 8rame)or* dans la liste droulante Framework cible (toutes les con i!urations"$

Ajouter les bibliothques AutoCAD


Dans la fen6tre Proprits du projet! c#oisir l'onglet # rences et cli"uer sur Parcourir$$$ Les rfrences 1 ajouter se trouvent dans le rpertoire d'installation de la version cible d'AutoCAD ou! mieu ! dans le dossier 5bjectA4?%&@@2inc correspondant 1 la version d'AutoCAD cible +incA)in0% ou incA B> suivant
Gilles Chanteau

les versions d'AutoCAD et la plateforme du poste utilis-$ 5n peut tlc#arger les dernires version d'5bjectA4? sur cette page 3 #ttp3CCusa$autodes*$comCads*CservletCitemDsite.DE'%0''%FidE9,===& C#oisir les bibliot#"ues les plus couramment utilises +il sera facile d'en ajouter d'autres de la m6me manire si la cration du nouveau projet le re"uiert-$ AutoCAD %&&9 1 %&'% 3 AcDbGgd$dll et AcGgd$dll AutoCAD %&'0C%&'> 3 AcCoreGgd$dll! AcDbGgd$dll et AcGgd$dll

Gettre la proprit Copie locale de ces DLLs sur False 3

Avec Visual Studio %&'%! 1 moins d'avoir cibl le 8rame)or* >$=! dans les %spaces de nom imports! dcoc#er l'espace de nom 3 S/stem$<#reading$<as*s$

Ajouter une bauche de code


4enommer la classe cre par Visual Studio 3 Class& avec un nom plus e plicite! Commands par e emple!
Gilles Chanteau

depuis l'e plorateur de solution$ Hne boite de dialogue propose de renommer toutes les rfrences 1 Class& dans le projet! rpondre Oui$ 5uvrir la classe Commands dans l'diteur de code par double clic sur Commands dans l'e plorateur de solution$ Ajouter les instructions 'mports pour importer les espaces de nom AutoCAD les plus couramment utiliss et! ventuellement! un alias pour la classe Autodes*$AutoCAD$ApplicationServices$Application$ Ajouter "uel"ues lignes de codes usuelles pour dfinir une commande AutoCAD 3
Imports Imports Imports Imports Imports Imports Autodesk.AutoCAD.ApplicationServices Autodesk.AutoCAD.DatabaseServices Autodesk.AutoCAD.EditorInput Autodesk.AutoCAD.Geometry Autodesk.AutoCAD.Runtime AcApp = Autodesk.AutoCAD.ApplicationServices.Application

Namespace AcadVb !"# $ublic Class Commands %Command&et'od()*est)+, $ublic Sub *est(+ Dim doc As Document = AcApp.Document&ana.er.&diActiveDocument Dim db As Database = doc.Database Dim ed As Editor = doc.Editor /sin. tr As *ransaction = db.*ransaction&ana.er.Start*ransaction(+ tr.Commit(+ End /sin. End Sub End Class End Namespace

Inrer la solution pour contr7ler l'absence d'erreur +8B! galement 89 avec Visual Studio %&'%-$

Ajouter un script pour charger l application au dmarrage d AutoCAD


Depuis l'e plorateur de solutions! faire un clic droit sur le projet AcadVb%&'0 puis A(outer et )ouvel lment$$$ +CtrlJGajJA-$ Dans la boite dialogue A(outer un nouvel lment! c#oisir 3 Fichier te*te$ 4enommer le fic#ier 3 start$scr et cli"uer sur A(outer$ Le fic#ier s'ouvre dans la fen6tre d'dition! ajouter l'instruction suivante sans oublier une espace 1 la fin$
netload )..0..0bin0debu.0AcadVb !"#.dll)

Si le rpertoire de sortie pour le mode Debug a t modifi! c#anger le c#emin de la DLL en cons"uence$ Enregistrer le fic#ier start$scr$ Dans les proprits de start$scr +slectionner start$scr dans l'e plorateur de solutions-! mettre la proprit Copier dans le rpertoire sur +ou(ours copier$

Gilles Chanteau

!odifier le fichier de projet !S"uild pour lancer AutoCAD au dbogage


Les fic#iers de projet GSBuild +$vbproj- sont des fic#iers ml "ui dcrivent et contr7lent le processus de gnration des applications$ C'est dans ce fic#ier "ue doivent 6tre ajoutes les instructions "ui permettront de lancer AutoCAD depuis Visual Studio en mode dbogage et de c#arger la DLL au dmarrage d'AutoCAD$ Inrer la solution et fermer Visual Studio pour pouvoir modifier le fic#ier AcadVb%&'0$vbproj$ 5uvrir le fic#ier $2AcadVb%&'02AcadVb%&'02AcadVb%&'0$vbproj avec un diteur de te te +blocAnote! notepadJ J! etc$-$ Ajouter les nKuds suivants 1 la fin du nKud Propert,-roup correspondant 1 la gnration en mode Debug +le
Gilles Chanteau

deu ime nKud Propert,-roup du fic#ier-! aprs avoir modifi! si ncessaire! le c#emin du fic#ier acad$e e correspondant 1 la version d'AutoCAD cible et celui du fic#ier start$scr +le rpertoire de sortie pour le mode Debug-$
%StartAction,$ro.ram%1StartAction, %Start$ro.ram,C20$ro.ram 3iles0Autodesk0AutoCAD !"#0acad.e4e%1Start$ro.ram, %StartAr.uments,1nolo.o 1b )..0..0bin0debu.0start.scr)%1StartAr.uments,

.tartAction indi"ue "ue la gnration du projet doit lancer un programme +ce "ui n'est gnralement pas le cas avec une DLL-$ .tartPro!ram spcifie le programme 1 dmarrer! ici AutoCAD$ .tartAr!uments contient les arguments "ui vont lancer le script "ui c#argera la DLL$ Le nKud Propert,-roup devrait ressembler 1 La 3
%$ropertyGroup Condition=) 56(Con7i.uration+86($lat7orm+5 == 5Debu.8AnyC$/5 ), %Debu.Symbols,true%1Debu.Symbols, %Debu.*ype,7ull%1Debu.*ype, %De7ineDebu.,true%1De7ineDebu., %De7ine*race,true%1De7ine*race, %9utput$at',bin0Debu.0%19utput$at', %Documentation3ile,AcadVb !"#.4ml%1Documentation3ile, %No:arn,; !"<=;">>>=; !"?=; !"@=; !">=; !# =; !#<=; ! !=; ! "=; ! %1No:arn, %StartAction,$ro.ram%1StartAction, %Start$ro.ram,C20$ro.ram 3iles0Autodesk0AutoCAD !"#0acad.e4e%1Start$ro.ram, %StartAr.uments,1nolo.o 1b )..0..0bin0debu.0start.scr)%1StartAr.uments, %1$ropertyGroup,

Dans le nKud 'tem-roup se trouvent les rfrences ajoutes au projet$ Si le rpertoire de la solution est sur le m6me lecteur "ue celui dans le "uel se trouvent les DLLs rfrences +le rpertoire d'installation d'AutoCAD ou celui d'5bjectA4? %&@@-! les c#emins enregistrs sont relatifs$ Comme le modle sera e port dans un rpertoire diffrent de celui de la solution! il faut remplacer ces c#emins relatifs par les c#emins absolus$ Mar e emple! remplacer les c#emins relatifs suivant 3
%Re7erenceInclude=)AcCore&.d), %Aint$at',..0..0..0..0..0..0..09bBectARC %$rivate,3alse%1$rivate, %1Re7erence, %Re7erenceInclude=)AcDb&.d), %Aint$at',..0..0..0..0..0..0..09bBectARC %$rivate,3alse%1$rivate, %1Re7erence, %Re7erenceInclude=)Ac&.d), %Aint$at',..0..0..0..0..0..0..09bBectARC %$rivate,3alse%1$rivate, %1Re7erence, !"#0inc0AcCore&.d.dll%1Aint$at',

!"#0inc0AcDb&.d.dll%1Aint$at',

!"#0inc0Ac&.d.dll%1Aint$at',

Mar ceu Aci 3


%Re7erenceInclude=)AcCore&.d), %Aint$at',C209bBectARC !"#0inc0AcCore&.d.dll%1Aint$at', %$rivate,3alse%1$rivate, %1Re7erence, %Re7erenceInclude=)AcDb&.d),
Gilles Chanteau

%Aint$at',C209bBectARC !"#0inc0AcDb&.d.dll%1Aint$at', %$rivate,3alse%1$rivate, %1Re7erence, %Re7erenceInclude=)Ac&.d), %Aint$at',C209bBectARC !"#0inc0Ac&.d.dll%1Aint$at', %$rivate,3alse%1$rivate, %1Re7erence,

Enregister le fic#ier AcadVb%&'0$vbproj$

#$porter le modle
4Aouvrir la solution AcadVb%&'0$sln dans Visual Studio$ Lancer un dbogage +8=- pour contr7ler le bon fonctionnement$ AutocAD devrait s'ouvrir et affic#er en ligne de commande 3
Commande: netload Nom du fichier d'assemblage: "..\..\bin\debug\AcadVb2013.dll"

La boite de dialogue ciAdessous indi"ue une erreur dans le fic#ier AcadVb%&'0$vbproj

Le message d'erreur ciAdessous indi"ue soit un nom de DLL erron dans le fic#ier start$scr N soit "ue le fic#ier start$scr n'a pas t copi dans le rpertoire de sortie +C8 proprit Copier dans le rpertoire de sortie-$
Commande: netload Nom du fichier d'assemblage: "..\..\bin\debug\AcadVb2013.dll" m!ossible de charger l'assemblage. m!ossible de charger l'assemblage. "#tails de l'erreur: $%stem. &.'ileNot'ound()ce!tion: m!ossible de charger le fichier ou l'assembl%...

Si tout fonctionne correctement! il est temps de gnrer le modle$ Dans le menu F'C/'%#! c#oisir E porter le modle$$$ Dans la boite de dialogue Assistant %*portation de modle! laisser coc# 0odle de pro(et et faire .uivant$ C#anger le nom du modle comme dsir! Acad12&3CsCommand! par e emple et ajouter ventuellement une description 0odle pour commande AutoCA4 12&3$ +erminer$ Avec les options par dfaut! le modle est e port sous forme de fic#ier O.M dans les dossiers 3 Visual Studio %&'%2<emplates2Mroject<emplates et
Gilles Chanteau

Visual Studio %&'%2G/ E ported <emplates du rpertoire Documents ou Ges documents$ Ce modle sera dsormais propos par Visual Studio au dmarrage d'un nouveau projet$ Menser 1 renommer le projet et la solution ainsi "ue le nom de la DLL dans le fic#ier start$scr du nouveau projet$

Conclusion
La m6me procdure peut 6tre utilise pour crer d'autres modles! ciblant d'autres versions d'AutoCAD etCou du 8rame)or*! ou encore pour d'autres t/pes de projets +fonctions L.SM! bibliot#"ues de classe! e tensions d'application! $$$-$ .l est possible de rajouter des instructions dans le fic#ier start$scr comme le lancement d'une commande$ .l est aussi possible de spcifier un fic#ier D(I 1 ouvrir dans le noeud StartMrogram du fic#ier $csproj avec un c#emin complet ou relatif +la racine tant le rpertoire debug-$ E emple avec un dessin <est$d)g dans le rpertoire de la solution 3
%Start$ro.ram, C20$ro.ram 3iles0Autodesk0AutoCAD %1Start$ro.ram, !"#0acad.e4e )..0..0..0*est.dD.)

Gilles Chanteau

Vous aimerez peut-être aussi