Le Coin des AutoCADiens

Le site français des développeurs pour AutoCAD

Vous pourrez ici apprendre à programmer en Visual Basic pour AutoCAD.
VBA Des Compléments (Obsolète) VBA

Des Extensions pour AutoCAD ActiveX Automation

Il y a des lacunes avec le composant ActiveX pour AutoCAD. Voici des programmes qui bouchent quelques trous :-).
Une ARX et une DLL qui offrent des bibliothèques de types supplémentaires.

AcadUnsupp

AutoLISP et VBA sont deux moyens de programmer AutoCAD mais qui ne sont pas compatibles entre eux : on ne peut pas lancer une fonction AutoLISP à partir de VBA.
Je devrais dire on ne pouvait pas, parce que Albert Szilvasy <albert.szilvasy@autodesk.com > d'Autodesk offre un programme très intéressant qui permet de faciliter le développement en VBA ou VB en permettant notamment l'évaluation d'expression AutoLISP.
De l'aveu de l'auteur, il y a des lacunes et des boggues dans ce programme, c'est pourquoi il a été appelé AcadUnsupp et n'est pas soutenu officiellement par Autodesk ; néanmoins il reste indispensable.
Composant ActiveX d'un type particulier, c'est une application ARX qui est chargée dans AutoCAD mais qui possède sa propre bibliothèque de méthodes et propriétés.

AcadUnsupp n'est plus nécessaire depuis AutoCAD 2000.
Installation d'AcadUnsupp

Le programme est gratuit, modifiable et redistribuable.
Vous pourrez télécharger la dernière version sur le newsgroup d'Autodesk :
news://adesknews.autodesk.com/autodesk.autocad.customer-files
Au 15/10/98, on trouvait la dernière version (1.1) à la date du 11/8/98 (35ko).

Pour registrer AcadUnsupp vous devrez passer par AutoCAD.
Charger acadunsupp.arx en tapant arx au clavier puis load.
Vous devrez avoir le message "AcadUnsupp registered successfully". Cette opération n'est à faire qu'une seule fois.
A chaque nouvelle création d'une application, vérifiez bien que la case AcadUnsupp 1.0 Type Library de la boîte Références du menu Outils est cochée.

Créer une référence à AcadUnsupp

AcadUnsupp n'étant pas une application autonome, on ne peut utiliser les méthodes GetObject ou CreateObject comme expliqué dans le chapître AAXA.
On utilisera la méthode GetInterfaceObject qui est une méthode spéciale AutoCAD pour charger des applications qui lui sont destinées.
En VBA on utilisera les lignes suivantes :
     Dim objUnsup as Object	
     Set objUnsup = ThisDrawing.Application.GetInterfaceObject("AcadUnsupp.Application.1")
	   
puisque GetInterfaceObject est une méthode de l'objet Application.

En VB il en faudra un peu plus :
    Dim BaCadObj as Object		
    Dim objUnsup as Object		
    On Error Resume Next
    Set BaCadObj = GetObject(, "AutoCAD.Application")
    If Err Then
      Err.Clear
      Set BaCadObj = CreateObject("AutoCAD.Application")
      If Err Then
        MsgBox Err.Description
        Exit Sub
      End If
    End If	

    Set objUnsup = BaCadObj.GetInterfaceObject("AcadUnsupp.Application.1")
	   
puisqu'il faudra se connecter à AutoCAD auparavant.

2 exemples simples

Pour dessiner un cercle en AutoLISP, on utilisera :
(command "_circle" "100,200,0" "50")
Ce qui donnera avec AcadUnsupp le code suivant :

Private Sub CommandButton1_Click()
    Dim objUnsup As Object

    Set objUnsupp = ThisDrawing.Application.GetInterfaceObject("AcadUnsupp.Application.1")
    objUnsupp.EvalLispExpr "(command ""_circle"" ""100, 200, 0"" ""50"")"

End Sub
Nota :A l'intérieur de l'expression, il faut doubler le signe guillemet.
Pour tester, utiliser la même méthode que les tous premiers exemples de ce site. A comparer avec l'exemple 1.2

L'exemple précédent pouvait être écrit de manière classique, ce n'est pas le cas de l'exemple suivant.
Il s'agit de sauvegarder le dessin en cours au format R13. La méthode SaveAs de VBA ne permettant pas le choix de la version de sauvegarde, seul AcadUnsupp va nous donner cette possibilité :

Private Sub CommandButton1_Click()
    Dim objUnsup As Object

    Set objUnsupp = ThisDrawing.Application.GetInterfaceObject("AcadUnsupp.Application.1")
    ' Regroupez les 2 lignes suivantes sur une seule ligne
    objUnsupp.EvalLispExpr "(command ""_saveas"" ""r13"" (strcat(getvar ""dwgprefix"") 
    (getvar ""dwgname"")) ""_y"") "

End Sub

Une sélection de méthodes d'AcadUnsupp

Nota :Dans les exemples qui suivent, on supposera que l'objet objUnsupp représente l'objet AcadUnsupp défini tel que ci-dessus.
EvalLispExpr
Syntaxe : objUnsupp.EvalLispExpr chaîne
Exemple : objUnsup.EvalLispExpr "(command ""ddatte"")"
On doit pouvoir utiliser toutes les commandes AutoCAD (sauf vbarun - On ne peut pas recharger VBA).
PrintToCmdLine
Syntaxe : objUnsupp.PrintToCmdLine chaîne à afficher
Exemple : objUnsupp.PrintToCmdLine Chr(13) & "Ceci s'affiche dans la ligne de cde"
Equivalent à la fonction Prompt d'AutoLISP.
Le message ne s'affichera que s'il n'y a pas de feuille visible.
ShowOpenDialog
Syntaxe : objUnsupp.ShowOpenDialog("titre de boîte" "chemin" "extension" )
Exemple : fich = objUnsupp.ShowOpenDialog("Titre" "c:\trv" "dwg")
Ceci vous affichera la boîte de dialogue Ouvrir d'AutoCAD, avec même la fonction Aperçu.
En retour vous récupérerez un nom de fichier (chaîne).
ShowSaveDialog
Syntaxe : objUnsupp.ShowSaveDialog("titre de boîte" "défaut" "extension" )
Exemple : fichierS = objUnsupp.ShowSaveDialog("Titre" "c:\trv\temp" "dwg")
Cette méthode affichera la boîte de dialogue Enregistrer d'AutoCAD.
En retour vous récupérerez un nom de fichier (chaîne).
ShowColorDialog
Syntaxe : objUnsupp.ShowColorDialog("titre de boîte" "défaut" "extension" )
Exemple : Couleur1 = objUnsupp.ShowColorDialog(True, 5)
Cette méthode affichera la boîte de dialogue Couleur d'AutoCAD.
Si vous indiquez comme premier argument False au lieu de True, les options couleur DUCALQUE ou DUBLOC ne seront pas possibles. L'autre argument définit la couleur par défaut.
En retour vous récupérerez un numéro de couleur (entier).

Il y a encore 6 autres méthodes et 2 propriétés que je vous laisse découvrir.
Avec le programme,vous trouverez également des exemples complets en VBA et VB.


ACVBEXT : Une DLL pour d'autres extensions

Acvbext est un autre programme qui offre des extensions à AutoCAD ActiveX Automation mais cette fois sous la forme d'une DLL avec une bibliothèque de types.
C'est un programme de Jorge Lopez <jorge.lopez@autodesk.com> d'Autodesk.
On y trouve, entre autres, la méthode ExplodeBlock pour décomposer les blocs, et plusieurs fonctions concernant les réacteurs.

Installation d'Acvbext

Le programme est gratuit et vous pouvez le télécharger sur le newsgroup d'Autodesk :
news://adesknews.autodesk.com/autodesk.autocad.customer-files
Au 15/10/98, on trouvait la dernière version datée du 8/12/97 (51ko).
Il existe une "extension" à cette extension qui apporte 3 méthodes supplémentaires. C'est le fichier acvbext_X.zip (34 ko) que vous pouvez télécharger sur le site de Tony Tanzillo
Vous trouverez aussi à cet endroit acvbext.zip. Ne pas confondre, il faut télécharger les 2 fichiers.

Pour registrer Acvbext il suffit de cliquer sur acvbext.reg après l'avoir édité pour modifier le chemin d'accès à la DLL.
A chaque nouvelle création d'une application, vérifiez bien que la case acvbext 1.0 Type Library de la boîte Références du menu Outils est cochée.

Pour créer la référence vous devez utiliser la méthode GetInterfaceObject comme avec AcadUnsupp en remplaçant AcadUnsupp par ActiveXExtension :
Set objAcvb = ThisDrawing.Application.GetInterfaceObject("ActiveXExtension.Application.1")

Le programme est fourni avec des exemples en VB que je vous invite à découvrir.
Téléchargement Vous pouvez cliquer sur l'icône pour télécharger la leçon complète avec de nombreux exemples (5 ko).

-----

Bibliothèque d'icônes en DLL.


--

© 1998-2009 FASOFT - Roger Rosec Tous droits réservés.
Google
 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------