Programme LISP problème avec strcat

Fermé
bocman - 2 mars 2012 à 11:18
 Yoda - 2 mars 2012 à 18:24
Bonjour,

J'au un souci dans ma petite programmation lisp
à la fin du programme je demande a ce que long s'affiche ac le bloc pot_clôture, mais quant j'exécute le programme mon bloc au dernier point apparaît, mais il ne m'affiche pas la longueur.

voici le programme

(defun c:cloture()
(setvar "cmdecho"0)
(setvar "osmode" 0) ;enlève l'accrochage au objet
(setq d (getdist "\nDonner l'éspacement entre les poteaux: ")) ;Espacement entre les poteau
(setq p1 (getpoint "\nCliquer le point de début de la clôture: ")) ; Point de départ de la cloture
(setq long 0) ; initialise la longueur à 0
(terpri)(setq rep "O") ; saute une ligne
(while (or (= rep "O") (= rep "OUI")) ; debut de la boucle , si O ou Oui = "oui"
(setq p2 (getpoint "\nCliquer le point extrémité de la clôture: ")) ; p2 = le point de fin de la cloture
(prompt "\nJe dessine patience patience...") ; l'ordi réfléchi
(setq d1 (distance p1 p2)); d1 et le calcul de la distance p1 et p2
(setq long (+ long d1)) ; aditionne toute les distances d1 de la boucle
(setq alfa (angle p1 p2)) ; alpha et l'angle entre l'axe horizontal et la droite P1P2
(setq nbre (/ d1 d)) ; nbre détermine le nombre d'espacement en divisant la distance d1 par d
(command "polylign" p1 "la" 0.02 0.02 p2 "") ; la commande polylign trace la ligne entre les points p1 et p2 la correspond à la largeur de la ligne, ici la largeur de début est 0.02 et la largeur de fin est 0.02
(setq n (fix nbre)); n correspond au noombre de poteau pour le déterminer on récupère la valeur entière à nbre
(setq n (+ 1 n)); addtionne tous les n (nbre de poteau)de la boucle
(if (> 2.0 (rem d1 d))
(progn
(repeat (- n 1) ; repette le dessin poteau
(progn
(setq p3 (polar p1 alfa 0.2)) ; oriente les poteaux sur la ligne de cloture en partant du point P1 et partant au point P3 de 0.2
(command "polylign" p1 "la" 0.2 0.2 p3 "") ; dessine le poteau qui correspond au point p1 à p2 par une polyligne de largeur 0.2
(setq p1 (polar p1 alfa d))
)
)
)
(progn
(repeat n ; répette le dessin poteau
(progn
(setq p3 (polar p1 alfa 0.2)) ; oriente les poteaux sur la ligne de cloture en partant du point P1 et partant au point P3 de 0.2
(command "polylign" p1 "la" 0.2 0.2 p3 "") ; dessine le poteau qui correspond au point p1 à p2 par une polyligne de largeur 0.2
(setq p1 (polar p1 alfa d))
)
)
)
)
(setq p1 p2)
(setq rep (strcase(getstring "\nVoulez vous continuez la cloture (o/n): ")))
)
(command "polylign" p2 "la" 0 0 p2 "")
(setq long (rtos long 2 2))
(command "inserer" "Pot_Cloture" p2 1 1 0 (strcat "L =" LONG "ml")"")
(command "redess")
)


1 réponse

Bonjour

Tu dois convertir LONG en une chaine de caractère avant de passer le paramètre à la fonction strcat

(command "inserer" "Pot_Cloture" p2 1 1 0 (strcat "L =" (rtos LONG 2 2) "ml")"") 


;)
0
ça ne marche toujours pas
0
Autant pour moi, je n'avais pas vu que tu avais converti LONG en chaine juste la ligne au dessus.

Est-ce que tu as un attribut attaché à ton bloc "Pot_Cloture"? Parce que sinon pas besoin de rajouter du texte apres p2 1 1 0.

;)
0