Automatisation d’AutoCAD® avec Python

Automatisation d’AutoCAD avec Python

Les tâches répétitives sont le lot quotidien de nombreux professionnels utilisant AutoCAD®. Dessiner des centaines de points, relier des coordonnées, ajuster des calques… Ces opérations, bien que nécessaires, sont chronophages et sources d’erreurs. La promesse d’automatiser ces processus avec un langage aussi lisible et puissant que Python est donc particulièrement séduisante. Avec des bibliothèques comme PyAutoCAD, l’idée de piloter le géant du dessin assisté par ordinateur (DAO) avec quelques lignes de code semble être la solution idéale.

[!Success] Qu’est-ce que PyAutoCAD ?

Cependant, la réalité de l’intégration de Python dans l’écosystème AutoCAD® est plus nuancée qu’il n’y paraît. Au-delà des tutoriels de base qui montrent comment tracer un cercle ou une ligne, se cachent des particularités, des compromis et des forces inattendues. Pour quiconque envisage sérieusement cette voie, comprendre ces nuances est crucial pour éviter les frustrations et exploiter pleinement le potentiel de l’outil. Cet article révèle cinq vérités surprenantes sur l’automatisation d’AutoCAD® avec Python, des vérités qui pourraient changer votre façon d’aborder votre prochain projet.


1. C’est une technologie étonnamment ancienne (et c’est une bonne chose)

En consultant la page du projet PyAutoCAD sur le dépôt officiel PyPI (Python Package Index), la première chose qui frappe est une date : la dernière mise à jour de la bibliothèque remonte à décembre 2015. Une éternité dans le monde du développement logiciel, qui pourrait légitimement faire penser à un projet abandonné. Pourtant, la bibliothèque reste parfaitement fonctionnelle avec les versions modernes d’AutoCAD®.

Le secret de cette longévité réside dans sa fondation. PyAutoCAD n’est pas une surcouche complexe qui doit être réadaptée à chaque nouvelle version d’AutoCAD®. Au contraire, elle s’appuie sur l’interface ActiveX/COM d’AutoCAD®, une technologie Microsoft éprouvée et d’une stabilité remarquable, intégrée à Windows depuis des décennies, en utilisant la bibliothèque comtypes pour assurer la traduction des commandes Python en instructions qu’AutoCAD® peut comprendre.

Loin d’être un projet obsolète, PyAutoCAD est en réalité un outil mature dont la robustesse découle de sa base technologique stable. Cet avantage majeur lui assure une compatibilité avec une très large gamme de versions d’AutoCAD®. Il faut toutefois noter une limitation importante : les versions « LT » d’AutoCAD® ne supportent pas cette fonctionnalité et ne peuvent donc pas être automatisées via PyAutoCAD.


2. Le vrai pouvoir : dessiner à partir de données, pas à partir de rien

Si les exemples de base se concentrent sur le dessin de formes géométriques simples, le véritable potentiel de PyAutoCAD se révèle dans un tout autre flux de travail : la génération de dessins complets à partir de sources de données externes. Le but n’est pas tant d’apprendre à coder des formes complexes que d’utiliser le code pour visualiser rapidement et précisément des ensembles de données.

Un exemple concret et puissant consiste à importer une liste de coordonnées X et Y depuis un simple fichier texte (.txt). Un script Python peut lire ce fichier, stocker les points, puis générer automatiquement un plan complet en traçant les lignes de contour, en insérant des bornes à chaque point et en ajoutant les matricules correspondants. Une autre approche flexible consiste à utiliser la fonction d’extraction de données d’AutoCAD® vers un fichier Excel, puis à utiliser des formules pour formater les coordonnées avant de les injecter dans le script Python.

Cette méthode transforme radicalement une tâche fastidieuse. Comme le souligne un tutoriel, le traçage manuel des liaisons entre les points peut représenter une perte de temps considérable.

