coxsurf56 Posté(e) le 15 mars 2010 Posté(e) le 15 mars 2010 salutje fais un calcul dans mon lispet j'ai un nombre a virgule en resultatje voudrais recuperer la partie entiere du nombrequelle fonction fait ca? en gros j'ai(setq a(/ b 20))si b=405donc "a" = 202.5, moi je voudrais recuperer 202 pour "a"
capde06 Posté(e) le 15 mars 2010 Posté(e) le 15 mars 2010 un entier(fix 20.15) > 20 (setq a(fix(/ b 20))) en texte(rtos 20.15 2 0) > "20" [Edité le 15/3/2010 par capde06] Vous fîtes ce que vous pûtes et vous m'épatâtes !!!!
zebulon_ Posté(e) le 15 mars 2010 Posté(e) le 15 mars 2010 Bonjour, il faut quand même faire attention avec fix et rtos. Outre le fait que le premier retourne un entier et le second un texte, il y a aussi que fix retourne la partie entière et rtos un arrondi. Commande: (fix 20.7)20 Commande: (rtos 20.7 2 0)"21" Si on souhaite obtenir l'entier arrondi et non plus la partie entière, on peut toujours utiliser la commande fix, mais il faut rajouter 0.5 à la valeur du nombre. (setq x 20.7)(setq y 20.2) (fix (+ x 0.5))retourne21 (fix (+ y 0.5))retourne20 AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
coxsurf56 Posté(e) le 16 mars 2010 Auteur Posté(e) le 16 mars 2010 salutje suis encore perdu avec ces histoires de entier et reelapres un fix la valeur devient un entiermais un entier je ne peux pas m'en servir comme distance pour un deplacement?si oui ,qui peut me dire comment fairepour le moment j'ai ca(setq ab(fix(/ b 20)))(setq abc(/ (- b (* ab 20)) 2 ))(if (= abc 0) ;_ expression test (progn ;; alors (command "deplacer" "106,438" "103,440" "" "0,0" "10,0" ) ;;sinon (command "deplacer" "106,438" "103,440" "" "0,0" (list abc 0)) )) quand j'ai b=400 ab=20abc=0donc deplacement de 10si b=430ab=21abc=5donc deplacement de 5le deplacement de 10 se fait mais pas celui de 5
zebulon_ Posté(e) le 16 mars 2010 Posté(e) le 16 mars 2010 Bonjour, (setq ab(fix(/ b 20))) (setq abc(/ (- b (* ab 20)) 2 )) (if (= abc 0) ;_ expression test (progn ;; alors (command "deplacer" "106,438" "103,440" "" "0,0" "10,0" ) ;;sinon (command "deplacer" "106,438" "103,440" "" "0,0" (list abc 0)) ) ) Quand tu souhaites déposer un code, mets le entre 2 balises de code (le bouton # dans la barre d'outils), comme ci-dessus. Ce sera plus lisible. Il y a tout d'abord un soucis avec le if : malgré les commentaires que tu as rajouté les 2 (command "deplacer" ...) s'exécutent quand l'expression test est vrai. Lorsqu'elle est fausse, rien ne se passe. la syntaxe du if(if expr-test action-si-vrai [action-si-faux]) S'il y a plusieurs actions pour vrai ou pour faux, il faut mettre ces actions entre (progn ...), comme ceci (if expr-test (progn ;; alors (action-si-vrai1) (action-si-vrai2) ... ) ;; fin alors (progn ;; sinon (action-si-faux1) (action-si-faux2) ... ) ;; fin sinon ) ;; fin si Dans ton code, tu n'as mis qu'un seul (progn ...) : tout est donc regroupé dans le alors et il n'y a rien dans le sinon. Par ailleurs, pour utiliser la commande déplacer, il faut dire ce que l'on veut déplacer, ensuite indiquer un point de départ puis un point d'arrivée. Il faut préférer l'utilisation des noms de commandes internationales. (command "_move" e "" '(0 0 0) '(1 0 0)) où e est l'objet (ou le jeu de sélection) qu'on déplace de 1 unité vers la droite. Un point est une liste de 2 ou 3 réels qu'on peut construire avec la commande list. Attention aux accrochages aux objets : les ligne (command ...) y sont sensibles et il vaut mieux les inactiver pendant l'exécution du lisp. (setq ab(fix(/ b 20))) (setq abc(/ (- b (* ab 20)) 2 )) (setq e (car (entsel))) ;; sélectionne un objet ;; déplace l'objet de abc unités vers la droite, sans tenir compte des accroches objet (command "_move" e "" "_non" '(0 0) "_non" (list abc 0)) Quelques bases de syntaxe lisp utiles pour bien appréhender ce langage. AmicalementVincent [Edité le 16/3/2010 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
coxsurf56 Posté(e) le 16 mars 2010 Auteur Posté(e) le 16 mars 2010 Merci beaucoupeffectivement ca va etre mieuxencore des progres a faireet les accroche aux objets sint effectivement trop sensiblej'ai 3 resultats differents avec les meme valeursosmode a 0 n'est pas suffisant?je vais mettre tous ca en application
zebulon_ Posté(e) le 16 mars 2010 Posté(e) le 16 mars 2010 osmode a 0 n'est pas suffisant? Si, bien sûr. La seule chose, c'est que l'utilisateur se donne du mal à définir des modes d'accrochage dont il a besoin. Puis, il lance un lisp qui lui met OSMODE à 0 et il est bon pour se retaper la définition de ses accrochages aux objets. Forcément, il ne va pas être content... Si tu veux jouer avec la variable OSMODE plutôt que les "_non" comme ci dessus, il faut le faire de la manière suivante : (defun c:mafonction () (setq OLDOS (getvar "OSMODE")) ;; mettre de côté la valeur courante (setvar "OSMODE" 0) ;; pas d'accrochage aux objets (command ...) (command ...) ... (setvar "OSMODE" OLDOS) ;; remettre comme au début ) Si tu fais une gestion d'erreur (mais je crois qu'on n'en est pas encore là), il faut aussi y rajouter le rétablissement de la variable OSMODE pour faire tout à fait propre. AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
coxsurf56 Posté(e) le 16 mars 2010 Auteur Posté(e) le 16 mars 2010 okmercij'integre ca (les ligne osmode)nickelà mon prochain probleme
coxsurf56 Posté(e) le 17 mars 2010 Auteur Posté(e) le 17 mars 2010 salutnouveau problemeavant on pouvait au clavier ecrire -calque g toutmaintenant le tout est remplacé par *dans un liste ca passe pas qui peut me dire comment geler tous les calques sauf le courant en lisp?
zebulon_ Posté(e) le 17 mars 2010 Posté(e) le 17 mars 2010 (command "_-layer" "_freeze" "*" "") AmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
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