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.
|