« tracer ces liens entre les points représentent un temps énorme… en général ça prend beaucoup mais alors beaucoup de temps »

Le gain de temps est spectaculaire : une seule étape, comme relier manuellement les points, peut consommer entre 5 et 10 % du temps total d’un projet. En automatisant l’intégralité du flux de travail — de l’importation des points à l’annotation finale — une tâche qui prenait auparavant 20 minutes est réduite à quelques secondes, représentant une économie de 20 % à 30 % du temps de travail manuel. Ce changement de paradigme ne se limite pas à un gain de temps ; il redéfinit le rôle du professionnel. Au lieu d’être un dessinateur numérique, vous devenez un architecte de données qui utilise AutoCAD® comme un puissant moteur de visualisation, transformant des tables de coordonnées en plans intelligents et exploitables.


3. Vous pouvez contrôler bien plus que de simples lignes

L’automatisation avec PyAutoCAD va bien au-delà du simple tracé d’entités. La bibliothèque donne accès à une vaste gamme de fonctionnalités qui permettent de manipuler la structure, l’organisation et l’apparence d’un dessin de manière programmatique.

Voici une synthèse des capacités avancées que vous pouvez piloter avec Python :

  • Gestion des calques : Créez de nouveaux calques (acad.doc.layers.add('NomDuCalque')), modifiez leur couleur via leur propriété .Color avec un index numérique, et basculez leur visibilité avec la propriété booléenne .LayerOn.
  • Manipulation d’objets : Prenez des objets existants pour les copier (.copy()), les déplacer (.move()), les faire pivoter (.rotate()), les mettre à l’échelle (.scale()) ou encore créer des décalages (.offset()).
  • Annotation : Insérez des objets texte via la méthode .AddText(), en contrôlant dynamiquement leur contenu (par exemple, des matricules de points), leur point d’insertion et leur hauteur.
  • Itération et modification : Parcourez en boucle tous les objets d’un dessin avec acad.iter_objects(). Vous pouvez filtrer par type d’objet (par exemple, tous les cercles) pour lire leurs propriétés ou les modifier en série.

La véritable puissance ne réside pas dans l’exécution isolée de ces commandes, mais dans leur orchestration. En les combinant, on passe de la simple automatisation de tâches à la création de flux de travail complets : des scripts capables de générer un plan, de le structurer avec des calques normalisés, de l’annoter précisément, puis de le valider, le tout en une seule opération.


4. Le plus grand compromis n’est pas la complexité, c’est la communauté

Python est réputé pour sa syntaxe claire et sa facilité d’apprentissage, ce qui en fait un candidat idéal pour les scripteurs qui trouvent la syntaxe d’AutoLISP déroutante. Cependant, le choix d’un langage de programmation ne se limite pas à sa syntaxe ; l’écosystème qui l’entoure est tout aussi crucial. Et sur ce point, le contraste entre Python et AutoLISP est saisissant.

AutoLISP est intégré à AutoCAD® « depuis le premier jour » (« since day dot »). Il bénéficie de décennies de développement, d’une communauté mondiale massive et d’une quantité astronomique de documentation, de forums et d’exemples de code. Pour presque n’importe quel problème, il est probable que quelqu’un l’ait déjà résolu en LISP et ait partagé sa solution.

La situation pour l’automatisation d’AutoCAD® avec Python est bien différente. Comme le note un utilisateur expérimenté sur les forums Autodesk®, il n’y a que « quelques personnes qui posent des questions » (« a few Python people out there asking questions »). Cette observation est confirmée par des publications sur des plateformes comme Reddit, où des utilisateurs cherchent de l’aide pour des problèmes spécifiques de Python/AutoCAD® et ne reçoivent parfois aucune réponse. Un utilisateur frustré note même qu’« il semble qu’il n’y ait pas beaucoup d’aide pour le croisement Python/CAO ».

Le choix entre LISP et Python devient alors stratégique. Il s’agit de peser la lisibilité et la polyvalence d’un langage moderne contre la robustesse, la documentation et le support communautaire inégalé d’un standard établi.


5. Attention au piège de la performance

Une subtilité technique cruciale de PyAutoCAD est qu’il fonctionne « hors processus » (« out of process »). Concrètement, cela signifie que votre script Python et l’application AutoCAD® s’exécutent comme deux programmes distincts qui doivent communiquer entre eux via l’interface COM de Windows. Chaque commande, chaque lecture de propriété, chaque création d’objet implique un échange d’informations entre ces deux processus.

Cette architecture, bien que fonctionnelle, a un coût : la performance. Cette communication est intrinsèquement plus lente que du code qui s’exécute directement à l’intérieur du processus d’AutoCAD®, comme le fait AutoLISP. L’impact peut être négligeable pour des tâches simples, mais il devient significatif lors de la manipulation de milliers d’objets.

Un expert développant des alternatives sur les forums Autodesk® estime que cette approche « hors processus » peut être des « centaines de fois plus lente » que des solutions « en processus » (« in process ») comme AutoLISP ou d’autres wrappers Python plus avancés (comme PyRx).

En conclusion, PyAutoCAD est parfaitement adapté pour automatiser des tâches légères, répétitives, ou pour des opérations qui ne sont pas critiques en termes de temps. Cependant, pour des applications exigeantes impliquant des calculs intensifs ou la manipulation de dessins très volumineux, cette limitation de performance est un facteur déterminant à prendre en compte. Dans ces cas-là, une autre technologie pourrait s’avérer plus appropriée.


Conclusion

L’automatisation d’AutoCAD® avec Python via la bibliothèque PyAutoCAD est une voie accessible et puissante. C’est un outil étonnamment stable grâce à ses fondations anciennes, qui excelle lorsqu’il est utilisé pour transformer des données brutes en dessins structurés. Cependant, une utilisation efficace exige de regarder au-delà de la simplicité du code. Il faut comprendre les limites d’une communauté encore modeste par rapport aux géants établis, ainsi que les contraintes de performance inhérentes à son architecture de communication. Connaître ces cinq vérités vous permettra de choisir cet outil pour les bonnes raisons et de l’appliquer aux tâches où il brillera vraiment.

Maintenant que vous connaissez ces nuances, la lisibilité de Python est-elle un atout suffisant pour justifier de quitter le chemin bien balisé d’AutoLISP pour votre prochain projet d’automatisation ?

Tutoriel Détaillé : Vos Premiers Dessins sur AutoCAD® avec Python

Introduction : L’Automatisation à votre Portée

Bienvenue dans le monde de l’automatisation du dessin assisté par ordinateur (DAO) ! Si vous utilisez régulièrement AutoCAD®, vous savez que certaines tâches peuvent être longues et répétitives. C’est ici qu’intervient PyAutoCAD.

En termes simples, PyAutoCAD est une bibliothèque Python qui vous permet de « piloter » AutoCAD® directement depuis un script. Imaginez pouvoir écrire quelques lignes de code pour dessiner des centaines de formes, insérer des blocs ou générer des plans complets. C’est la promesse de PyAutoCAD : transformer des heures de travail manuel en quelques secondes d’exécution automatique.

Le principal avantage est un gain de temps considérable et une réduction drastique des erreurs humaines. Au lieu de cliquer manuellement pour tracer chaque ligne d’un plan complexe, vous pouvez programmer un script pour lire des coordonnées depuis un fichier et dessiner le plan pour vous.

Ce tutoriel s’adresse aux débutants curieux, même sans expérience approfondie en programmation. Nous allons vous guider pas à pas pour que vous puissiez prendre le contrôle d’AutoCAD® avec Python.

À la fin de ce guide, vous serez capable de :

  • Installer et configurer la bibliothèque PyAutoCAD.
  • Établir une connexion entre un script Python et une session AutoCAD® active.
  • Dessiner des formes géométriques de base : lignes, cercles et polylignes.

