Fraid Posté(e) le 22 février Auteur Posté(e) le 22 février 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 Posté(e) le 23 février 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 Posté(e) le 23 février 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 Auteur Posté(e) le 23 février 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 Auteur Posté(e) le 23 février 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 Posté(e) le 23 février 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 Auteur Posté(e) le 23 février 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 Auteur Posté(e) le 26 février 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 Auteur Posté(e) le 26 février 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 Auteur Posté(e) le 28 février 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
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