Aller au contenu

Messages recommandés

Posté(e)

Un petit LISP pour mettre une sélection d'objets en réseau hélicoïdal.

 

Nouvelle version

Ammélioration des entrées utilisateurs concernant les angles, accepte désormais :

- soit l'angle décrit, soit l'angle entre les éléments

- des angles supérieurs à un tour complet

- des entrés directement sous forme de formules mathématiques (du types de celles utilisées avec la calculatrice géométrique d'AutoCAD).

 

En attendant une petite boite de dialogue...

 

;;; C:RES_HEL Crée un réseau hélicoïdal

;;; Redéfinition de *error*
(defun RES_HEL_ERR (msg)
 (if (or
(= msg "Fonction annulée")
(= msg "quitter / sortir abandon")
     )
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (command)
 (command "_undo" "_end")
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

;;;Fonction principale

(defun C:RES_HEL (/ ss nb ang ht axe)
 (setq	m:err	*error*
*error*	RES_HEL_ERR
v1	(getvar "cmdecho")
v2	(getvar "osmode")
 )
 (command "_undo" "_begin")
 (setvar "cmdecho" 0)
 (while (not (setq ss (ssget))))
 (initget 7)
 (setq nb (getint "\nEntrez le nombre d'éléments du réseau: "))
 (initget 1)
 (setq ht (getdist "\nSpécifiez le décalage en hauteur: "))
 (initget 1)
 (setq axe (getpoint "\nSpécifiez le centre du réseau: "))
 (initget "Décrit Elément")
 (if
   (=
     (getkword
"\nPrécisez : angle décrit ou angle entre les éléments [Décrit/Elément] : "
     )
     "Elément"
   )
    (setq ang_t "angle entre les éléments")
    (setq ang_t "angle décrit")
 )
 (initget 4)
 (if (not (setq ang
	  (getreal
	    (strcat "\nEntrez l'" ang_t " ou : ")
	  )
   )
     )
   (setq ang
   (atof
     (angtos (+	(getangle axe "\nSpécifiez le second point: ")
		(getvar "ANGBASE")
	     )
     )
   )
   )
 )
 (if (= ang_t "angle décrit")
   (setq ang (/ ang nb))
 )
 (initget "Horaire Trigonométrique")
 (if
   (=
     (getkword
"\nSpécifiez le sens de rotation [Horaire/Trigonométrique] : "
     )
     "Horaire"
   )
    (setq ang (- ang))
 )
 (if (= (getvar "ANGDIR") 1)
   (setq ang (- ang))
 )
 (setvar "osmode" 0)
 (repeat (1- nb)
   (command "_copy" ss "" axe axe)
   (command "_rotate" ss "" axe ang)
   (command "_move" ss "" '(0 0) (list 0 0 ht))
 )
 (command "_undo" "_end")
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

 

Code modifié pour pouvoir être utlisé par ceux qui,comme les géomètres, utilisent des unités angulaires autres que les degrés et/ou mettent ANGBASE à une valeur autre que 0.[Edité le 20/12/2005 par (gile)][Edité le 31/12/2005 par (gile)]

 

[Edité le 1/1/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Excellent.

De mon côté, j'ai fait quelque chose du même tonneau pour dessiner le ferraillage d'un pieux en béton armé. Cela dessine une polyligne qui suit une pente constante (pente=pas/2 pi R) le long du cercle de base.

 

(defun c:hel ()
 (setq OLD_CMD (getvar "cmdecho"))
 (setvar "cmdecho" 0)
 (setq OLDOS (getvar "osmode"))
 (setvar "osmode" 0)

 (setq PTC (getpoint "\nCentre du cercle :"))
 (setq R (getdist PTC "\nRayon du cercle :"))
 (setq P (getint "\nNombre de pas : "))
 (setq PAS (getdist "\nValeur du pas : "))
 (setq PREC (getint "\nPrécision : "))

 (setq PENTE (/ PAS (* PI 2 R)))
 (setq N 0)
 (command "_3dpoly")
 (repeat (+ (* P PREC) 1)
   (setq ANGCUR (* N (/ (* 2 PI) PREC)))
   (setq LONGCUR (* ANGCUR R))
   (setq PT (polar PTC ANGCUR R))
   (setq Z (* LONGCUR PENTE))
   (setq PT (list (car PT) (cadr PT) Z))
   (command PT)
   (setq n (+ n 1))
 )
 (command "") 


 (setvar "osmode" OLDOS)
 (setvar "cmdecho" OLD_CMD)

) 

 

Je ne suis pas assez fort en maths pour dire si c'est une hélice ou autre chose. Avis aux spécialistes ?

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut Zebulon_

 

D'abord, merci pour le compliment.

 

Je ne suis pas expert en maths, mais je pense que le principe est celui d'une helice, en tout cas les sommets de chaque segments de la poly sont situés sur une hélice (comme dans 3dSpiral), les segments qui les réunissent étant des segments de droite.

De mon côté, dans Hélicoïde, j'ai rejoins le même type de points par des arcs elliptiques. La courbe est plus lisse, mais on ne peut extruder que segment par segment.

 

PS : Juste une petite remarque sur ton LISP, si je peux me permettre, j'aurais mis le (setvar "osmode" 0) après les (getxxx).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

ouaip, juste avant la commande 3dpoly

 

 

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

  • 2 semaines après...
Posté(e)

:present: Voilà la version 2006 de RES_HEL, avec en plus, la possibilité de spécifier le décalage en hauteur entre les objets ou la hauteur totale.

Taper -RES_HEL pour entrer les données sur la ligne de commande ou RES_HEL pour ouvrir la boite de dialogue :

 

http://img526.imageshack.us/img526/9844/reshel5ow.png

 

NOUVELLE VERSION Ajout de l'option "Référence" dans la spécification à l'écran de l'angle décrit ou entre les éléments.

 

Le code .DCL à enregistrer sous Res_hel.dcl dans un dossier du chemin de recherche d'AutoCAD :

 

/// Res_hel boite de dialogue pour réseau hélicoïdal

res_hel:dialog{
 label="Réseau hélicoïdal";
 initial_focus="nbre";
 spacer;
 :row{
   :edit_box{
     label="Nombre d'éléments";
     key="nbre";
     edit_width=8;
   }
   spacer;
   :button{
     label="Choix des objets";
     key="jeu_sel";
     fixed_width=true;
   }
 }
 spacer;
 :boxed_row{
   label="Centre du réseau";
   :edit_box{
     label="X :";
     key="x_coord";
     edit_width=12;
   }
   spacer;
   :edit_box{
     label="Y :";
     key="y_coord";
     edit_width=12;
   }
   spacer;
   :button{
     label=">>";
     key="cen_sel";
     fixed_width=true;
     height=2;
   }
 }
 spacer;
 :boxed_row{
 label="Décalage en hauteur";
   :popup_list{
     key="dec_ht";
     width=22;
   }
   :edit_box{
     key="ht_clv";
     edit_width=12;
   }
   spacer;
   :button{
     label=">>";
     key="ht_sel";
     fixed_width=true;
     height=2;
   }
 }
 spacer;
 :boxed_column{
   label="Rotation";
   :radio_row{
     :radio_button{
       label="Sens trigonométrique";
       key="tri";
     }
     :radio_button{
       label="Sens horaire";
       key="hor";
     }
   }
   :row{
     :popup_list{
       key="ang_typ";
       width=22;
     }
     :edit_box{
       key="ang_clv";
       edit_width=12;
     }
     spacer;
     :button{
       label=">>";
       key="ang_sel";
       fixed_width=true;
       height=2;
     }
   }
 }
 spacer;
 ok_cancel;
}

 

Le LISP :

 

Nouvelle version posté le 07/02/06

 

Il est aussi possible de télécharger seulement Res_hel.vlx (un seul fichier compilé).

 

;;; C:RES_HEL et C:-RES_HEL Gilles Chanteau -04/07/06-
;;; 
;;; Crée un réseau hélicoïdal avec les objets sélectionnés (un réseau polaire
;;; où chaque occurence est incrémentée sur Z).
;;; Accepte tous les types d'unités angulaires et des angles supérieurs à 360°.
;;; Taper res_hel ouvre une boite de dialogue.
;;; Taper -res_hel permet la saisie à la ligne de commande.

;;;************************* SOUS-ROUTINES **************************;;;

;;; STR2ANG Convertit une chaine de caractères représentant un angle
;;; en sa valeur en radians (nombre réel)
;;; Accepte les angles supérieurs à 360°
;;; Ne prend pas en compte la valeur des variables ANGDIR et ANGBASE

(defun STR2ANG (str unt / ang)
 (if (not unt)
   (setq unt (getvar "AUNITS"))
 )
 (cond
   ((numberp (read str))
    (setq ang (float (read str)))
    (cond
      ((or (= unt 0) (= unt 1) (= unt 4))
(* (/ ang 180) pi)
      )
      ((= unt 2)
(* (/ ang 200) pi)
      )
      ((= unt 3)
ang
      )
    )
   )
   ((= unt 4)
    (if (= (getvar "ANGDIR") 1)
      (- (getvar "angbase") (angtof str))
      (- (angtof str) (getvar "angbase"))
    )
   )
   ((angtof str)
    (if (not (member "geomcal.arx" (arx)))
      (arxload "geomcal")
    )
    (* (/ (cal str) 180) pi)
   )
 )
)

;;; ANG2STR Convertit une valeur d'angle en radians en chaine de caractère
;;; représentant l'angle dans l'unité spécifiée
;;; Accepte les angles supérieurs à 360°
;;; Ne prend pas en compte la valeur des variables ANGDIR et ANGBASE

(defun ang2str (ang unt prec / d m s)
 (if (numberp ang)
   (progn
     (if (not unt)
(setq unt (getvar "AUNITS"))
     )
     (if (not prec)
(setq prec (getvar "AUPREC"))
     )
     (cond
((= unt 0)
 (rtos (* (/ ang pi) 180) 2 prec)
)
((= unt 1)
 (setq d (* (/ ang pi) 180)
       m (* 60 (- d (setq d (fix d))))
       s (* 60 (- m (setq m (fix m))))
 )
 (if (equal (abs s) 60 1e-009)
   (progn
     (setq s 0.0)
     (if (minusp m)
       (setq m (1- m))
       (setq m (1+ m))
     )
   )
 )
 (if (= (abs m) 60)
   (progn
     (setq m 0)
     (if (minusp m)
       (setq d (1- d))
       (setq d (1+ d))
     )
   )
 )
 (strcat (itoa d)
	 "d"
	 (if (		   (strcat (itoa m) "'")
	   ""
	 )
	 (if (		   (if (		     (strcat (itoa (fix s)) "\"")
	     (strcat (rtos s 2 (- prec 4)) "\"")
	   )
	   ""
	 )
 )
)
((= unt 2)
 (strcat (rtos (* (/ ang pi) 200) 2 prec) "g")
)
((= unt 3)
 (strcat (rtos ang 2 prec) "r")
)
((= unt 4)
 (if (= (getvar "ANGDIR") 1)
   (setq ang (- ang))
 )
 (angtos (+ (getvar "ANGBASE") ang) 4 prec)
)
     )
   )
 )
)

;;; Redéfinition de la fonction *error*

(defun RES_HEL_ERR (msg)
 (if (or
(= msg "Fonction annulée")
(= msg "quitter / sortir abandon")
     )
   (princ)
   (princ (strcat "\nErreur: " msg))
 )
 (command)
 (command "_undo" "_end")
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setvar "aunits" v3)
 (setq	*error*	m:err
m:err nil
 )
 (princ)
)

;;; CREAT_RES_HEL Création du réseau

(defun CREAT_RES_HEL (ss nb axe ang ht / v1 v2 v3)
 (setq	m:err	*error*
*error*	RES_HEL_ERR
v1	(getvar "cmdecho")
v2	(getvar "osmode")
v3      (getvar "aunits")
 )
 (command "_undo" "_begin")
 (setvar "cmdecho" 0)
 (setvar "osmode" 0)
 (setvar "aunits" 3)
 (repeat (1- nb)
   (command "_copy" ss "" axe axe)
   (command "_rotate" ss "" axe ang)
   (command "_move" ss "" '(0 0) (list 0 0 ht))
 )
 (command "_undo" "_end")
 (setvar "cmdecho" v1)
 (setvar "osmode" v2)
 (setvar "aunits" v3)
 (setq	*error*	m:err
m:err nil
 )
)

;;;******************** FONCTIONS PRINCIPALES **********************;;;

;;; C:-RES_HEL Entrées utilisateur à la ligne de commande

(defun C:-RES_HEL (/ ss nb ang ht cen)
 (while (not (setq ss (ssget))))
 (initget 7)
 (setq nb (getint "\nEntrez le nombre d'éléments du réseau: "))
 (initget 1)
 (setq cen (getpoint "\nSpécifiez le centre du réseau: "))
 (if (not
(setq ht
       (getdist
	 "\nSpécifiez le décalage en hauteur ou : "
       )
)
     )
   (progn
     (initget 1)
     (setq ht (/ (getdist "\nSpécifiez la hauteur totale: ") nb))
   )
 )
 (initget "Décrit Elément")
 (if
   (=
     (getkword
"\nPrécisez : angle décrit ou angle entre les éléments [Décrit/Elément] : "
     )
     "Elément"
   )
    (setq ang_t "angle entre les éléments")
    (setq ang_t "angle décrit")
 )
 (while (not (numberp ang))
   (if	(= (setq ang
	  (getstring
	    (strcat "\nEntrez l'" ang_t " ou : ")
	  )
   )
   ""
)
     (progn
(initget "Référence")
(if (= "Référence"
       (setq ang (getangle cen "\nSpécifiez l'angle ou [Référence]: "))
    )
  (setq
    ang	(+ (- (getangle	cen "\nSpécifiez l'angle de référence: "))
	   (getangle cen "\nSpécifiez le nouvel angle: ")
	)
  )
)
(if (= 1 (getvar "ANGDIR"))
  (setq ang (- ang))
)
(if (minusp ang)
  (setq ang (+ (* 2 pi) ang))
)
     )
     (setq ang (STR2ANG ang nil))
   )
 )
 (if (= ang_t "angle décrit")
   (setq ang (/ ang nb))
 )
 (initget "Horaire Trigonométrique")
 (if
   (=
     (getkword
"\nSpécifiez le sens de rotation [Horaire/Trigonométrique] : "
     )
     "Horaire"
   )
    (setq ang (- ang))
 )
 (CREAT_RES_HEL ss nb cen ang ht)
 (princ)
)

;;; C:RES_HEL Entrées utilisateur dans une boite  de dialogue

(defun C:RES_HEL (/ ss ang pt ht)
 (setq dcl_id (load_dialog "res_hel.dcl"))
 (setq what_next 2)
 (while (    (if	(not (new_dialog "res_hel" dcl_id))
     (exit)
   )
   (start_list "ang_typ")
   (mapcar 'add_list
    '("Angle décrit" "Angle entre les éléments")
   )
   (end_list)
   (start_list "dec_ht")
   (mapcar 'add_list
    '("Entre les éléments" "Hauteur totale")
   )
   (end_list)
   (if	(not *nb_res_hel*)
     (setq *nb_res_hel* 4)
   )
   (if	(null *cen_res_hel*)
     (setq *cen_res_hel* '(0.0 0.0))
   )
   (if	(not *dec_res_hel*)
     (setq *dec_res_hel* 0)
   )
   (if	(not *ht_res_hel*)
     (setq *ht_res_hel* 1.0)
   )
   (setq ht *ht_res_hel*)
   (if	(not *tot_res_hel*)
     (setq *tot_res_hel* 0)
   )
   (if	(not *sens_res_hel*)
     (setq *sens_res_hel* 1)
   )
   (if	(not *ang_res_hel*)
     (setq *ang_res_hel* (* 2 pi))
   )
   (setq ang *ang_res_hel*)
   (if	ss
     (mode_tile "accept" 0)
     (mode_tile "accept" 1)
   )
   (if	(zerop *tot_res_hel*)
     (set_tile "ang_typ" "0")
     (set_tile "ang_typ" "1")
   )
   (if	(zerop *dec_res_hel*)
     (set_tile "dec_ht" "0")
     (set_tile "dec_ht" "1")
   )
   (if	(minusp *sens_res_hel*)
     (set_tile "hor" "1")
     (set_tile "tri" "1")
   )
   (set_tile "nbre" (itoa *nb_res_hel*))
   (set_tile "ang_clv" (ANG2STR ang nil nil))
   (set_tile "ht_clv" (rtos ht))
   (set_tile "x_coord" (rtos (car *cen_res_hel*)))
   (set_tile "y_coord" (rtos (cadr *cen_res_hel*)))
   (action_tile
     "nbre"
     (strcat
"(if (and (numberp (read $value))"
"(	"(progn (setq *nb_res_hel* (atoi $value))"
"(set_tile \"nbre\" (itoa *nb_res_hel*)))"
"(progn (alert \"Entrée non valide\")"
"(mode_tile \"nbre\" 2)))"
      )
   )
   (action_tile
     "x_coord"
     (strcat
"(if (numberp (read $value))"
"(setq *cen_res_hel* (list (atof $value) (cadr *cen_res_hel*)))"
"(progn (alert \"Entrée non valide\")"
"(mode_tile \"x_coord\" 2)))"
     )
   )
   (action_tile
     "y_coord"
     (strcat
"(if (numberp (read $value))"
"(setq *cen_res_hel* (list (car *cen_res_hel*) (atof $value)))"
"(progn (alert \"Entrée non valide\")"
"(mode_tile \"y_coord\" 2)))"
     )
   )
   (action_tile
     "ht_clv"
     (strcat
"(if (numberp (read $value))"
"(progn (setq ht (atof $value))"
"(setq *ht_res_hel* ht)"
"(set_tile \"ht_clv\" (rtos ht)))"
"(progn (alert \"Entrée non valide\")"
"(mode_tile \"ht_clv\" 2)))"
      )
   )
   (action_tile
     "dec_ht"
     (strcat
"(if (= $value \"0\")"
"(setq *dec_res_hel* 0)"
"(setq *dec_res_hel* 1))"
     )
   )
   (action_tile
     "ang_typ"
     (strcat
"(if (= $value \"0\")"
"(setq *tot_res_hel* 0)"
"(setq *tot_res_hel* 1))"
     )
   )
   (action_tile
     "hor"
     (strcat
"(if (= $value \"0\")"
"(setq *sens_res_hel* 1)"
"(setq *sens_res_hel* -1))"
     )
   )
   (action_tile
     "tri"
     (strcat
"(if (= $value \"1\")"
"(setq *sens_res_hel* 1)"
"(setq *sens_res_hel* -1))"
     )
   )
   (action_tile
     "ang_clv"
     (strcat
"(if (angtof $value)"
"(progn (setq ang (STR2ANG $value nil))"
"(setq *ang_res_hel* ang)"
"(set_tile \"ang_clv\" (ANG2STR ang nil nil)))"
"(progn (alert \"Entrée non valide\")"
"(mode_tile \"ang_clv\" 2)))"
      )
   )
   (action_tile "jeu_sel" "(done_dialog 3)")
   (action_tile "ht_sel" "(done_dialog 4)")
   (action_tile "cen_sel" "(done_dialog 5)")
   (action_tile "ang_sel" "(done_dialog 6)")
   (action_tile "accept" "(done_dialog 1)")
   (setq what_next (start_dialog))
   (cond
     ((= what_next 3)
      (setq ss (ssget))
     )
     ((= what_next 4)
      (setq ht (getdist "\nSpécifiez le premier point: "))
      (setq *ht_res_hel* ht)
     )
     ((= what_next 5)
      (setq *cen_res_hel* (getpoint "\nSpécifiez le centre: "))
     )
     ((= what_next 6)
(initget "Référence")
(if (= "Référence"
       (setq ang (getangle *cen_res_hel*
			   "\nSpécifiez l'angle ou [Référence]: "
		 )
       )
    )
  (setq
    ang	(+ (- (getangle	*cen_res_hel*
			"\nSpécifiez l'angle de référence: "
	      )
	   )
	   (getangle *cen_res_hel*
		     "\nSpécifiez le nouvel angle: "
	   )
	)
  )
)
(if (= 1 (getvar "ANGDIR"))
  (setq ang (- ang))
)
(if (minusp ang)
  (setq ang (+ (* 2 pi) ang))
)
(setq *ang_res_hel* ang)
     )
     ((= what_next 1)
      (setq ang (* ang *sens_res_hel*))
      (if (zerop *tot_res_hel*)
 (setq ang (/ ang *nb_res_hel*))
      )
      (if (not (zerop *dec_res_hel*))
 (setq ht (/ ht *nb_res_hel*))
      )
      (CREAT_RES_HEL ss *nb_res_hel* *cen_res_hel* ang ht)
     )
   )
 )
 (unload_dialog dcl_id)
 (princ)
)

[Edité le 7/2/2006 par (gile)]

 

[Edité le 4/7/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Comme d'habitude, tous les commentaires sont bienvenus...

 

Je ne suis pas lispeur, mais plutot vba-i-ste. De mon côté, j'essaye de devenir le "Maîîître du moonnde" en vba , mais devant vos travaux, je ne puis qu'être admiratif.

Alors je vous dis :

Bravo, félicitations et surtout : bonne continuation.

De tout coeur.

Nous n’ héritons pas de la terre de nos ancêtres.Nous l’empruntons à nos enfants.

Posté(e)

Juste un petit soucis à la 1ère utilisation, ça avorte

Commande: res_hel

; erreur:type d'argument incorrect: numberp: nil

 

Je pense que c'est une variable qui n'est pas définies lors de la 1ère utilisation, mais qui le devient après cet échec.

 

Donc pas bien grave (juste pour l'esthétique d'utilisation).

 

Pas d'autres observations, ça fonctionne Nickel, il ne manque plus que les Chromes ;)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Le petit soucis est réparé, c'était bien un problème de variable globale non définie.

 

Merci aux testeurs ;)

 

[Edité le 3/1/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

ERRATUM

 

Des tests plus poussés m'ont révélé un oubli pouvant provoquer un dysfonctionnement en cas d'entrée de nombres entiers dans les cases pour le décalage en hauteur et la rotation.

 

Cet oubli génère l'erreur de dédutant (dixit Tramber) du type :

(/ 10 3) -> 3 au lieu de (/ 10.0 3) ->3.33333

 

Le code ci-dessus est corrigé.

 

Sinon, on peut remplacer les lignes :

 

(setq ang (/ ang *nb_res_hel*))

et

(setq ht (/ ht *nb_res_hel*))

 

par, respectivement :

 

(setq ang (/ (float ang) *nb_res_hel*))

et

(setq ht (/ (float ht) *nb_res_hel*)) 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 5 semaines après...
Posté(e)

J'ai encore modifié le LISP ci-dessus pour une nouvelle version (la dernière ?) intégrant les sous-routines ANG2STR et STR2ANG qui permettent l'affichage et les entrées dans le système d'unités angulaires courant et les calculs en radians pour conserver toute la précision d'AutoCAD.

 

Cette petite application est aussi disponible dans les Téléchargements proposés par les membres sous la forme d'un unique fichier compilé : Res_hel.vlx.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

  • 4 mois après...
  • 2 semaines après...
  • 7 mois aprè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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é