1. Préparation de votre Environnement de Travail

Avant de pouvoir écrire notre premier script, nous devons nous assurer que tout est correctement configuré. Cette étape est cruciale pour une expérience fluide.

1.1. Les prérequis essentiels

Assurez-vous de disposer des trois éléments suivants avant de continuer. Ils sont indispensables pour que PyAutoCAD fonctionne.

  • AutoCAD® : Le logiciel AutoCAD® doit être installé sur votre ordinateur. Les versions « LT » ne sont pas compatibles, car elles ne disposent pas de l’interface d’automatisation requise.
  • Python : Le langage de programmation Python doit être installé sur votre système.
  • Système d’exploitation : PyAutoCAD fonctionne exclusivement sous Windows. Il s’appuie sur la technologie ActiveX/COM de Microsoft pour communiquer avec AutoCAD®, une technologie qui n’est pas disponible sur d’autres systèmes d’exploitation.

1.2. Installation de PyAutoCAD

L’installation de la bibliothèque se fait très simplement à l’aide de pip, le gestionnaire de paquets de Python.

  1. Ouvrez l’invite de commandes de Windows (vous pouvez la trouver en cherchant « cmd » dans le menu Démarrer).
  2. Tapez la commande suivante et appuyez sur Entrée :
  3. Cette commande se connecte à l’index des paquets Python (PyPI), télécharge PyAutoCAD et l’installe automatiquement dans votre environnement Python.

1.3. Vérification de l’installation

Une fois l’installation terminée, il est important de vérifier que tout s’est bien passé. C’est une étape simple qui vous évitera bien des maux de tête plus tard.

  1. Ouvrez l’interpréteur Python. Vous pouvez soit taper python dans votre invite de commandes, soit lancer l’application « IDLE » depuis le menu Démarrer.
  2. Une fois dans l’interpréteur (identifiable par les chevrons >>>), tapez le code suivant :
  3. Si le message PyAutoCAD a été importé avec succès ! s’affiche sans aucune erreur, félicitations ! Votre installation est réussie. L’absence d’erreur signifie que Python a bien trouvé la bibliothèque que nous venons d’installer.

Maintenant que notre environnement est prêt, nous pouvons passer à l’étape suivante : écrire notre premier script pour communiquer avec AutoCAD®.


2. Établir la Connexion avec AutoCAD®

Pour que Python puisse envoyer des commandes à AutoCAD®, il faut d’abord établir un pont de communication entre les deux. Voyons comment faire.

2.1. Votre premier script : les imports

Chaque script PyAutoCAD commence par importer les outils nécessaires de la bibliothèque. Créez un nouveau fichier Python (par exemple, test_dessin.py) et ajoutez les lignes suivantes :

# Importer les classes nécessaires depuis la bibliothèque pyautocad
from pyautocad import Autocad, APoint
  • Autocad : C’est la classe principale qui représente l’application AutoCAD® elle-même. Nous l’utiliserons pour nous connecter au logiciel.
  • APoint : C’est un objet qui encapsule des coordonnées X, Y et Z en une seule variable. Cela rend le code plus propre et lisible lors du passage de points aux méthodes de dessin comme AddLine.

2.2. Lancement de la connexion

Avant d’exécuter votre script, un point est absolument crucial : AutoCAD® doit être ouvert et un dessin vierge doit être actif. PyAutoCAD se connecte à une instance déjà en cours d’exécution.

Ajoutez la ligne suivante à votre script pour initialiser la connexion :

# Créer une instance de l'application AutoCAD
acad = Autocad(create_if_not_exists=True)

Cette ligne de code recherche une session AutoCAD® ouverte et l’assigne à la variable acad. Désormais, acad est notre télécommande pour contrôler le logiciel. Le paramètre create_if_not_exists=True est une sécurité : si AutoCAD® n’est pas déjà lancé, cette instruction essaiera de le démarrer, rendant votre script plus robuste.

