Aller au contenu

Fishtonn

Membres
  • Compteur de contenus

    18
  • Inscription

  • Dernière visite

Fishtonn's Achievements

Newbie

Newbie (1/14)

0

Réputation sur la communauté

  1. Salut, J'avance bien avec mon lisp, j'en suis à l'étape de la comparaison des bounding boxes. Je pense faire une liste des contours avec les valeurs des points de leurs bounding box, pour pouvoir ensuite les comparer entre eux. Mais je bloque un peu sur la création de cette liste, et comment lire dedans ensuite. Est-ce qu'il est possible de faire une liste contenant des listes ? Quelque chose du genre: [liste bounding boxes] [ (1) (nom contour 1) (Xmin Ymin Xmax Ymax) ] [ (2) (nom contour 2) (Xmin Ymin Xmax Ymax) ] ..... [fin liste bounding boxes] Comment recuperer ensuite les elements pour les comparer ? Je suppose qu'il s'agit de listes d'association ? J'essaie de m'y retrouver grâce au site de Gile (un grand merci à lui pour son boulot) mais je suis encore un peu confus là dessus... lien avec le lisp en cours de développement et le fichier dwg de test. lien wetransfer
  2. Bonjour, A partir d'un dwg comme celui-ci: (dwg source) j'aimerai faire un lisp qui soit capable de repérer les différentes pièces et les exporter séparément. Il existe peut-être déjà quelque chose qui le permette ? en tout cas je n'ai pas trouvé. J'ai pensé structurer mon programme comme ça: - eclater tous (au cas où il y aie une insertion de bloc, pour que tout soit au même niveau) - convertir les splines en polyligne (au cas où il y en aie) - convertir tout en polyligne jointe (ce qui me permettrait au passage de voir si un contour est resté ouvert) - comparer les bounding box des différentes polylignes. Si la bounding box d'une polyligne est comprise entièrement dans la bounding box d'une autre c'est que c'est un contour intérieur, autrement c'est un contour extérieur. - faire une sélection à partir des polylignes précédemment définies comme contour extérieur pour exporter les pièces. Qu'en pensez vous ?
  3. Fishtonn

    débutant en LISP

    Salut, Merci, les fonctions de Lee-mac fonctionnent très bien. Par ailleurs j'ai eu une réponse de zwcad ce matin, ils sont effectivement très réactifs. Ils m'ont renvoyé un code utilisant en partie... un lisp de Lee-mac :D Ils ont par ailleurs signalé que le problème de compatibilité de (getpropertyvalue) était connu et en cours de résolution. Bon ben je crois que c'est tout bon pour mon Lisp. Je verrai à l'usage si il y a des choses à modifier. (ce sera sûrement le cas) J'ai rajouté un bout de code pour créer un dossier "pieces" où exporter les blocs et le .csv Par contre je me suis rendu compte que zwcad ne gérait pas le "jeu de consultation" (il affiche le menu déroulant mais je ne peux pas le modifier) Je l'ai donc remplacé par un "jeu de visibilités". Voilà les fichiers (lisp, cartouche et fichier test) lien wetransfer Au fait, quelqu'un sait pourquoi un fichier autocad de 32Ko passe à 180Ko une fois enregistré par zwcad ? Merci beaucoup à tous, et spécialement à Luna qui a pris de son temps pour répondre à chacune de mes interrogations. Grâce à vous j'ai un lisp fonctionnel et j'ai beaucoup appris sur le Lisp.
  4. Fishtonn

    débutant en LISP

    Salut Merci pour les infos :) Pour l'instant je suis sur le passage vers zwcad... (j'attends aussi une réponse de la part du support zwcad) La fonction (getpropertyvalue) ne fonctionne pas sur zwcad, alors je me suis dit qu'il fallait passer par du VLisp (comme avant sur autocad, si j'ai bien compris). J'ai modifié la fonction (select-bloc-dyn): (defun select-bloc-dyn (nomdubloc / jsel i name vlaname) (if (and (tblsearch "BLOCK" nomdubloc) (setq i 0 jsel (ssget "_X" '((0 . "INSERT") (2 . "`*U*"))) ) ) (while (< i (sslength jsel)) (setq name (ssname jsel i)) (setq vlaname (vlax-ename->vla-object name)) (vlax-dump-object vlaname T) ;; temp (if ;(and (= (vlax-get-property vlaname "ClassName") "") ;; filtrage pour ne pas laisser passer les réseaux (classname=AcDbAssociativeRectangularArray,...) (wcmatch (vlax-get-property vlaname "EffectiveName") nomdubloc) ;) (setq i (1+ i)) (ssdel name jsel) ) ) (princ (strcat "Erreur : \"" nomdubloc "\" introuvable.")) ) jsel ) Je n'ai pas encore réussi à récupérer le "ClassName" pour filtrer les réseaux, mais le filtrage sur "EffectiveName" / nomdubloc fonctionne. Par contre je n'ai pas encore bien compris comment récupérer les valeurs des attributs (et de la consultation)... Une fois l'entité convertie en objet vla, quelle fonction permet de récupérer la valeur d'un attribut ? Dans les "méthodes supportées" du bloc je vois "GetAttributes ()" mais je ne vois pas comment l'utiliser ?
  5. Fishtonn

    débutant en LISP

    Salut, Petit point: J'ai modifié mon cartouche: dwg cartouche et dwg ensemble à traiter J'ai rajouté en [attributs] l'auteur et la date, et modifié le parametre [matiere] qui venait d'un nom de côte, pour le remplacer par un "jeu de consultation". Coté Lisp, c'est plus facile que ce que je pensais à récupérer: (setq Matiere (getpropertyvalue name "AcDbDynBlockPropertyMATIERE")) (vu en faisant un (dumpallproperties)) le Lisp complet Concernant la fonction (select-bloc-dyn), ça se passe bien avec mes dernieres versions, mais lors d'essais précédents elle ignorait certains cartouches car ils n'étaient pas "anonymisés". Il faudra peut-être que j'étende le scan aux autres blocs, en enlevant (2 . "`*U*") dans jsel (ssget "_X" '((0 . "INSERT") (2 . "`*U*"))), mais je sais pas si c'est une bonne idée ? Quand mon espace objet est zoomé sur une petite partie du dessin il arrive que la sélection ne soit pas complète, il va falloir que je rajoute un zoom comme le préconisait Gile. Et enfin il me reste à valider tout ça sur zwcad. Ca avance bien ! :)
  6. Fishtonn

    débutant en LISP

    Salut Je ne comprend pas très bien à quoi cela correspond, d'autant plus que la variable sous-sel représente un jeu de sélection (et non un nom d'entité) donc en théorie ceci devrait créer un erreur... Oups oui désolé, je me suis trompé de texte à copier. C'est juste une ligne que j'avais rajoutée à un moment pour vérifier quelque chose. Effectivement, c'est à cause de ce champ [matière]. Je voulais que les dessinateurs choisissent la matière dans une liste prédéfinie, et c'est la solution que j'ai trouvée en cherchant ici et là. Il y en a peut-être une autre ? (je ne suis pas un pro d'autocad) Je vais essayer d'expliquer le pourquoi de ce cartouche, des champs texte et de la liste "matière": Je suis programmeur laser, je récupère les dwg du BE et je dois en extraire les pièces avec matière, quantité, etc... pour les passer en découpe laser. J'ai un logiciel qui est capable de reconnaitre un texte prédéfini pour extraire des infos automatiquement. Par exemple, si je luis dit de scanner le dwg à la recherche "quantite: " pour lire la quantité de pièces necessaires, le champ texte "quantite: 3 " renverra comme valeur " 3 ". Seulement il y a des limitations, ça doit être un champ texte unique, et le texte à rechercher doit toujours être le même. "quantite: " "3" ne fonctionne pas "quantte: 3" non plus... C'est d'ailleurs pour ça que les champs textes sont groupés, moins de risques de cliquer dessus par erreur et de les modifier.(ils ne sont pas groupés avec le "sous-bloc cartouche") J'ai donc cherché un moyen pour que le texte recherché par mon logiciel n'ait pas de risque d'être changé, et que le dessinateur aie juste à renseigner "3". Si j'integrais ces champs en tant qu'attributs, je prends le risque que le texte soit modifié lorsque le dessinateur le renseigne (ex. "quantte: 3") si je mets le texte dans le bloc, et à côté "3" en attribut, ça fait 2 champs texte séparés, ça ne marche pas. si je mets le mtext dans le bloc, il ne se met pas à jour quand on fait un regen après une modification d'attribut. donc mon dwg "cartouche" de référence contient un bloc avec des attributs, et des MTEXT liés à ces attributs. (je vais le mettre en PJ) C'est la meilleure solution que j'aie trouvé, mais encore une fois je ne suis pas un pro d'autocad, alors si il y a d'autres possibilités je suis preneur ^^ (je me suis quand même cassé la tête un moment là-dessus) Mais j'ai peut-être mal compris ce que tu disais ? le dwg du cartouche, à insérer et exploser
  7. Fishtonn

    débutant en LISP

    Salut, Avec plaisir ;) J'ai préféré garder les blocs "avec le champ vide", au cas où de nouveaux blocs avec une classname différente apparaissent dans le futur. De toutes façons zwcad ne fait pas de blocs dynamiques lorsqu'on fait un réseau, c'est une simple copie. Je peux toutefois avoir des plans à traiter issus d'un dwg d'un client. Voilà où j'en suis: ;;********* fonction principale*********** (defun c:TEST (/ sel-to-list jsel sous-sel ssbounding i name lst chemin csv flag-csv filename designation Prev Article Arev Auteur DateEnr NrCommande NClient Matiere Epaisseur Quantite Stock Bib Commentaire) (setq chemin (getvar "DWGPREFIX")) (setq flag-csv 1) ; flag pour fichier csv: ecrasement ou ajout (defun sel-to-list (sel / i lst) (repeat (setq i (sslength sel)) (setq lst (cons (ssname sel (setq i (1- i))) lst)) ) lst ) (if (setq jsel (select-bloc-dyn "sous-bloc cartouche")) (repeat (setq i (sslength jsel)) (setq name (ssname jsel (setq i (1- i))) ssbounding (LM:ssboundingbox (ssadd name)) sous-sel (ssget "_C" (car ssbounding) (cadr ssbounding)) lst (cons (cons designation (sel-to-list sous-sel)) lst) ;; chargement attributs designation (getpropertyvalue name "DESIGNATION") Prev (getpropertyvalue name "PREV") Article (getpropertyvalue name "CODEARTICLE") Arev (getpropertyvalue name "AREV") ;Auteur (getpropertyvalue name "") ;DateEnr (getpropertyvalue name "") NrCommande (getpropertyvalue name "NUMCOMMANDE") NClient (getpropertyvalue name "CLIENT") ;Matiere (getpropertyvalue name "") Epaisseur (getpropertyvalue name "EPAISSEUR") Quantite (getpropertyvalue name "QUANTITE") Stock (getpropertyvalue name "STOCK") Bib (getpropertyvalue name "BIBLIOTHEQUE") Commentaire (getpropertyvalue name "COMMENTAIRE") ) ;; Ajout de l'export en .dwg (setq file_name (strcat chemin designation ".dwg")) (command "_MOVE" sous-sel "" (setq pt (cdr (assoc 10 (entget name)))) '(0.0 0.0 0.0)) (command "_.WBLOCK" file_name "oui" "" '(0.0 0.0 0.0) sous-sel "") ;; "oui" pour ecraser le fichier existant (command "_.OOPS") (command "_MOVE" sous-sel "" '(0.0 0.0 0.0) pt) ;; Ajout export .csv (if (= flag-csv 1) (progn (setq csv (open (strcat chemin Article ".csv") "w")) (setq flag-csv 0) ;; flag fichier csv: ecrasement off ) (setq csv (open (strcat chemin Article ".csv") "a")) ) (write-line ( strcat file_name ";" designation ";" Prev ";" Article ";" Arev ";" ;Auteur ";" ;DateEnr ";" NrCommande ";" NClient ";" ;Matiere ";" Epaisseur ";" Quantite ";" Stock ";" Bib ";" Commentaire ) csv) (close csv) (princ (dumpallproperties sous-sel)) ; temp verif ) ) (princ (strcat "\nUn total de " (itoa (sslength jsel)) " cartouches ont été traités.")) (princ) ) ;;********* selection bloc dynamique***************** (defun select-bloc-dyn (nomdubloc / jsel i name) (if (and (tblsearch "BLOCK" nomdubloc) (setq i 0 jsel (ssget "_X" '((0 . "INSERT") (2 . "`*U*"))) ) ) (while (< i (sslength jsel)) (setq name (ssname jsel i)) (if (and (= (getpropertyvalue name "ClassName") "") ;; filtrage pour ne pas laisser passer les réseaux (classname=AcDbAssociativeRectangularArray,...) (wcmatch (getpropertyvalue name "BlockTableRecord/Name") nomdubloc) ) (setq i (1+ i)) (ssdel name jsel) ) ) (princ (strcat "Erreur : \"" nomdubloc "\" introuvable.")) ) jsel ) ;; Selection Set Bounding Box - Lee Mac ;; Returns a list of the lower-left and upper-right WCS coordinates of a ;; rectangular frame bounding all objects in a supplied selection set. ;; s - [sel] Selection set for which to return bounding box (defun LM:ssboundingbox ( s / a b i m n o ) (repeat (setq i (sslength s)) (if (and (setq o (vlax-ename->vla-object (ssname s (setq i (1- i))))) (vlax-method-applicable-p o 'getboundingbox) (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-getboundingbox (list o 'a 'B)))) ) (setq m (cons (vlax-safearray->list a) m) n (cons (vlax-safearray->list B) n) ) ) ) (if (and m n) (mapcar '(lambda ( a b ) (apply 'mapcar (cons a B))) '(min max) (list m n)) ) ) J'ai rajouté "oui" à l'export (wblock) pour écraser les fichiers dwg s'ils sont déjà présents. Pour le csv, on peut ouvrir le fichier en "remplacement" ou en "ajout", donc j'ai rajouté un "flag" remplacement/ajout, initialisé en "remplacement" au début du lisp puis en "ajout" après la première ouverture du fichier .csv Ca aurait peut-être été plus élégant d'ajouter les différentes lignes dans une liste ou un fichier temporaire, et d'écrire le fichier à la fin du lisp ? J'ai toutefois encore un problème. Il y a 3 infos que j'aimerais récupérer dans le csv: auteur, date d'enregistrement, et matière. Or ces valeurs ne sont pas dans les attributs classiques du bloc. auteur et date d'enregistrement sont des "champs automatiques", issus des variables système à l'enregistrement du dwg. Pour ceux là c'est pas très grave, je pensais de toutes manières les repasser en attributs standards, trop de problèmes avec le fait que ce soit des champs automatiques. Par contre pour le champ [matière] c'est en réalité un nom de côte, j'ai fait ainsi pour que les dessinateurs choisissent la matière dans une liste, pour qu'il n'y aie pas d'erreur possible dans le nom de la matière. Est-ce que c'est possible de récupérer ce champ ? Est-ce que je dois reconsidérer la construction du cartouche ?
  8. Fishtonn

    débutant en LISP

    Merci pour tes réponses :) Hmm je bosse en chaudronnerie, je peux avoir des toles perforées comme pièces, donc contenant des réseaux (à moins d'être maso et de faire tous les perçages un par un). (Pour info je suis programmeur laser, pas dessinateur, même si j'en fais un peu) En regardant la liste des propriétés d'un réseau j'ai trouvé ça: ClassName (type: AcString) (RO) = AcDbAssociativeRectangularArray [...] IsDynamicBlock (type: bool) (RO) = 0 [...] LocalizedName (type: AcString) (RO) = Réseau (Rectangulaire) Je devrais pouvoir m'en servir pour filtrer, non ?
  9. Fishtonn

    débutant en LISP

    Salut, Si je me trompe pas, la différence est lorsqu'on insère dans un nouveau dessin le dwg qui a été exporté. D'accord Les attributs personnalisés du bloc (designation, etc...) ont aussi un code DXF je suppose ? Ce numéro étant consigné dans la définition du bloc (c'est bien ça ?) il ne va pas changer selon que le bloc soit inséré, copié-collé, mis en bloc puis éclaté... ? Dans ce cas j'aurai intérêt à définir les numéros associés à ce que je recherche au début du lisp, pour plus de clarté, et éviter de le refaire à chaque passage de la boucle ? Par contre, quel est l'intérêt de passer par (entget) plutôt que (getpropertyvalue) ? rapidité d'exécution ? longueur du code ? normalisation ? (je remets pas en cause hein, c'est juste pour comprendre) J'ai besoin que l'ensemble sélectionné reste tel quel dans le dwg d'origine, idem dans le dwg exporté. Donc si j'en fais un bloc interne pour l'exporter, je vais devoir l'éclater après ? Quelle est la meilleure procédure ? - déplacer, exporter, (_oops)X2 ? - faire un bloc, exporter, (_oops)X2 - faire une copie, déplacer/faire bloc, exporter ? Quand tu parles de réseaux, il s'agit de copies d'objets ? Comment puis-je les identifier, pour les filtrer en amont de la recherche sur "BlockTableRecord/Name" ?
  10. Fishtonn

    débutant en LISP

    Salut, Bon j'ai bien regardé tout ça, et je commence à m'y retrouver un peu mieux, merci à vous ! =) Bonne idée, je vais d'abord faire le lisp sur autocad étudiant et j'irai vers eux si j'arrive pas à faire la conversion pour zwcad. Merci pour tes infos Gile, effectivement c'est plus propre comme ça C'est vrai qu'il vaudrait mieux que je fasse tout de a à z pour mieux apprendre, mais pour ce lisp je suis bien content d'avoir votre aide et du code "déjà fait", en le regardant de près ça me permet de comprendre assez bien comment se structure le code lisp. Merci bien Luna, c'est bien plus qu'un début de piste, ça fonctionne parfaitement, et effectivement j'aurai eu du mal à faire par moi-même le parcours des blocs dynamiques. Voilà où j'en suis pour l'instant, ça fonctionne plutôt bien mais il y a encore des améliorations à faire je penses. (defun c:TEST (/ sel-to-list jsel sous-sel ssbounding designation i name lst chemin Xmin Ymin article csv) (setq chemin (getvar "DWGPREFIX")) (defun sel-to-list (sel / i lst) (repeat (setq i (sslength sel)) (setq lst (cons (ssname sel (setq i (1- i))) lst)) ) lst ) (if (setq jsel (select-bloc-dyn "sous-bloc cartouche")) (repeat (setq i (sslength jsel)) (setq name (ssname jsel (setq i (1- i))) ssbounding (LM:ssboundingbox (ssadd name)) sous-sel (ssget "_C" (car ssbounding) (cadr ssbounding)) lst (cons (cons designation (sel-to-list sous-sel)) lst) ;; chargement point d'insertion cartouche Xmin (getpropertyvalue name "Position/X") Ymin (getpropertyvalue name "Position/Y") ;; chargement attributs designation (getpropertyvalue name "DESIGNATION") article (getpropertyvalue name "CODEARTICLE") ) ;; Ajout de l'export en .dwg (setq file_name (strcat chemin designation ".dwg")) (command "_.WBLOCK" file_name "" (list Xmin Ymin 0.0) sous-sel "") (command "_.OOPS") ;; Ajout export .csv (setq csv (open (strcat chemin article ".csv") "a")) (write-line (strcat designation ";" article ) csv) (close csv) ) ) (princ (strcat "\nUn total de " (itoa (sslength jsel)) " cartouches ont été traités.")) (princ) ) le lisp complet par WeTransfer Lors de l'export wbloc j'ai mis le point d'insertion sur le bas gauche du cadre pour qu'il soit bien placé si on l'insère dans un nouveau dessin, mais par contre quand j'ouvre le dwg lui-même le dessin n'est pas situé à l'origine. Comment je pourrais régler ça ? En déplaçant la sélection avant de faire l'export, ou il y a un autre moyen ? En tout cas merci beaucoup à vous tous, je vois le bout du tunnel bien plus rapidement que ce que j'espérais ^^
  11. Fishtonn

    débutant en LISP

    Salut, Merci beaucoup pour vos infos et suggestions, je suis en train de regarder tout ça. Par contre je me retrouve confronté à un problème auquel je n'avais pas pensé... je suis sur ZWCAD :wacko: (version 2020 standard) Du coup par exemple la commande (dumpallproperties (car (entsel))) ne fonctionne pas.... Vous sauriez où je peux trouver un tableau de correspondances Autocad/Zwcad ?
  12. Fishtonn

    débutant en LISP

    Salut, merci beaucoup pour ta réponse. Au sujet de ma démarche, je cherche d'abord à faire un lisp fonctionnel assez rapidement, mais aussi à apprendre pour être assez autonome, au moins pour pouvoir adapter le code proprement ^^ . Comme tu as pu le constater j'ai effectivement récupéré un bout de code du lisp "OutlineObjectsV1-1.lsp" de Lee-Mac (dont la fonction LM:ssboundingbox), ainsi qu'un morceau de "Special_selections.lsp" de Gile. Pour reprendre dans l'ordre: Je cherche à faire une "liste" de tous les blocs "sous-bloc cartouche" (c'est le handle, c'est ça ?) pour les traiter l'un après l'autre. Sur le fait que ce soit un bloc dynamique, j'ai trouvé ça: autolisp-filtre-de-selection-pour-blocs-dynamiques Ca me renvoie donc un jeu de sélection ? (désolé je ne suis pas encore familier avec les termes du Lisp. Je débute en Lisp mais pas en programmation, j'espère arriver à faire une boucle sans trop de difficultés. Impec' merci Parfait Pour la polyligne j'utilise la fonction "outline" de Lee-Mac (qui utilise "LM:ssboundingbox"), il faudrait peut-être que je regarde de plus près pour utiliser ssboundingbox. J'ai appelé "ContourBloc" la polyligne issue de la fonction outline, pour m'y retrouver J'ai rajouté cette ligne dans mon synoptique car la fonction SSOC (de Gile) part de la sélection active (il me semble), mais je suppose qu'on peut passer le nom de cette polyligne en argument, inutile de la sélectionner. Merci beaucoup pour toutes ces infos, tu m'as bien aidé (et c'est pas flou du tout, même si j'ai encore du mal avec le Lisp) Je vais creuser tout ça, je reviendrai surement demain avec j'espère une avancée. (merci le confinement) ++
  13. Fishtonn

    débutant en LISP

    Première étape où je vais vous solliciter: le synoptique (déroulement du programme) Je mets en vert les étapes où je sais déjà quelle commande utiliser. Est-ce que ça vous semble correct ? Je dessine une polyligne sur le contour du bloc car sinon la commande ssoc ne fonctionne pas. Merci d'avance pour vos suggestions lister blocs "sous-bloc cartouche" selection premier bloc "sous-bloc cartouche" recuperation attributs "designation" dessin contour bloc (lisp outline objects cmd outline / erase no) recup nom anonyme polyligne contour "ContourBloc" selection "ContourBloc" selection objets à l'interieur (lisp special selections cmd ssoc) export selection en dwg avec nom= attribut "designation" ajout valeurs des attributs dans une ligne csv suppr "ContourBloc" selection ss bloc suivant fin de routine
  14. Bonjour, Etant débutant en Lisp je viens solliciter vos conseils, si vous avez des idées pour moi ou si vous voyez que je fais complètement fausse route sur ma façon de faire ^^. J'espère être assez clair dans mes explications, n'hésitez pas à me le dire sinon. Description du projet: - J'ai un dwg "source" qui contient plusieurs pièces ou ensembles de pièces.(avec plusieurs calques pour les contours, plis, annotations, etc...) - Ces pièces ont toutes un cartouche autour (calque cartouche), comprenant du texte et un bloc avec des attributs (matiere, ep, qte, etc...) - Je souhaiterais faire un lisp qui exporte séparément chacun de ces cartouches, avec les pièeces, etc... et éventuellement qui crée un .csv avec les valeurs des attributs. Je mets en PJ le dwg source, et les différents Lisps que j'utilise pour l'instant. lien wetransfer
  15. Bon j'ai trouvé une autre solution, moins élégante: - un "sous-bloc" avec les attributs voulus (matiere, epaisseur,...) - un "bloc cartouche" comprenant ce sous-bloc et des champs de texte avec "[texte de reference] + [lien vers la valeur des attributs du sous-bloc]" => sur les nouveaux dessins, on insere le "bloc cartouche" en l'éclatant. Pour changer les valeurs, on selectionne le "sous-bloc" et on en change les attributs, puis un pti REGEN pour mettre à jour les champs de texte. Ca a l'air de fonctionner, mais il y a surement moyen de faire plus propre... Question: est-ce que je peux bloquer l'édition des champs de texte, mais qu'ils se mettent quand même à jour avec le REGEN ? Fichiers de cette version en lien WeTransfer: fichiers bloc cartouche v2
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité