Académique Documents
Professionnel Documents
Culture Documents
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-$
Gilles Chanteau
.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"$
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
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$
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 %&'%-$
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
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',
#$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"
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