2.3. Test de la connexion

Pour être certain que la connexion est bien établie, nous pouvons demander à notre script d’afficher une information sur le dessin actuellement ouvert dans AutoCAD®.

# Vérifier la connexion en affichant le nom du document actif
print(f"Connecté au document : {acad.doc.Name}")

Exécutez votre script. Si tout fonctionne, vous devriez voir le nom de votre fichier de dessin (fgdessin.dwg, Drawing1.dwg, etc.) s’afficher dans la console. C’est la preuve que Python et AutoCAD® communiquent parfaitement.

La communication étant établie, nous sommes prêts pour la partie la plus amusante : commencer à dessiner !


3. Création de Formes Géométriques Simples

C’est ici que la magie opère. Nous allons utiliser notre objet acad pour ajouter des formes géométriques directement dans l’espace modèle d’AutoCAD®.

3.1. Le Point : Définir des Coordonnées

Tout dessin dans AutoCAD® repose sur des coordonnées. Dans PyAutoCAD, nous utilisons l’objet APoint pour les représenter. C’est un conteneur simple pour des coordonnées X et Y (et Z si vous travaillez en 3D).

Créons deux points qui nous serviront de début et de fin pour notre première ligne.

# Création d'un point de départ aux coordonnées (0, 0)
p1 = APoint(0, 0)
# Création d'un point d'arrivée aux coordonnées (50, 25)
p2 = APoint(50, 25)

3.2. Tracer une Ligne

Pour dessiner une ligne, nous utilisons la méthode AddLine sur l’espace modèle (acad.model). Cette méthode a simplement besoin d’un point de départ et d’un point d’arrivée.

# Ajoute une ligne dans l'espace modèle du dessin, entre p1 et p2
acad.model.AddLine(p1, p2)
print("Une ligne a été dessinée de (0,0) à (50,25).")

Exécutez ce code. Regardez votre fenêtre AutoCAD® : une ligne devrait apparaître instantanément ! Remarquez que nous agissons sur acad.model. C’est l’espace Modèle de votre dessin, là où se trouve la géométrie principale. PyAutoCAD vous donne également accès à d’autres zones comme l’espace Papier (PaperSpace).

3.3. Dessiner un Cercle

Dessiner un cercle est tout aussi simple. La méthode AddCircle requiert deux informations :

  1. Un point central, défini par un objet APoint.
  2. Un rayon, qui est un simple nombre.

Dessinons un cercle centré sur notre premier point. Nous pouvons réutiliser le point p1 que nous avons créé précédemment comme centre de notre cercle.

# Ajoute un cercle centré sur p1 avec un rayon de 20
rayon = 20
acad.model.AddCircle(p1, rayon)
print("Un cercle de rayon 20 a été dessiné.")

3.4. Construire une Polyligne

Une polyligne est un ensemble de segments de ligne connectés qui sont traités par AutoCAD® comme un seul et même objet. C’est l’outil parfait pour dessiner des polygones comme des carrés ou des contours complexes.

Pour créer une polyligne, nous devons fournir une liste de tous ses sommets. Contrairement aux listes Python classiques, PyAutoCAD requiert ici un format de données plus strict, similaire à ce qu’utilisent les langages de bas niveau. C’est pourquoi nous utilisons le module array.

# Importation du module 'array' pour créer des listes de données typées
from array import array

# Définir les sommets pour les trois premiers côtés d'un carré de 10x10
# L'API d'AutoCAD attend un tableau de nombres à virgule flottante (doubles).
# Le code 'd' dans array('d', ...) spécifie ce type.
# Les coordonnées sont "aplaties" : [X1, Y1, Z1, X2, Y2, Z2, ...]
points_carre = array('d', [0, 0, 0, 10, 0, 0, 10, 10, 0, 0, 10, 0])

