Aller au contenu

Jonction Lisp et DCL


Messages recommandés

Posté(e)

Bonjour à tous,

 

Débutant en Lisp et nouveau sur le forum, j'ai donc besoin de vos conseil concernant la liaison entre une boite de dialogue et une programmation lisp.

 

J'ai adapté une fonction de tracé d'un escalier pour que celle-ci me trace un parking. J'ai voulu introduire un boite de dialogue DCL à ce programme pour entré les dimensions, le nombre et l'angle du tracé des places de parking.

Cependant quand je lance ma commande la boite de dialogue s'affiche mais ne lance pas le tracé du parking.

D'ou ma question comment joindre le dcl et le lisp ?

 

 

 

Le fichier DCL:

 

parkingbis:dialog {label="parking";

:row {

/*:image {width=20;aspect_ratio=1;color=1;fixed_height=true;key=img;}*/

:boxed_column {label="Choix";

/*:radio_row {

:radio_button {label="Avec Poly";key=avec;}

:radio_button {label="Sans Poly";key=sans;}

}*/

:edit_box {label="&Nombre de place:";/*edit_width=6;fixed_width=true;*/key=nbplace;}

:edit_box {label="&Longueur de place:";/*edit_width=6;fixed_width=true;*/key=long;}

:edit_box {label="L&argeur de place:";/*edit_width=6;fixed_width=true;*/key=larg;}

:edit_box {label="&Angle/ox des places : ";/*edit_width=6;fixed_width=true;*/key=ang0;}

 

spacer_1;

 

}

 

 

}

:row {ok_cancel;}

:row {errtile;}

}

 

 

Le LISP:

 

 

(defun c:parking ()

 

 

(setq dcl_id (load_dialog "parkingbis.DCL")) ;charge la boite de dialogue

(if (not (new_dialog "parkingbis" dcl_id) ;si il ne la trouve pas il sort "exit"

) (exit))

 

 

 

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

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

 

 

(setq ok (start_dialog)) ;test pour savoir si tout a ete entré

(unload_dialog dcl_id)

 

(if (and (= ok 1) (/= nbplace1 nil) (/= larg1 nil) ) ; si toutes les données sont rentrées

 

(c:stationnement); on lance la fonction parking

)

 

;(princ)

 

 

)

 

 

(defun c:stationnement(/ pt0 pt1 larg long ang0 nbplace)

;recup donné initial

;(c:initial)

;création calque

(command "-calque" "E" "Stationnement" "co" "1" "stationnement" "tl" "continuous" "stationnement" "")

; Ne pas afficher dans le barre de commande toutes les étapes de calcul

(setvar "cmdecho" 0)

;permet de se mettre dans le repère général

(command "scu" "")

; enleve les accrochages objets

(setvar "osmode" 0)

;pt0 : point de départ du stationnement dans le SCG

(setq pt0 (getpoint "\nPoint de départ des places de stationnement ( pour tracer en haut de la polyligne,aller de droite à gauche ; pour tracer en bas de gauche à droite):"))

;larg : largeur des places de parking

;(setq larg (getdist "\nlargeur des places (ou 2 points) :"))

;long : longueur des places

;(setq long (getdist "\nlongueur des places (ou 2 points) :"))

;nbmarch : nombre de places

;(setq nplace (getint "\nNombre de places de stationnement :"))

;ang0 : orientation angulaire / axe des x

;(setq ang0 (getangle pt0 "\nAngle d'orientation des places /Ox :"))

;tracé de la 1ère place

(command "polylign" pt0 "la" 0 0

(polar pt0 ang0 long )

(polar (getvar "lastpoint") (+ ang0 (/ pi 2)) larg)

(polar (getvar "lastpoint") (+ ang0 pi) long)

"cl";permet de clore les polyligne

)

;plaçons nous dans le scu de cette place pour pouvoir la dupliquer

(command

"scu" "3" pt0 (polar pt0 ang0 1)(polar pt0 (+ ang0 (/ pi 2)) 1)

"reseau" "d" "" "r" nplace 1 larg

)

(command "scu" "general"

)

(command "texte" "")

)

Posté(e)

Salut,

 

j'ai regardé vite fait ton lisp et voici ma correction

 

Dans la ligne action_tile "accept" il faut que tu récupères les valeurs de la boite dans des variables

Quand tu vérifies si toutes les données sont rentrées, fait attention au nom de tes variables (tu avais larg1 par exemple)

Plus loin, tu doit convertir tes valeurs, qui sont du texte, en nombre avec atoi ou atof

 

(defun c:parking ()


(setq dcl_id (load_dialog "parkingbis.DCL")) ;charge la boite de dialogue
(if (not (new_dialog "parkingbis" dcl_id) ;si il ne la trouve pas il sort "exit"
) (exit))



(action_tile "accept" "(setq nbplace (get_tile\"nbplace\") larg (get_tile\"larg\") long (get_tile\"long\") ang0 (get_tile\"ang0\")) (done_dialog 1)")
(action_tile "cancel" "(done_dialog 0)")


(setq ok (start_dialog)) ;test pour savoir si tout a ete entré
(unload_dialog dcl_id)

(if (and (= ok 1) (/= nbplace nil) (/= larg nil) (/= long nil) (/= ang0 nil)) ; si toutes les données sont rentrées

(stationnement nbplace larg long ang0); on lance la fonction parking
)

;(princ)


)


(defun stationnement(nbplace larg long ang0 / pt0 pt1)
;recup donné initial
;(c:initial)
;création calque
(command "-calque" "E" "Stationnement" "co" "1" "stationnement" "tl" "continuous" "stationnement" "")
; Ne pas afficher dans le barre de commande toutes les étapes de calcul
(setvar "cmdecho" 0)
;permet de se mettre dans le repère général
(command "scu" "")
; enleve les accrochages objets
(setvar "osmode" 0)
;pt0 : point de départ du stationnement dans le SCG
(setq pt0 (getpoint "\nPoint de départ des places de stationnement ( pour tracer en haut de la polyligne,aller de droite à gauche ; pour tracer en bas de gauche à droite):"))
;larg : largeur des places de parking
;(setq larg (getdist "\nlargeur des places (ou 2 points) :"))
(setq larg (atof larg))
;long : longueur des places
;(setq long (getdist "\nlongueur des places (ou 2 points) :"))
(setq long (atof long))
;nbmarch : nombre de places
;(setq nplace (getint "\nNombre de places de stationnement :"))
(setq nbplace (atoi nbplace))
;ang0 : orientation angulaire / axe des x
;(setq ang0 (getangle pt0 "\nAngle d'orientation des places /Ox :"))
(setq ang0 (atof ang0))
;tracé de la 1ère place
(command "polylign" pt0 "la" 0 0
(polar pt0 ang0 long )
(polar (getvar "lastpoint") (+ ang0 (/ pi 2)) larg)
(polar (getvar "lastpoint") (+ ang0 pi) long)
"cl";permet de clore les polyligne
)
;plaçons nous dans le scu de cette place pour pouvoir la dupliquer
(command
"scu" "3" pt0 (polar pt0 ang0 1)(polar pt0 (+ ang0 (/ pi 2)) 1)
"reseau" "d" "" "r" nbplace 1 larg
)
(command "scu" "general")
)

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Posté(e)

Merci Vincentp010 !!!

 

Mon erreur venait de l'adaptation du lisp de l'escalier et de la conversion des chaîne en nombre entier/réel si j'ai bien compris.

 

Encore merci.

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é