LISP insertion de texte au milieu d'une ligne

Fermé
DC - 3 mai 2012 à 18:36
 Yoda - 3 mai 2012 à 22:45
Bonjour,

j'ai un souci dans un exo qui me dessine des place de parking.
je n'arrive pas a inserer le texte index au milieu du dessin
si quelqu'un peu m'expliquer mon erreur merci
je pense que ça vient d'un problème d'angle
voici le code

(defun C:parking ()
(setvar "cmdecho" 0)
(command "scu" "")
( setvar "osmode" 0); accrochage au objet inactif
;détermination des points
(setq pt0 (getpoint "\nPoint de départ du parking :"))
(setq nbplace (getstring "\nNombre de place de parking :"))
(setq ang0 (getangle pt0 "\nAngle d'orientation des marches /Ox :"))
(setq larg 2.3)
(setq long 5.0)
; calcul des autre points
(setq pt1 (polar pt0 (+ ang0 (/ pi 2)) larg))
(setq pt2 (polar pt1 ang0 long))
(setq pt3 (polar pt0 ang0 long))
(setq pt4 (polar pt0 (+ ang 0 (/ pi 2 )) (* larg nbplace)))
; tracé des places
(command "polylign" pt0 "la" 0 0 pt1 pt2 pt3 pt0 "cl")
(command "scu" "3" pt0 pt1 pt3)
(command "reseau" "d" "" "r" 1 nbplace larg"")
;on ajoute du texte
(command "scu" "g")
(command "scu" "3" pt3 pt2 pt0)
(setq index (strcat nbplace " Place(s)"))
(command "texte" "j" "MC" pt3 0.2 pt4 index)
;Revenir aux propriétés de départ
(command "scu" "Général")
)



A voir également:

1 réponse

Bonjour,

Il y avait plusieurs petites choses qui clochaient, voici la correction
Si tu as des interrogations, n'hesites pas à demander

(defun C:parking () 
  (setvar "cmdecho" 0) 
  (command "scu" "") 
  (setvar "osmode" 0); accrochage au objet inactif 

;détermination du nombre de places 
  (setq nbplace (getint "\nNombre de places de parking :"))
  (if (or (= nbplace nil) (< nbplace 1)) (exit))

;détermination des points 
  (setq pt0 (getpoint "\nPoint de départ du parking :")) 
  (setq ang0 (getangle pt0 "\nAngle d'orientation des places :")) 
  (setq larg 2.3) 
  (setq long 5.0)
 
; calcul des autre points 
  (setq pt1 (polar pt0 (+ ang0 (/ pi 2)) long)) 
  (setq pt2 (polar pt1 ang0 larg)) 
  (setq pt3 (polar pt0 ang0 larg)) 
  (setq pt4 (polar pt0 ang0 (/ (* larg nbplace) 2)))
  (setq pt4 (polar pt4 (+ ang0 (/ pi 2)) -0.2))
  (setq pt5 (polar pt4 ang0 larg)) 

; tracé des places 
  (command "polylign" pt0 "la" 0 0 pt1 pt2 pt3 "cl")
  (command "scu" "3" pt0 pt3 pt1)
  (if (> nbplace 1) 
    (command "reseau" "d" "" "r" 1 nbplace larg)
  ) 
;Revenir aux propriétés de départ 
  (command "scu" "g") 

;on ajoute du texte 
  (setq index (strcat (itoa nbplace) " Place(s)")) 
  (command "texte" "j" "MC" pt4 0.2 pt5 index) 
)
0
j'ai fait quelque modif ça marche comme je le souhaite
j'ai annoter le petit passage que je ne comprend pas trop
si tu peux me l'expliquer pour que je comprenne
merci

(defun C:parking ()
(setvar "cmdecho" 0)
(command "scu" "")
(setvar "osmode" 0); accrochage au objet inactif

;détermination du nombre de places
(setq nbplace (getint "\nNombre de places de parking :"))
(if (or (= nbplace nil) (< nbplace 1)) (exit)) ;si on oubli de rentré une valeur ou si on rentre une valeur nul ou négatif le programme se quite

;détermination des points
(setq pt0 (getpoint "\nPoint de départ du parking :"))
(setq ang0 (getangle pt0 "\nAngle d'orientation des places :"))
(setq larg 2.3)
(setq long 5.0)

; calcul des autre points
(setq pt1 (polar pt0 ang0 long))
(setq pt2 (polar pt1 (+ ang0 (/ pi 2)) larg))
(setq pt3 (polar pt0 (+ ang0 (/ pi 2)) larg))
(setq pt4 (polar pt1 (+ ang0 (/ pi 2)) (/ (* larg nbplace) 2))) ; la je comprend
(setq pt4 (polar pt4 ang0 -0.2)) ; ici j'ai du mal a comprende, on recréer un nouveau point pt4?
(setq pt5 (polar pt4 (+ ang0 (/ pi 2)) larg)) ; et la aussi je comprend pas trop

; tracé des places
(command "polylign" pt0 "la" 0 0 pt1 pt2 pt3 "cl")
(command "scu" "3" pt0 pt3 pt1)
(if (> nbplace 1)
(command "reseau" "d" "" "r" 1 nbplace larg)
)
;Revenir aux propriétés de départ
(command "scu" "g")

;on ajoute du texte
(setq index (strcat (itoa nbplace) " Place(s)"))
(command "texte" "j" "MC" pt4 0.2 pt5 index)
)
0
(setq pt4 (polar pt1 (+ ang0 (/ pi 2)) (/ (* larg nbplace) 2))) ; la je comprend

(setq pt4 (polar pt4 ang0 -0.2)) ; ici j'ai du mal a comprende, on recréer un nouveau point pt4?
Là, je décale le point pt4 par rapport à lui meme d'une distance de 0.2 pour ne pas le laisser sur la ligne, sinon le texte sera écrit sur la ligne et non devant la ligne.

(setq pt5 (polar pt4 (+ ang0 (/ pi 2)) larg)) ; et la aussi je comprend pas trop
Ce point pt5 servira à aligner le texte le long de la ligne.
(command "texte" "j" "MC" pt4 0.2 pt5 index)

;)
0