caojesig Posté(e) le 19 mai 2010 Posté(e) le 19 mai 2010 Bonjour, J'aimerais faire cette comande raccord en automatique , voici un morceau du programme : - le premier objet qui correspond à 35_RAC_L1- le deuxieme objet qui correspond à 35_RAC_L2 (setq 35_RAC_L1 (car 35_LISTERAC)) ; issue d'une liste de paire pointée(setq 35_RAC_L2 (car (cdr 35_LISTERAC))) (setvar "cmddia" 0)(command "_fillet" "_r" 35_RAC_COUDE) (command "_fillet" "" 35_RAC_L1 "" 35_RAC_L2 "") (setvar "cmddia" 1) Pourquoi cela ne marche pas ? Merci pour votre aide
zebulon_ Posté(e) le 19 mai 2010 Posté(e) le 19 mai 2010 Bonjour, la commande _fillet demande de sélectionner un segment puis un second. Il n'y a pas besoin de valider comme lorsqu'il y a un "choix des objets" et les "" ne sont donc pas nécessaires.D'autre part, il y a la variable FILLETRAD qui est peut être plus facile à gérer pour changer la valeur du rayon que la commande "_fillet" (defun c:testfillet (/ seg1 seg2 oldfilletrad) (setq seg1 (car (entsel "\nsegment 1 : "))) (setq seg2 (car (entsel "\nsegment 2 : "))) (setq oldfilletrad (getvar "filletrad")) ;; mettre de côté la valeur actuelle du rayon de congé (setvar "filletrad" 100) ;; fixer le rayon du congé de raccordement à la valeur souhaitée (command "_fillet" seg1 seg2) ;; faire la raccord (setvar "filletrad" oldfilletrad) ;; remettre la valeur d'origine (princ) ) 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)
caojesig Posté(e) le 20 mai 2010 Auteur Posté(e) le 20 mai 2010 Bonjour, la commande _fillet demande de sélectionner un segment puis un second. Il n'y a pas besoin de valider comme lorsqu'il y a un "choix des objets" et les "" ne sont donc pas nécessaires.D'autre part, il y a la variable FILLETRAD qui est peut être plus facile à gérer pour changer la valeur du rayon que la commande "_fillet" (defun c:testfillet (/ seg1 seg2 oldfilletrad) (setq seg1 (car (entsel "\nsegment 1 : "))) (setq seg2 (car (entsel "\nsegment 2 : "))) (setq oldfilletrad (getvar "filletrad")) ;; mettre de côté la valeur actuelle du rayon de congé (setvar "filletrad" 100) ;; fixer le rayon du congé de raccordement à la valeur souhaitée (command "_fillet" seg1 seg2) ;; faire la raccord (setvar "filletrad" oldfilletrad) ;; remettre la valeur d'origine (princ) ) Bonjour, Merci pour ton aide, Mais je veux impérativement uiliser la variable seg1 et seg2 issue d'une liste de paires pointées. Je ne veux pas faire de sélection manuelle. liste de lignes créer auparavant dans le programme sur une selection du chemin de lignes (setq seg1 (car 35_liste)) (setq seg2 (car (cdr 35_liste))) (setq oldfilletrad (getvar "filletrad")) (setvar "filletrad" 35_RAC_COUDE) (command "_fillet" seg1 seg2) (setvar "filletrad" oldfilletrad) Est possible? Merci de votre aide
(gile) Posté(e) le 20 mai 2010 Posté(e) le 20 mai 2010 Salut, Si 35_liste est une paire pointée, (car (cdr 35_liste)) -qui peut s'écrire plus simplement (cadr 35_liste)- retournera toujours une erreur "type d'argument incorrect: consp xxx" ce qui signifie que xxx n'est pas une liste. Essaye :(setq paire '(1 . "toto"))puis :(car paire)puis :(cdr paire) Tu verras que (cdr paire) retourne "toto" soit le deuxième terme de la paire pointée et ce terme ne peut jamais être une liste dans une paire pointée, donc (car (cdr pair)) ou (cadr pair) ne peuvent trouver le premier élément (car) d'un objet qui n'est pas une liste. PS : Attention à l'utilisation des bbcodes, j'ai été obligé d'éditer ton message. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Patrick_35 Posté(e) le 20 mai 2010 Posté(e) le 20 mai 2010 Salut La réponse de zebulon_ est bonne.Il utilise (setq seg1 (car (entsel "\nsegment 1 : "))) car il n'a pas la variable 35_liste A toi de comparer si les deux valeurs correspondent ps : car (cdr ...)) = cadr @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
zebulon_ Posté(e) le 20 mai 2010 Posté(e) le 20 mai 2010 Bonjour, Mais je veux impérativement uiliser la variable seg1 et seg2 issue d'une liste de paires pointées. Je ne veux pas faire de sélection manuelle. Le bout de code que j'ai donné l'a été à titre d'exemple. Seg1 et Seg2 sont des variables et tu peux, comme on peut s'y attendre pour des variables, y mettre ce que tu veux et à partir de ce que tu veux. En l'occurrence, il vaut mieux y mettre des adresses du genre < Nom d'entité: 6c56d208 >, d'où qu'elles viennent. Sinon la commande _fillet risque fort de se planter.Par ailleurs, seg1 et seg2 ont été nommés selon mon humeur du moment, tu es libre de les baptiser autrement : une deuxième propriété des variables. AmicalementVincent PS : une petite remarque au sujet de la commande _fillet et son équivalent lisp (command "_fillet"...) : dans les anciennes versions, la commande _fillet se terminait quand on spécifiait une valeur de rayon et il fallait relancer la commande pour faire le raccord avec le rayon défini précédemment. Maintenant, on peut donner la valeur du rayon sans sortir de la commande.On peut donc se dire qu'on peut écrire en lisp :(command "_fillet" "_r" "100" seg1 seg2)Eh bien non... quand on définit le rayon du congé de raccordement en lisp, on quitte la commande, comme dans les anciennes versions. [Edité le 20/5/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)
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