Fraid Posté(e) le 22 février 2024 Auteur Posté(e) le 22 février 2024 Bonjour, Le module Requests Abordé sur un autre post pour récupérer le temps internet, c'est un module de récupération de données à partir d’API web. Testons une API gouvernementale, documentée ici qui est un "Nominatim" FR. Ici, c'est le reverse qui va nous intéresser, car nous allons récupérer des infos en cliquant un point dans Autocad dans un plan géoréférencé . Créons un fichiers nominreverse.py, toujours dans le dossier transform. import pyperclip import requests def nominreverse(coord, key): rep = requests.get(f'https://api-adresse.data.gouv.fr/reverse/?lon={coord[0]}&lat={coord[1]}') dic = dict(rep.json()) ret = dic['features'][0]['properties'][key] pyperclip.copy(f'{ret}') if __name__ == "__main__": p = pyperclip.paste().split(' ') nominreverse((p[0], p[1]), p[2]) Le fichier nominreverse.lsp (defun nominreverse ( typ msg / pt ) (setq pt (getwsg (getpoint "\n Cliquez un point") (getvar 'cgeocs))) (trans-SetClip (strcat (car pt) " " (cadr pt) " " typ)) (trans-runscr (findfile "nominreverse.py")) (princ (strcat "\n " msg ": " (trans-GetClip))) ) (defun c:getinsse nil (nominreverse "citycode" "Numéro INSEE") (princ)) (defun c:getcom nil (nominreverse "city" "Commune") (princ)) (defun c:getadres nil (nominreverse "label" "Adresse") (princ)) (defun c:getregion nil (nominreverse "context" "Département et Région") (princ)) Chargez le .lsp dans Autocad, puis taper les commandes ci-dessus. Encore la, les possibilités sont immenses faces au nombre d'API Web qu'il y a. Par contre, ne compter pas faire tourner cela dans des boucles intensives sans devoir vous adapter au erreurs. Vous serez limité à un nombre d'appels par seconde pour cette API, d'autre un nombre d'appel par jour et aplli. ou le nombre d'appel consécutif régulier. Il y a toujours des parades, il faut s'adapter à chaque serveur, et pour finir, certaine API propose des solutions alternatives pour cette situation. à bientôt 1 https://github.com/Fraiddd
dxxx01 Posté(e) le 23 février 2024 Posté(e) le 23 février 2024 Et bien Ouais c'est claire les langages dans autocad c'est le top sacré logiciel...le temps passe et les possibilités de développement sont de plus en plus Vastes VBA, LISPS,VLISPS,C++,C#NET,PYTHON, SQL Aujourd'hui il faut d'abord apprendre a codé avant de ce servir de ces soft ça aide énormément
GEGEMATIC Posté(e) le 23 février 2024 Posté(e) le 23 février 2024 Salut, si j'ai bien compris, la seule manière de passer des argument entre lisp et python c'est le presse papier ? du moins celle que tu utilise dans tes codes, car si Python sait faire un "hello world", il doit bien être capable de lire ou d'écrire dans un dictionnaire ou une astuce comme ça ? (peut être pas finalement, car com est nul en dictionnaires ....) a+ Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Fraid Posté(e) le 23 février 2024 Auteur Posté(e) le 23 février 2024 Bonjour, il y a 7 minutes, GEGEMATIC a dit : passer des argument entre lisp et python c'est le presse papier Non, pas du tout. On peut aussi les transmettre avec un .bat écrit par Autolisp comme ceci. python mon_fichier.py arg1 arg2 ... Ecrire un csv qui seras lu au démarrage du py. Le presse papier est le plus rapide (pas le plus sur, car peut refuser de fonctionner pour des raison obscure). Pour le retour, Python peut écrire du lisp qui seras lu par un (load) par exemple. Comme on est dans le cas ou c'est un lisp qui lance le py, Python ne peut pas accéder à Autocad tant que le lisp tourne. Par contre, si nous utilisons Pyautocad, nous pouvons interpoler avec les variables sans soucis et effectivement créer tout les objets Autocad que l'on veut.. https://github.com/Fraiddd
Fraid Posté(e) le 23 février 2024 Auteur Posté(e) le 23 février 2024 Pyautocad Module qui existe depuis une dizaine d'année, qui permet d'agir dans Autocad, en utilisant l'interface ActiveX. Vous avez donc toute la documentation disponible dans l'aide du développeur. La base : # Du module on importe l'objet Autocad et APoint from pyautocad import Autocad, APoint # Instanciation de l'objet Autocad accad = Autocad() # ou accad = Autocad(create_if_not_exists=True) si on veut ouvrir Autocad le cas écheant. # le document actif doc = accad.ActiveDocument # l'application app = accad.Application # l'espace objet ms = doc.model Je rappelle qu'il n'y a rien à faire dans Autocad, il se laisse faire, aucune sécurité mise en place pour Python. A partir de là, tout le panel ActiveX est disponible, mais pas que. grace à la méthode SendCommand, tout Autolisp / Visual Lisp et toutes les commandes Autocad. Pour exécuter le code Python hors de l'EDI, il faudra double cliquer dessus. Et pour éviter que la console Python s'ouvre, enregistrer votre fichier avec l'extension pyw. Pour faire des tests, restez dans l'EDI. Exemple SendCommand comme en script : doc.SendCommand('-purger\ntout\n*\nn\n_qsave\n') ou pour lancer un script doc.SendCommand('_script\n"c:/mon_fichier.scr"\n') ou en autolisp doc.SendCommand('(command "-purger" "tout" "*" "n")\n(command "_qsave")\n') ou en Visual Lisp doc.SendCommand('(vl-load-com)\n(setq doc (vla-get-activedocument (vlax-get-acad-object)))(vla-purgeall doc)(vla-save doc)(setq doc nil)\n') Je pense que vous commencez à comprendre que c'est no limite. A bientôt, je revient en vous montrant la traduction ActiveX -> Python. https://github.com/Fraiddd
(gile) Posté(e) le 23 février 2024 Posté(e) le 23 février 2024 il y a 28 minutes, Fraid a dit : ou en Visual Lisp doc.SendCommand('(vl-load-com)\n(setq doc (vla-get-activedocument (vlax-get-acad-object)))(vla-purgeall doc)(vla-save doc)(setq doc nil)\n') Quel intérêt puisque PyAutoCAD utilise la même interface COM/ActiveX. Ne peut on pas faire directement : accad = Autocad() doc = accad.ActiveDocument doc.PurgeAll() doc.Save() Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 23 février 2024 Auteur Posté(e) le 23 février 2024 Tout a fait, c'était juste pour montrer les possibilités hors ActiveX, il y a 2 minutes, (gile) a dit : doc.PurgeAll() je vais y venir. https://github.com/Fraiddd
Fraid Posté(e) le 26 février 2024 Auteur Posté(e) le 26 février 2024 ActiveX -> Python Gile m'a devancé pour le code python. Pour "traduire" les méthode ActiveX, c'est assez simple. Pour la méthode PurgeAll : Il suffit d'aller sur la page de l'aide du développeur ActiveX and VBA / ActiveX: Reference Guide / Methods / P / PurgeAll Vous avez un exemple de code VBA et Visual lisp. Le VBA: ThisDrawing.PurgeAll Python : doc.PurgeAll() Les majuscules sont importantes en Python. Allons voir les méthodes applicables à une Polyligne. ActiveX and VBA / ActiveX: Reference Guide / Objets / L / LWPolyline Object (ActiveX) (Attention, l'objet Polyline est la version obsolete qu'on peut encore trouver dans des vieux DXF R12 par exemple.) Les méthodes sont dans le bas de la page ainsi que les propriétés. Ce n'est pas exhaustif, il manque des méthodes comme Add(), et des propriétés comme Color. Cette aide n'est pas parfaite, il faut chercher, rien est tout cuit en programmation. De plus, après quelque tests, nous observons que certaines Méthodes ne fonctionnent pas en Python. C'est la que SendCommand nous rend service. Malheureusement, je n'en est pas fait de liste, à votre tours d'explorer. Des exemples sont sur le Github de Pyautocad. Je ne vous conseil pas de créer des programmes qui reste trop longtemps "connecté" à Autocad. Le lien Python / Autocad peut se rompre à tout moment sans prévenir. Quand j'ai beaucoup d'objets à créer, je crée un bloc dans Python qui se rempli d'objet à la place d'Autocad, et à la fin je l'envois et le décompose. Et je tient à revenir sur un détail Python, sans vouloir vous embrouiller : il n'y a pas de variables en Python, que des Objets. Démonstration simple. a = "Texte" print(type(a)) -> <class 'str'> Nous voyons bien, ici, que a est une classe, qui est un objet en Python. Vous me direz, et alors. a = ["Texte1", "Texte2"] b = a.append("Texte3") print(a) -> ['Texte1', 'Texte2', 'Texte3'] print(b) -> None a = ["Texte1", "Texte2"] b = a b.append("Texte3") print(a) -> ['Texte1', 'Texte2', 'Texte3'] print(b) -> ['Texte1', 'Texte2', 'Texte3'] a = ["Texte1", "Texte2"] b = a.copy() b.append("Texte3") print(a) -> ['Texte1', 'Texte2'] print(b) -> ['Texte1', 'Texte2', 'Texte3'] à bientôt https://github.com/Fraiddd
Fraid Posté(e) le 26 février 2024 Auteur Posté(e) le 26 février 2024 Un mot sur les Class Certain doivent se demander pourquoi, dans mes exemples je n'ai pas créé de class. Si vous avez commencé à chercher des exemples Python vous avez certainement remarqué qu'il y a 2 principales écoles. Ceux qui travaillent avec des class et ceux avec des fonctions. C'est juste une question d'habitude, ceux qui viennent du c++ préférerons les class, de l'Autolisp, les fonctions. Ensuite, comme dit plus haut, tout est class, de ce fait, vous ne gagnez pas en performance en créant une classe à la place d'un dictionnaire. Personnellement, je réserve les class aux objets complexes (comportant des méthodes bien spécifiques et/ou de nombreuse propriétés intriquées). Mais attention, on arrive vite à construire des usines à gaz. https://github.com/Fraiddd
Fraid Posté(e) le 28 février 2024 Auteur Posté(e) le 28 février 2024 Quelques modules - Ezdxf Pour Créer, modifier ou convertir des fichier DXF. Bien documenté et riche en possibilité. S'installe avec pip3 install ezdxf[all] pour profiter des Add-on. (pip3 est utilisé notamment pour les modules contenant des extensions C facultatives de PyPI) - Geopandas + Fiona Ce n'est pas une suite de Shrek, mais des modules qui vous permettent d'accéder aux données géospatiales. Exemple avec des GeoJSON : import geopandas from geopandas import GeoDataFrame import fiona def geoJSONToDxf(lgeo): for geo in lgeo: rgeo = geopandas.read_file(geo) rgeo.geometry.to_file(geo.lower().replace('.geojson','.dxf'), driver="DXF") Les modules ne semble pas être tous utilisés. Mais doivent bien être importés, je n'ai pas tout compris non plus. - Laspy Qui vous permet de lire, créer, modifier des nuages de points aux formats LAS, LAZ et LAZRS. S'installe avec pip install laspy[lazrs,laszip] Selon votre activité, il existe forcement des modules qui vous concernent. Lisez la doc avant d'installer un module, surtout l'installation. https://github.com/Fraiddd
nona Posté(e) le 19 février Posté(e) le 19 février j'essaie d'exécuter le code suivant : from pyautocad import Autocad import time def export_dwg_to_image(dwg_path, output_path): acad = Autocad(create_if_not_exists=True) # Lancer AutoCAD si pas ouvert time.sleep(2) # Attendre 2s pour éviter des erreurs de démarrage # Vérifier si AutoCAD est bien lancé if not acad.app: print("Erreur : AutoCAD ne s'est pas ouvert.") return doc = acad.app.Documents.Open(dwg_path) doc.Export(output_path, "PNG") doc.Close() export_dwg_to_image("Plan.dwg", "Plan_img.png") et j'ai obtenu l'erreur suivante : OSError: [WinError -2147221005] Chaîne de classe incorrecte Si quelqu'un sait la source de l'erreur qu'il m'aide svp
Fraid Posté(e) le 19 février Auteur Posté(e) le 19 février Bonjour, Elle vient de la méthode open qui ne fonctionne pas. Je te conseil d'ouvrir le dessin avant d'exécuter du python. Sinon pour remplacer Open def f_open_dwg(dirf:str): AutoCAD = None while not AutoCAD: AutoCAD = Autocad() doc = AutoCAD.ActiveDocument doc.SendCommand(f'(vla-activate (vla-open (vla-get-documents (vlax-get-acad-object)) "{dirf}")) ') A bientôt. https://github.com/Fraiddd
Fraid Posté(e) le 19 février Auteur Posté(e) le 19 février Ensuite la méthode Export à 3 arguments. Voir l'aide Désolé, je n'ai pas beaucoup de temps. https://github.com/Fraiddd
Fraid Posté(e) le 19 février Auteur Posté(e) le 19 février Sinon, imprimer dans Autocad au format png, c'est pas mal aussi. Cordialement https://github.com/Fraiddd
nona Posté(e) le 25 février Posté(e) le 25 février l'erreur encore persiste, je pense que c'est un problème de compatibilité des versions. Bon, Merci en tout cas
CTZen Posté(e) le 25 février Posté(e) le 25 février Salut ! Je code un peu en python depuis peu, par curiosité, mais jamais rien en lien avec AutoCAD ! Et comme le LISP dans ma tête ça ne veut pas passer ... je me demandais : > Quelles sont les limites de Python avec PyAutocad pour manipuler notre logiciel préféré ? > Puis-je créer des routine / outils en Python et les importer sur AutoCAD pour les utiliser via un raccourci ou un bouton comme avec les LISP ? AutoCAD Map 3D 2026 Covadis 18.3d + AutoPiste Windows 11 Famille v.24H2 - 64 bits Toujours à l'affût des bonnes astuces
Olivier Eckmann Posté(e) le 26 février Posté(e) le 26 février Salut @CTZen, C'est surprenant, cette "difficulté/préférence" pour certains langages. Moi c'est l'inverse, je fais du lisp depuis plus de 30 ans, C++ et VB.net pendant 10 ans, C# depuis 15 ans. J'ai suivi et terminé 3 MOOC sur Python, mais impossible de m'y mettre ; ça ne passe pas, ça ne veut pas rentrer. Tant mieux que certains langages parlent à certains et pas à d'autres. Tout le monde peut y trouver son bonheur. Olivier
(gile) Posté(e) le 26 février Posté(e) le 26 février Il y a 17 heures, CTZen a dit : Quelles sont les limites de Python avec PyAutocad pour manipuler notre logiciel préféré ? PyAutoCAD utilise l'API COM/ActiveX (l'API du VBA AutoCAD, accessible aussi en LISP, NET ou ObjectARX). Les possibilités (et les limites) concernant AutoCAD sont donc les mêmes qu'avec le VBA AutoCAD. 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
CTZen Posté(e) le 26 février Posté(e) le 26 février Il y a 8 heures, Olivier Eckmann a dit : Salut @CTZen, C'est surprenant, cette "difficulté/préférence" pour certains langages. Moi c'est l'inverse, je fais du lisp depuis plus de 30 ans, C++ et VB.net pendant 10 ans, C# depuis 15 ans. J'ai suivi et terminé 3 MOOC sur Python, mais impossible de m'y mettre ; ça ne passe pas, ça ne veut pas rentrer. Tant mieux que certains langages parlent à certains et pas à d'autres. Tout le monde peut y trouver son bonheur. Olivier Je pense que c'est parce qu'il y a trop de parenthèse que le lisp ne rentre pas 🤣 AutoCAD Map 3D 2026 Covadis 18.3d + AutoPiste Windows 11 Famille v.24H2 - 64 bits Toujours à l'affût des bonnes astuces
Fraid Posté(e) le 26 février Auteur Posté(e) le 26 février Il y a 23 heures, CTZen a dit : Puis-je créer des routine / outils en Python et les importer sur AutoCAD pour les utiliser via un raccourci ou un bouton comme avec les LISP ? Bonjour, On ne peut pas importer du Python dans Autocad. Mais on le lance en Autolisp. c'est donc possible mais pour des outils qui tourne au dehors d'Autocad. C'est vrais que la syntaxe particulière de l'Autolisp peut être un frein à l'apprentissage. Par contre, les fameuses parenthèses nous donne une liberté totale de présentation du code, contrairement au python par exemple qui identifie les "blocs" de code avec les retour à la ligne et l'indentation. Je pense que si on souhaite programmer dans Autocad, il faut apprendre l'Autolisp. Et ensuite choisir un langage qui nous plait parmi le panel dispo. pour étendre ses actions. Le Javascript est le grand oublié de l'histoire, j'ai vu qu'Autodesk avait corrigé un certain nombre de bug, il y a encore beaucoup à explorer de ce coté. Professionnellement, j'utilise Python en extension d'Autolisp, pour les boites de dialogues, marre de DCL et dès que cela concerne des big datas. https://github.com/Fraiddd
didier Posté(e) le 26 février Posté(e) le 26 février Bonjour @Fraid Bien que le sujet ne soit pas complètement clivant, il reste tout de même très personnel. Il est vrai qu'Autolisp étant natif, cela lui donne un gros avantage, rien à télécharger, éditeur intégré, etc. Il est tellement facile de s'en servir qu'il faut de gros avantages aux langages qui veulent nous en détourner. Le DCL est un bon exemple, sa lourdeur donne envie de passer au VBA, mais là, il faut télécharger, on aura un éditeur intégré à ce moment-là. Si on vient du lisp la syntaxe peut poser souci, comme toute nouvelle langue, il faut commencer par la grammaire. Le C# est extrêmement puissant, mais il est nettement plus verbeux et moins flexible que le LISP. Je ne connais de Python que ce que vous partagez sur le site ici, je ne suis pas en mesure de l'encenser ou de le dénigrer, ça a l'air bien vu de loin. Mais dans le cas de ce dernier, il faut aussi télécharger, installer, et ça peut rebuter l'apprenant "de base". Je suis pour la diversité et le choix individuel que je respecte, mais personnellement, je me suis investi en Lisp et maintenant en C# et ne venant pas d'une formation de programmation, j'arrive à mes limites. Merci pour ces partages et longue vie à la personnalisation AutoCAD. Amicalement Éternel débutant… Mon site perso : Programmer dans AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant