Aller au contenu

Messages recommandés

Posté(e)

salut

je fais un calcul dans mon lisp

et j'ai un nombre a virgule en resultat

je voudrais recuperer la partie entiere du nombre

quelle fonction fait ca?

 

en gros j'ai

(setq a(/ b 20))

si b=405

donc "a" = 202.5, moi je voudrais recuperer 202 pour "a"

 

Posté(e)

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 !!!!

Posté(e)

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))

retourne

21

 

(fix (+ y 0.5))

retourne

20

 

Amicalement

Vincent

 

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)

Posté(e)

salut

je suis encore perdu avec ces histoires de entier et reel

apres un fix la valeur devient un entier

mais un entier je ne peux pas m'en servir comme distance pour un deplacement?

si oui ,qui peut me dire comment faire

pour 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=20

abc=0

donc deplacement de 10

si b=430

ab=21

abc=5

donc deplacement de 5

le deplacement de 10 se fait mais pas celui de 5

Posté(e)

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.

 

Amicalement

Vincent

 

 

[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)

Posté(e)

Merci beaucoup

effectivement ca va etre mieux

encore des progres a faire

et les accroche aux objets sint effectivement trop sensible

j'ai 3 resultats differents avec les meme valeurs

osmode a 0 n'est pas suffisant?

je vais mettre tous ca en application

 

Posté(e)

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.

 

Amicalement

Vincent

 

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)

Posté(e)

salut

nouveau probleme

avant on pouvait au clavier ecrire -calque g tout

maintenant 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?

Posté(e)

(command "_-layer" "_freeze" "*" "")

 

Amicalement

Vincent

 

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)

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é