Aller au contenu

Boite de dialogue avec popup list


Messages recommandés

Posté(e)

Bonjour,

 

J'aimerai réaliser un programme permettant de créer une coupe de chaussée.

Mon programme comprend déjà une boite de dialogue avec deux popup list. Une pour demander le nom des éléments (ex: chaussée trottoir..) et une pour le type de bordure (T2,T1)

 

Pour l'instant mon programme dessine une bordure T2 tout le temps. j'aimerais que si je choisi une T1 elle change de dimension (Les dimensions sont déjà dans mon lisp)

 

Également j’aimerai une cotation des éléments avec le nom des éléments et leur longueur.

 

Aucun de mes professeur n'arrive a me répondre.

Je vous remercie

 

Voici mon lisp :

(defun chausse_dlg (nb / i tmp file lst dcl_id status result)

;; création d'un fichier DCL temporaire

(setq tmp (vl-filename-mktemp "tmp.dcl")

file (open tmp "w")

i 1

)

;; écriture du fichier DCL

(princ

"chaussee : dialog {

label = \"Profil type\";"

file

)

(repeat nb

(princ

(strcat

": row {

: popup_list {

key = \"type"

(itoa i)

"\";

label = \"Type d'élément "

(itoa i)

"\";

fixed_width_font = true;

width = 30;

value = \"0\";

}

: edit_box {

key = \"longueur"

(itoa i)

"\";

label = \"longueur"

(itoa i)

"\";

}

: edit_box {

key = \"pente"

(itoa i)

"\";

label = \"Pente"

(itoa i)

"\";

}}

 

: column {

: popup_list {

key = \"Séparateur"

(itoa i)

"\";

label = \"Séparateur "

(itoa i)

"\";

fixed_width_font = true;

width = 20;

value = \"0\";

}

}"

)

file

)

(setq i (1+ i))

)

(princ ": boxed_row { ok_cancel; }}" file)

(close file)

 

;; chargement de la boite de dialogue

(setq dcl_id (load_dialog tmp))

(new_dialog "chaussee" dcl_id)

 

