Le Coin des AutoCADiens
Le site français des développeurs pour AutoCAD
Vous pourrez ici apprendre à programmer en Visual Basic pour AutoCAD.
Charabia ?
|
Automatisation ActiveX, Automation ActiveX, Composant ActiveX, Document ActiveX,
OCX ActiveX, Serveur OLE, Automation OLE ...
La terminologie varie suivant les versions, les applications ou les traductions !
Si la plupart des termes sont synonymes, il y aurait des subtilités...
Pour simplifier, on parlera ici de composant ActiveX.
|
Composants ActiveX
|
Les composants ActiveX définissent des objets et permettent de créer des bibliothèques personnalisées qui
sont liées dynamiquement à un programme pendant son exécution.
ActiveX pour AutoCAD sert d'interface entre AutoCAD et l'application client (VBA, VB...)
Il ne peut fonctionner que si acad.exe est lancé.
Les composants sont inscrits dans la base de registres de Windows et sont donc connus
du système d'exploitation lui-même.
La registration (ou enregistrement ?) des composants ActiveX est faite automatiquement
lors de la création du composant. Pour les programmes que vous distribuez à des tiers,
la registration du serveur est effectuée par la procédure d'installation.
La compilation du source fournira 2 types de composants :
- DLL ActiveX ou serveur in-process : Bibliothèque d'objets exécutée
dans le même espace que l'application client.
- EXE ActiveX ou serveur out-process : Application fournisseur d'objets
disposant de son propre espace d'adressage.
ActiveX pour AutoCAD transforme les éléments d'AutoCAD en objets pouvant être modifiés
par les langages utilisant les mêmes caractéristiques :
- Visual Basic
- VBA pour AutoCAD, VBA pour Excel, VBA pour Word ...
- Delphi ...
|
Cherchons des POO
|
P.O.O = Programmation orientée objet.
Les Objets d'AutoCAD
Les objets graphiques (lignes, arcs...) mais aussi les calques, les styles, les vues, les dessins...
Chaque objet est relié à son objet parent.
L'objet racine est l'application AutoCAD.
acad.tlb
Les propriétés et méthodes des objets AutoCAD sont décrites dans une bibliothèque de types.
Pour y accéder, cochez la case Bibliothèque d'objets AutoCAD dans la boîte Références du menu
Outils de VBA.
Méthode : Fonction effectuant une action sur un objet.
Exemple : BaCercle.Update - Update est une méthode agissant sur l'objet BaCercle
Propriété : Information (attribut) sur l'état d'un objet.
Exemple : BaCercle.Color = acRed - Color est une propriété de l'objet BaCercle
Classe : Pour créer un objet il faut définir une classe pour cet objet, puis créer
une référence vers cet objet (Voir paragraphe suivant) .
Exemple : "AutoCAD.Application" est la classe des objets AutoCAD
|
Des LIAISONS (non dangereuses)
|
Pour créer une référence à un objet racine tel que AutoCAD.Application ou
Excel.Application :
- Vous devez déclarer une variable objet dans l'application client (VBA, VB...)
Dim BaCadObj as Object
BaCadObj peut, bien entendu, être remplacé par le nom de votre choix.
La déclaration peut être Public et se fait alors dans la section Général :
Public BaCadObj as Object
- Création d'une référence objet à l'aide de Set.
GetObject charge un objet Automation depuis un fichier déterminé et lance
l'application serveur (ici AutoCAD). Permet également d'accéder à une classe si elle est déjà en mémoire.
La syntaxe de GetObject donne :
GetObject(Chemin[, Classe])
Chemin : Facultatif - Nom et chemin complet du fichier depuis lequel l'objet doit être chargé.
Le paramètre Classe est alors facultatif.
Si l'application est déjà en fonctionnement, vous n'avez pas à spécifier Chemin, mais Classe
est alors obligatoire. Notez la virgule.
Set BaCadObj = GetObject(, "AutoCAD.Application")
Avec CreateObject(Classe) il est inutile de spécifier le chemin du serveur. (Le chemin sera lu
dans la base des registres).Notez qu'ici pas de virgule.
Set BaCadObj = CreateObject("AutoCAD.Application")
Attention avec CreateObject : Si l'application est déjà en cours, une nouvelle instance est créée.
- Pour détruire une référence à un objet :
Set BaCadObj = Nothing
Le compteur d'instances est décrémenté et le programme terminé si ce compteur arrive à zéro.
|
Création STANDARD d'une référence
|
Pour créer une référence à partir de VB, VBA pour Excel, Delphi, etc, utilisez le code suivant :
Dim BaCadObj as Object
Dim ObjDessin 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 ObjDessin = BaCadObj.ActiveDocument
Ligne 1 : Déclaration de l'objet racine Application.
Ligne 2 : Déclaration de l'objet Dessin en cours de l'application.
Ligne 3 : Si erreur, continuer à la ligne suivante.
Ligne 4 : Si AutoCAD tourne déjà, créer la référence.
Ligne 5 : Si erreur, c'est à dire si AutoCAD n'était pas lancé.
Ligne 6 : Effacer le contenu de l'objet Err.
Ligne 7 : Créer une instance d'AutoCAD.
Ligne 8 : Si nouvelle erreur, c.à d. qu'AutoCAD n'a pu être lancé.
Ligne 9 : Afficher le message d'erreur.
Pour lancer Excel à partir de VBA, de VB, etc, utiliser le même code en
remplaçant "AutoCAD.Application" par "Excel.Application".
|
Création d'une référence à partir de VBA pour AutoCAD
|
A partir de VBA pour AutoCAD, il n'est pas nécessaire d'utiliser le code du paragraphe
précédent.
En effet, à l'ouverture de VBA, il y a obligatoirement une instance AutoCAD et l'objet ThisDrawing est créé automatiquement.
ThisDrawing correspond à l'objet ObjDessin du paragraphe précédent, c.à d.
à l'objet dessin_en_cours_de_l'application_AutoCAD.
Si vous désirez une nouvelle instance d'AutoCAD, utilisez CreateObject.
Par contre utisez le code du paragraphe précédent si par exemple vous voulez lancer une application
Excel, Access, etc, à partir de VBA pour AutoCAD.
|

© 1998-2007 FASOFT - Roger Rosec Tous droits réservés.
|
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|