baf75 Posté(e) le 28 juin 2017 Posté(e) le 28 juin 2017 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 ;).
(gile) Posté(e) le 28 juin 2017 Posté(e) le 28 juin 2017 Salut, Probablement un problème d'accrochage aux objets, le plus simple est de forcer l'accrochage sur AUCun ou _NONe dans les expressions (command ...") : (command "_circle" "_non" (list (+ (car pt1) (* count DistC)) (cadr pt1) 0) 1) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
baf75 Posté(e) le 28 juin 2017 Auteur Posté(e) le 28 juin 2017 @(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.
(gile) Posté(e) le 28 juin 2017 Posté(e) le 28 juin 2017 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
baf75 Posté(e) le 28 juin 2017 Auteur Posté(e) le 28 juin 2017 Entendu, merci pour cette correction !
VDH-Bruno Posté(e) le 29 juin 2017 Posté(e) le 29 juin 2017 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
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