(setq Names '("Chaussée" "Trottoir" "Parking" "piste cyclable" "végétation"))

(setq Bordure '("T2" "T3" "T4" "aucun"))

;; initialisation des rcontrôles

(setq i 1)

(repeat nb

(set (read (strcat "type" (itoa i))) (car Names))

(start_list (strcat "type" (itoa i)))

(mapcar 'add_list Names)

(end_list)

 

(set (read (strcat "Séparateur" (itoa i))) (car Bordure))

(start_list (strcat "Séparateur" (itoa i)))

(mapcar 'add_list Bordure)

(end_list)

 

(action_tile

(strcat "type" (itoa i))

(vl-princ-to-string

(list 'setq

(read (strcat "type" (itoa i)))

'(nth (atoi $value) Names)

)

)

)

(action_tile

(strcat "longueur" (itoa i))

(vl-princ-to-string

(list 'setq (read (strcat "longueur" (itoa i))) '$value)

)

)

(action_tile

(strcat "pente" (itoa i))

(vl-princ-to-string

(list 'setq (read (strcat "pente" (itoa i))) '$value)

)

)

 

(action_tile

(strcat "Séparateur" (itoa i))

(vl-princ-to-string

(list 'setq

(read (strcat "Séparateur" (itoa i)))

'(nth (atoi $value) Bordure)

)

)

)

(setq i (1+ i))

)

 

(action_tile "accept" "(done_dialog 1)")

(action_tile "cancel" "(done_dialog 0)")

 

;; affichage de la boite de dialogue

(setq status (start_dialog))

(unload_dialog dcl_id)

 

;; suppression du ficher DCL temporaire

(vl-file-delete tmp)

 

;; traitement des données

(if (= status 1)

(repeat nb

(setq i (1- i)

result (cons

(mapcar

'(lambda (s) (eval (read (strcat s (itoa i)))))

'("type" "longueur" "pente" "Séparateur")

)

result

)

)

(foreach s '("type" "longueur" "pente" "Séparateur")

(set (read (strcat s (itoa i))) nil)

)

)

)

result

)

 

 

 

;

 

 

(defun Structure_dlg (nb2 / i tmps file2 lst dcl_id2 status2 result)

;; création d'un fichier DCL temporaire

(setq tmps (vl-filename-mktemp "tmps.dcl")

file2 (open tmps "w")

i 1

)

;; écriture du fichier DCL

(princ

"Structure : dialog {

label = \"Structure\";"

file2

)

(repeat nb

(princ

(strcat

": row {

: popup_list {

key = \"type"

(itoa i)

"\";

label = \"Type d'élément "

(itoa i)

"\";

fixed_width_font = true;

width = 30;

value = \"0\";

}}"

 

)

file2

)

(setq i (1+ i))

)

 

(setq i 1)

(repeat nb2

(princ

(strcat

 

" : row {

: edit_box {

key = \"Nom"

(itoa i)

"\";

label = \"Nom matériaux"

(itoa i)

"\";

}

: edit_box {

key = \"Epaisseur"

(itoa i)

"\";

label = \"Epaisseur"

(itoa i)

"\";

}

}

"

 

)

file2

)

(setq i (1+ i))

)

(princ ": boxed_row { ok_cancel; }}" file2)

(close file2)

 

;; chargement de la boite de dialogue

(setq dcl_id2 (load_dialog tmps))

(new_dialog "Structure" dcl_id2)

 

(setq Names '("Chaussée" "Trottoir" "Parking" "piste cyclable" "végétation"))

;; initialisation des rcontrôles

(setq i 1)

(repeat nb2

(set (read (strcat "type" (itoa i))) (car Names))

(start_list (strcat "type" (itoa i)))

(mapcar 'add_list Names)

(end_list)

(action_tile

(strcat "type" (itoa i))

(vl-princ-to-string

(list 'setq

(read (strcat "type" (itoa i)))

'(nth (atoi $value) Names)

)

)

)

(setq i 1)

(action_tile

(strcat "Nom" (itoa i))

(vl-princ-to-string

(list 'setq (read (strcat "Nom" (itoa i))) '$value)

)

)

(action_tile

(strcat "Epaisseur" (itoa i))

(vl-princ-to-string

(list 'setq (read (strcat "Epaisseur" (itoa i))) '$value)

)

)

(setq i (1+ i))

)

(action_tile "accept" "(done_dialog 1)")

(action_tile "cancel" "(done_dialog 0)")

 

;; affichage de la boite de dialogue

(setq status2 (start_dialog))

(unload_dialog dcl_id2)

 

;; suppression du ficher DCL temporaire

(vl-file-delete tmps)

 

;; traitement des données

(if (= status2 1)

(repeat nb2

(setq i (1- i)

result (cons

(mapcar

'(lambda (s) (eval (read (strcat s (itoa i)))))

'("type" "Nom" "Epaisseur")

)

result

)

)

(foreach s2 '("type" "Nom" "Epaisseur")

(set (read (strcat s2 (itoa i))) nil)

)

)

)

result

)

 

 

;

 

(defun T2()

(setq p2 (polar Pt2 (/ pi 2) 0.25))

(setq p3 (polar p2 0 0.15))

(setq p4 (polar Pt2 0 0.15))

(command "polylign" Pt2 p2 p3 p4 "c")

(princ)

)

 

;

 

(defun T3()

(setq p2 (polar Pt2 (/ pi 2) 0.28))

(setq p3 (polar p2 0 0.17))

(setq p4 (polar Pt2 0 0.17))

(command "polylign" Pt2 p2 p3 p4 "c")

(princ)

)

 

;

 

(defun T4()

(setq p2 (polar Pt2 (/ pi 2) 0.30))

(setq p3 (polar p2 0 0.20))

(setq p4 (polar Pt2 0 0.20))

(command "polylign" Pt2 p2 p3 p4 "c")

(princ)

)

 

;

 

(defun c:test (/ nb Pt1 ang0 hyp Pt2)

(setq i 1)

 

(initialisation)

(setvar "osmode" 0)

(setvar "aunits" 0)

 

(initget 7)

(setq Pt1 (getpoint "Choisi l'axe de la chaussée"))

(setq Pta Pt1)

(setq nb

(getint

"\nDonner le nombre d'élément voulu sur le demi-profil droit: (exemple:chaussée,piste cyclable, parking...)"

)

)

 

(foreach n (chausse_dlg nb)

(setq ang0 (atan (/ (distof (caddr n)) 90)))

(setq hyp (/ (distof (cadr n)) (cos ang0)))

(setq Pt2 (polar Pt1 ang0 hyp))

(command "_.pline" "_non" Pt1 "_non" Pt2 "")

 

(setq p2 (polar Pt2 (/ pi 2) 0.25))

(setq p3 (polar p2 0 0.15))

(setq p4 (polar Pt2 0 0.15))

(command "polylign" Pt2 p2 p3 p4 "c")

(princ)

 

(setq Pt1 p3)

)

 

; (cond

; ((= i 0)(T2))

; ((= i 1)(T3))

; ((= i 2)(T4))

; )

 

 

(setq p5 (polar Pta (/ pi 2) 1))

 

 

 

(initget 1 "Oui Non")

(setq kw(getkword "\nSouhaitez vous une symétrie du demi-profil ? [Oui/Non] <N>: "))

(if (= kw "Oui")

(command "MIROIR" "tout" "" Pta p5 "n")

()

)

 

 

 

 

(princ "\nSélectionner la polyligne à coter. ")

 

(setq js (ssget "_+.:E:S" '((0 . "LWPOLYLINE"))))

 

(cond

 

(js

 

(vl-load-com)

 

(setq

 

dxf_ent (entget (setq ent (ssname js 0)))

 

lst_pt (mapcar

 

'(lambda (x) (trans x ent 0))

 

(mapcar

 

'cdr

 

(vl-remove-if '(lambda (x) (/= (car x) 10)) dxf_ent)

)

)

)

 

(if (= 1 (logand 1 (cdr (assoc 70 dxf_ent))))

 

(setq lst_pt (reverse (cons (car lst_pt) (reverse lst_pt))))

 

)

 

(setq

 

AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))

 

Space

 

(if (= 1 (getvar "CVPORT"))

 

(vla-get-PaperSpace AcDoc)

 

(vla-get-ModelSpace AcDoc)

)

)

 

(if (equal (car lst_pt) (last lst_pt) 1e-9)

 

(vla-addDimAngular

 

Space

 

(vlax-3d-point (car lst_pt))

 

(vlax-3d-point (cadr (reverse lst_pt)))

 

(vlax-3d-point (cadr lst_pt))

 

(vlax-3d-point

 

(polar

 

(car lst_pt)

 

(angle

 

(car lst_pt)

 

(mapcar '*

 

(mapcar '+ (cadr (reverse lst_pt)) (cadr lst_pt))

 

'(0.5 0.5 0.5)

)

)

(* 10 (getvar "DIMTXT"))

)

)

)

)

 

(while (cdr lst_pt)

 

(vla-addDimAligned

 

Space

 

(vlax-3d-point (car lst_pt))

 

(vlax-3d-point (cadr lst_pt))

 

(vlax-3d-point

 

(polar

 

(mapcar '*

 

(mapcar '+ (car lst_pt) (cadr lst_pt))

 

'(0.5 0.5 0.5)

 

)

 

(+ (angle (car lst_pt) (cadr lst_pt)) (* pi 0.5))

 

(* 10 (getvar "DIMTXT"))

)

)

)

 

(if (cddr lst_pt)

 

(vla-addDimAngular

 

Space

 

(vlax-3d-point (cadr lst_pt))

 

(vlax-3d-point (car lst_pt))

 

(vlax-3d-point (caddr lst_pt))

 

(vlax-3d-point

 

(polar

 

(cadr lst_pt)

 

(angle

 

(cadr lst_pt)

 

(mapcar '*

 

(mapcar '+ (caddr lst_pt) (car lst_pt))

 

'(0.5 0.5 0.5)

)

)

(* 10 (getvar "DIMTXT"))

)

)

)

)

(setq lst_pt (cdr lst_pt))

)

)

)

 

(prin1)

 

 

(princ)

 

(reini)

)

 

 

 

(defun initialisation()

(setq acob (getvar "osmode"))

(setq units (getvar "aunits"))

)

 

(defun reini()

(setvar "osmode" acob)

(setvar "aunits" units)

)

 

(defun recup()

(setq a (get_tile "Séparateur"))

(setq i (atoi a))

(done_dialog)

)

Posté(e)

Salut Lolo.

 

Trois petites choses.


  1.  
  2. Tu aurais du poster dans "CADxp\Programmation\LISP et Visual LISP\...".
  3. Mettre en forme ton post.
  4. Et personnellement, j'aurai fais un .Lsp ET une .Dcl. Bien plus facile à mes yeux à gérer.

Tu auras, je l'espère, plus de réponses...

 

Tu peux aussi faire un tour sur da-code.fr.

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é