# Créer la polyligne
polyligne = acad.model.AddPolyline(points_carre)

Si vous exécutez ce code, vous verrez une forme en « U » inversé. Pour fermer le carré, deux options s’offrent à vous :

  1. Ajouter les coordonnées du point de départ (0, 0, 0) à la fin de la liste points_carre.
  2. Utiliser la propriété Closed de l’objet polyligne, ce qui est souvent plus simple.

Faisons-le avec la deuxième méthode :

# Fermer la polyligne pour compléter le carré
polyligne.Closed = True
print("Un carré a été dessiné avec une polyligne.")

Nous avons maintenant dessiné une ligne, un cercle et un carré. Passons à la consolidation de nos acquis.


4. Le Script Complet et Prochaines Étapes

Nous avons vu chaque étape séparément. Rassemblons maintenant le tout dans un unique script fonctionnel et regardons vers l’avenir.

4.1. Votre premier script d’automatisation

Voici le code complet qui combine toutes les opérations que nous avons apprises. Vous pouvez le copier-coller dans votre fichier et l’exécuter pour voir toutes les formes apparaître en même temps.

Astuce : Avant de ré-exécuter le script, il est conseillé de supprimer manuellement les formes déjà présentes dans votre dessin AutoCAD®. PyAutoCAD ajoute de nouveaux objets à chaque exécution, il ne remplace pas les anciens. Sans ce nettoyage, vous obtiendrez des formes superposées, ce qui rendra difficile la vérification des modifications de votre code.

# 1. Importations nécessaires
from pyautocad import Autocad, APoint
from array import array

# 2. Connexion à AutoCAD
# Assurez-vous qu'AutoCAD est ouvert avec un dessin vierge.
acad = Autocad(create_if_not_exists=True)
print(f"Connecté au document : {acad.doc.Name}")

# 3. Définition des points pour la ligne et tracé
print("Dessin d'une ligne...")
p1 = APoint(0, 0)
p2 = APoint(50, 25)
acad.model.AddLine(p1, p2)
print("Ligne dessinée.")

# 4. Tracé d'un cercle en réutilisant un point existant
print("Dessin d'un cercle...")
rayon = 20
acad.model.AddCircle(p1, rayon)
print("Cercle dessiné.")

# 5. Définition des sommets du carré et création de la polyligne
print("Dessin d'une polyligne...")
points_carre = array('d', [0, 0, 0, 10, 0, 0, 10, 10, 0, 0, 10, 0])
polyligne = acad.model.AddPolyline(points_carre)
polyligne.Closed = True
print("Polyligne dessinée.")

print("\nScript terminé avec succès !")

4.2. Conclusion et pour aller plus loin

Félicitations ! Vous venez d’écrire et d’exécuter votre premier script d’automatisation pour AutoCAD® avec Python. Vous avez appris à configurer votre environnement, à vous connecter au logiciel et à créer des objets géométriques de base par le code.

Maintenant, la meilleure façon d’apprendre est d’expérimenter. N’hésitez pas à modifier les valeurs dans le script :

  • Changez les coordonnées des points.
  • Ajustez le rayon du cercle.
  • Essayez de créer un rectangle ou une autre forme avec la polyligne.

Ce que vous avez vu n’est que la partie émergée de l’iceberg. PyAutoCAD ouvre la porte à des automatisations bien plus complexes. Voici quelques pistes pour aller plus loin :

  • Gestion des calques ( layers ) : Créez des calques, changez leurs couleurs et assignez des objets à des calques spécifiques.
  • Ajout de texte ( AddText ) : Placez des annotations, des titres ou des cotes dans vos dessins.
  • Lecture de fichiers : Lisez des coordonnées depuis un fichier Excel ou CSV pour générer automatiquement des plans topographiques ou des schémas complexes.

Continuez à explorer, et vous découvrirez à quel point Python peut devenir un allié puissant dans votre flux de travail sur AutoCAD®.