Invité pleche.damien Posté(e) le 28 juillet 2011 Posté(e) le 28 juillet 2011 BonjourDans mon lisp j'esaye de récupérer la valeur analytique de la variable Nivbis donné par la valeur numérique de "Niv_inf" , avec une précision de deux chiffres aprés la virgul... Comment faire??? Ci joint mon code: (setq Nivbis (itoa (fix Niv_inf))) (setq texte_Niv_inf (strcat Nivbis " ""m Arase inf ")) (command "texte" Pttext_Niv_inf 4 0 texte_Niv_inf) Remarque: si j'utilise la fonction itoa je suis obliger de fixé la variable se qui m'enlève mas précision souhaité, je pense utiliser "rtos" ou d'autre solutions. Donc si vous avez des infos n'hésité pas Merci.
didier Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 coucou valeur analytique qu'est ce que ça peut bien être ? a priori tu pars d'un "integer"que tu transformes en "string"puis tu concatènes la "string" avec une autre à quel moment veux-tu que ça devienne un "real" ? je ne comprends pas ton souci. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
vincentp010 Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Comme tu le dit toi même utilise rtosExtrait de l'aide d'autocad:(rtos number [mode [precision]]) Donc:(setq Nivbis (rtos Niv_inf 2 2)) Le premier 2 pour dire qu'on veut du décimal et le deuxième pour avoir deux chiffres après la virgule 1 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
Invité pleche.damien Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Oui Vincent c'est sa, malheuresement c'est mintenant mon premier niveau insérer qui bug: c'est à dire que la variable "Niv_sup" n'axcepte que un réel ENTIER mais pas de décimal je ne sais pourquoi ???? CI-JOINT mon lisp: remarque j'ai rajouté (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) (setvar "DIMZIN" 1)Dimzin à 1 pour axcepter les chiffre apres la virgil (setq accrochage (getvar "osmode")) (setvar "osmode" 0) (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) (setvar "DIMZIN" 1) (setq pt20 (polar pt08 (/ pi) 50)) ; défini le point haut du Niv (setq pt21 (polar pt01 (/ pi) 50)) ; défini le point bas du Niv (setq pt22 (polar pt20 (/ pi ) 42)) (setq pt23 (polar pt21 (/ pi) 42)) (command "inserer" "Niv" pt20 1 1 0 long "") ; inserer bloc (command "inserer" "Niv" pt21 1 1 0 long "") (setq Pttext_Niv_sup (polar pt22 (/ pi 2) 18)) ; défini le point du text [surligneur] (setq Niv (itoa Niv_sup))[/surligneur] ; réatribue les données de la variable Niv_sup à Niv; itoa permet de retransrire la valeur entière du réel (setq texte_Niv_sup (strcat Niv " ""m Arase sup ")) ; défini le texte au point (command "texte" Pttext_Niv_sup 4 0 texte_Niv_sup) ; lance la command texte (setq long_delta_arase (* (distance pt08 pt01) 0.01)) ; définition automatique du Niv inf. semelle (setq Niv_inf (- Niv_sup long_delta_arase)) (setq Pttext_Niv_inf (polar pt23 (/ pi 2) 18)) ;(setq Nivbis (rtos Niv_inf 2 0)) (setq Nivbis (rtos Niv_inf 2 2)) (setq texte_Niv_inf (strcat Nivbis " ""m Arase inf ")) (command "texte" Pttext_Niv_inf 4 0 texte_Niv_inf) MERCI pour votre aide
Invité pleche.damien Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Et j'ai essayé avec rtos pour le "Niv_sup" mais sa ne marche pas
didier Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Coucou on marche sur la tête là :réel ENTIER c'est ou l'un ou l'autre . pour passer un entier en décimal avec deux décimales non significativesil faut effectivement que la variable DIMZIN soit à 0 (zéro) révise les distinctions entre les entiers et les réels ;) amicalement [Edité le 29/7/2011 par didier] Éternel débutant... Mon site perso : Programmer dans AutoCAD
bonuscad Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Tu n'es vraiment pas clair, tu multiplies les envois sur le même sujet et on perd le fil. Bref... :mad: Pour le peu que j'ai suivi à droite et à gauche, essayes de comprendre ce qui suit:Je suis peut être à coté, mais vu la clarté de tes propos (setq val_meter (getreal "\nValeur en mètre?: ")) (setq val_centimeter (* 100 val_meter)) ;convertir val_centimeter avec arrondi supérieur en RESTANT un réel (setq val_conv_centimeter (float (read (rtos val_centimeter 2 0)))) (print val_conv_centimeter) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Invité pleche.damien Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 dsl bonuscad, la routine que tu mas donné je lés deja réaliser...(écrit autrement). Si tu veux j'insère de blocs niveaux ensuite je rentre le niveau du premier bloc, et mon programme calcul automatiquement mon deuxièmes niveaux ( et comme la variable delta est en cm je transforme tout en mètre). Les niveaux sont cotés en mètre. Je veux garder deux décimal aprés la virgul... Il se trouve que le deuxième Niveau (Niv_inf ) m'insère corectement mon niveau, mais le problème survien lorsque je rentre dans la variable (Niv_inf) un Nbre pas entier: "4.53" ERREUR, mon programme ne veut pa reconaitre ma valeur Comment faire merci amicalement
vincentp010 Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 C'est normal, tu utilises iota (que tu as surligné en jaune) qui converti un entier en texte.Donc si tu passe un réel à itoa il ne sait pas le traiter, utilise donc rtos. 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
didier Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Coucou extrait de mon livre : http://images.imagehotel.net/2nwhehf2wg.jpg amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Invité pleche.damien Posté(e) le 29 juillet 2011 Posté(e) le 29 juillet 2011 Oui didier mais comment faire pour une valeur à décimal ( 2 décimal après la virgul)... (setq Niv (itoa Niv_sup)) itoa marche pas comme il faut que un réel entier donc j'utilise rtos (présision 2 et 2 décimal)comme si dessous: (setq Nivbis (rtos Niv_inf 2 2)) Alors oui, dans mon programme rtos marche pour la variable "Niv_inf"mais pour "Niv_sup" sa ne marche pas ne sachant pourquoi !!! ??? (dsl mais je débute en lisp) (setq Niv (rtos Niv_sup 2 2)) il me mette cette érreur :erreur: type d'argument incorrect: numberp: nil ;quand je rentre une chiffre à virgul.... Pourcoi???? C'est bizar et dans l'espace objet il me mette "Nécessite une valeur entière" alors que j'utilise "RTOS" et quand j'inspecte la variable Niv_sup il me mette nil.... Pourtant j'ai bien pris en compte vos remarque mais la je boque donc je met mon lisp que vous pouvez utiliser: (il faut juste créer un bloc "Niv") (defun c:arase () (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) (setvar "DIMZIN" 1) (setq pt08 (getpoint "\n point d'insertion départ arase sup: coupe ")) (setq pt01 (getpoint "\n point d'insertion départ arase inf: coupe ")) (setq Niv_sup (getint "/n donner le Niv de l'arase sup semelle (m)")) (setq pt20 (polar pt08 (/ pi) 50)) ; défini le point haut du Niv (setq pt21 (polar pt01 (/ pi) 50)) ; défini le point bas du Niv (setq pt22 (polar pt20 (/ pi ) 42)) (setq pt23 (polar pt21 (/ pi) 42)) (command "inserer" "Niv" pt20 1 1 0 long "") ; inserer bloc (command "inserer" "Niv" pt21 1 1 0 long "") (setq Pttext_Niv_sup (polar pt22 (/ pi 2) 18)) ; défini le point du text (setq Niv (rtos Niv_sup 2 2)) ; réatribue les données de la variable Niv_sup à Niv; itoa permet de retransrire la valeur entière du réel (setq texte_Niv_sup (strcat Niv " ""m Arase sup ")) ; défini le texte au point (command "texte" Pttext_Niv_sup 4 0 texte_Niv_sup) ; lance la command texte (setq long_delta_arase (* (distance pt08 pt01) 0.01)) ; définition automatique du Niv inf. semelle (setq Niv_inf (- Niv_sup long_delta_arase)) (setq Pttext_Niv_inf (polar pt23 (/ pi 2) 18)) ;(setq Nivbis (rtos Niv_inf 2 0)) (setq Nivbis (rtos Niv_inf 2 2)) (setq texte_Niv_inf (strcat Nivbis " ""m Arase inf ")) (command "texte" Pttext_Niv_inf 4 0 texte_Niv_inf) ) ;(rtos Niv_inf 2 0),
didier Posté(e) le 1 août 2011 Posté(e) le 1 août 2011 Coucou je me perds dans les demandes d'explication dis-nous EXACTEMENT ce que tu veux faire par exemplej'ai "1.23" dans une variable alpha_varsous forme alphanumériqueet je veux le transformer en numérique et là je te répondrai(setq num_var (atof alpha_var))1.23 car depuis le début du message les explications avec des variables Niv_supne sont pas claires. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Invité pleche.damien Posté(e) le 1 août 2011 Posté(e) le 1 août 2011 :( se que je veux faire: est l'insertion de 2 niveaux (altimétrique). Mon programme sera capable de me calculer automatiquement le Niveau inférieur sachant que le Niveau supérieur sera connu... pour ensuite m'insérer mes niveaux Au niveau représentation : *j'ai deux blocs inséré automatiquement aux points d'insertions (Bloc "Niv") *Mes deux variables "Niv_sup" et "Niv_inf" doivent etre capable de recevoir un chiffre entier ou à virgul... *mon programme calcul automatiquement la différence d'altimétrie(setq Niv_inf (- Niv_sup long_delta_arase)) *mon programme sera capable de m'aficher mes deux Niveaux calculé (chiffre avec deux décimal aprés la virgul) VOILA SE QUE JE RECHERCHE A FAIRE.Cependant pour éviter de te retaper toute la routine je mes si dessous mon lisp que tu peut tester: (il suffit de créer le bloc "Niv") je pense que l'érreur se trouve à cette ligne: (setq Niv (rtos Niv_sup 2 2)) (defun c:arase () (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) (setvar "DIMZIN" 1) (setq pt08 (getpoint "\n point d'insertion départ arase sup: coupe ")) (setq pt01 (getpoint "\n point d'insertion départ arase inf: coupe ")) (setq Niv_sup (getint "/n donner le Niv de l'arase sup semelle (m)")) (setq pt20 (polar pt08 (/ pi) 50)) ; défini le point haut du Niv (setq pt21 (polar pt01 (/ pi) 50)) ; défini le point bas du Niv (setq pt22 (polar pt20 (/ pi) 42)) (setq pt23 (polar pt21 (/ pi) 42)) (command "inserer" "Niv" pt20 1 1 0 long "") ; inserer bloc (command "inserer" "Niv" pt21 1 1 0 long "") (setq Pttext_Niv_sup (polar pt22 (/ pi 2) 18)) ; défini le point du text ;; réatribue les données de la variable Niv_sup à Niv ;; itoa permet de retransrire la valeur entière du réel (setq Niv (rtos Niv_sup 2 2)) (setq texte_Niv_sup (strcat Niv " " "m Arase sup ")) ; défini le texte au point (command "texte" Pttext_Niv_sup 4 0 texte_Niv_sup) ; lance la command texte ;; définition automatique du Niv inf. semelle (setq long_delta_arase (* (distance pt08 pt01) 0.01)) (setq Niv_inf (- Niv_sup long_delta_arase)) (setq Pttext_Niv_inf (polar pt23 (/ pi 2) 18)) ;;(setq Nivbis (rtos Niv_inf 2 0)) (setq Nivbis (rtos Niv_inf 2 2)) (setq texte_Niv_inf (strcat Nivbis " " "m Arase inf ")) (command "texte" Pttext_Niv_inf 4 0 texte_Niv_inf) )
vincentp010 Posté(e) le 1 août 2011 Posté(e) le 1 août 2011 C'est la ligne où tu demande d'entrer le niveau qui est fausse:(setq Niv_sup (getint "/n donner le Niv de l'arase sup semelle (m)")) Là tu demande un entier avec getint alors que tu veux un réel, utilise donc getreal:(setq Niv_sup (getreal "/n donner le Niv de l'arase sup semelle (m)")) 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
(gile) Posté(e) le 1 août 2011 Posté(e) le 1 août 2011 pleche.damien, Par respect pour ceux qui te lisent et pourraient éventuellement te répondre, essaye de formater ton code pour qu'il soit plus facile à lire (Ctrl+Alt+F dans l'éditeur Visual LISP) et de faire en sorte que les commentaires dans le code tiennent sur un largeur raisonnable (n'obligeant pas l'utilisation de la barre de défilement horizontal dans le navigateur).Essaye aussi de faire un effort en ce qui concerne l'orthographe, personnellement, quand je vois un message truffé de fautes qui rendent difficile sa compréhension et qui, en plus, nécessite d'utiliser la barre de défilement horizontal, je passe mon chemin... En ce qui concerne ton code, en plus de ce que dit vincentp010, je ne vois qu'une autre erreur : la variable long n'est jamais initialisée. je pense que l'érreur se trouve à cette ligne: (setq Niv (rtos Niv_sup 2 2)) Il n'y a pas d'erreur dans cette expression, rtos accepte aussi bien des réels que des entiers.Tu peux facilement t'en rendre compte par toi même en entrant dans la console de l'éditeur Visual LISP ou en ligne de commande :(rtos 1 2 2)D'autre part, tu ne déclares pas tes variables en local, ce qui peut rendre le débogage plus difficile, et tu ne restitues pas aux variables systèmes leurs valeurs initiales. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Invité pleche.damien Posté(e) le 1 août 2011 Posté(e) le 1 août 2011 :D C'est bon merci Vincent tu as raison il faut utiliser "getreal".Faute de débutant... Sinon pour Gile je vais esayé de faire un effort au niveau de ma présentation.DSL pour l'hortographe c'est "maladif" chez moi. :P Juste un mot sur se que tu viens de dire: D'autre part, tu ne déclares pas tes variables en local, ce qui peut rendre le débogage plus difficile, . Je ne déclare pas mes variables en local puisque les routines que je développe sont ensuite insérées dans un programme plus complexe... Elles sont ensuite réutilisées.C'est pour sa que j'utilise des variables global (defun c:arase () sauf si mon analyse est mauvaise !!?? Et dernier chose que veux tu dire par la??? tu ne restitues pas aux variables systèmes leurs valeurs initiales tu parle de: (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) (setvar "DIMZIN" 1) comment faire??? Et encore merci pour votre aide trés précieuse.
VDH-Bruno Posté(e) le 3 août 2011 Posté(e) le 3 août 2011 Bonjour, citation extraite du message original:tu ne restitues pas aux variables systèmes leurs valeurs initiales tu parle de: (setvar "ATTREQ" 1) (setvar "ATTDIA" 0) (setvar "DIMZIN" 1) Oui bien c’est de celles-ci qu’il s’agit, et d’une manière général de toute celles que tu es amené à modifier avec la fonction setvar. comment faire??? Avec la fonction getvar tu interroge et mémorise l’état de ta variable système avant de la modifier avec setvar, puis en sortie de programme tu restitue son état initial à ta variable système . Si tu relis un de tes précédents messages tu verras qu’ici j’avais déjà évoqué cette fonction. Sinon si tu veux un exemple concret sur l’utilisation de getvar tu peux éventuellement consulter ce message, tu y trouveras également en fin de post une introduction à la gestion d’erreurs. A+ Apprendre => Prendre => Rendre
Invité pleche.damien Posté(e) le 3 août 2011 Posté(e) le 3 août 2011 Merci bruno je vais voir sa de plus pret... J'ai intégré la variable d'érreur que tu à créer, trés pratique lorsqu'il y a une intéruption du programme... Je comprend mieu l'utilisation des variable système. Je pense quand même définir mes autres variable en global et non en local pour queles autres routines de mon programme fonctionne... Merci encore a+
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant