Aller au contenu

[Résolu] Problème de code Lisp


baf75

Messages recommandés

Bonjour,

 

J'ai consulté pas mal d'information sur ce forum que je trouve très intéressant au passage.

Le problème que je rencontre concerne le code suivant supposé créer des cercles à intervalle régulier (qui dépend de la distance entre pt1 et pt2, qui sont des points sélectionnés préalablement par l'utilisateur):

 

(setq DistCalc (sqrt (+ (expt (- (car pt1) (car pt2)) 2) (expt (- (cadr pt1) (cadr pt2)) 2))))
(setq NbC (- (fix (/ DistCalc 3.0)) 1))

(setq DistC (/ DistCalc (+ NbC 1)))
(setq count 1)


(while (< count NbC) 
 
(if (eq *AxC* 1)
  (progn
  (command "_circle" (list (+ (car pt1) (* count DistC)) (cadr pt1) 0) 1)
  (setq count (+ count 1))
  )
)
(if (= *AxC* 2)
  (progn
  (command "_circle" (list (car pt1) (+ (cadr pt1) (* count DistC)) 0) 0.3)
  (setq count (+ count 1))
  )
)

 

Je pense que le problème vient de la boucle while et/ou de la compatibilité du format des variables.

Par exemple, même le code suivant ne fonctionne pas (j'obtient bien 6 cercles mais superposés 2 à 2... plus étrange, si je change le rayon des cercles à 0.3 au lieu de 1.0, alors ça fonctionne et j'obtient bien les 6 cercles !

 

(defun c:0CircWhile (/ Nb ii)

(setq 
ii 0
Nb 6)

(while (< ii Nb) 
(command "_circle" (list (+ ii 2) 0 0) 1.0)
(setq ii (1+ ii))
)

 (princ)
)

 

Merci d'avance pour vos clarifications. Au passage, si vous avez des suggestions de code pour permettre la création des cercles même si les points ne sont pas parallèles à X ou Y, je suis preneur ;).

Lien vers le commentaire
Partager sur d’autres sites

@(gile): Ca fonctionne ! Merci beaucoup pour ta réponse, et au passage aussi pour les documents que tu partages. D'ailleurs je me rappel maintenant avoir vu ce "_non" dans un de tes codes... Mais ne sachant pas à quoi ça servait, je l'ai omis au fur et à mesure que j'avançais dans mon développement de code lisp.

Ok donc à l'avenir, pour toutes les "command" dans un code lisp j'ajouterai "_non" après le nom de la commande.

Lien vers le commentaire
Partager sur d’autres sites

Ok donc à l'avenir, pour toutes les "command" dans un code lisp j'ajouterai "_non" après le nom de la commande.

 

C'est plutôt "_non" avant chaque spécification de point dans une expression command :

 

(command "_.line" "_non" pt1 "_non" pt2 "")

 

(command "_.zoom" "_extents")

 

On peut aussi désactiver tous les accrochages en début de routine et restaurer la valeur initiale de OSMODE à la fin de la routine :

 

;; enregistrement de la valeur initiale de OSMODE
(setq osmode (getvar "OSMODE")
;; désactivation des accrochages aux objets
(setvar "OSMODE" 0)

;; corps de la routine

;; restauration des accrochages
(setvar "OSMODE" osmode)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

En complément de ce qui précède la variable OSNAPCOORD, permet de préciser les priorités lors d'éventuels conflit entre les accrochages objets en cours et les saisies clavier de coordonnées (dans ou en dehors des scripts).

 

Par défaut cette variable est réglée sur 2, dans ton cas il peut être intéressant d'envisager un réglage à 1.

 

A+ Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é