Aller au contenu

Pourquoi cela ne marche pas ?


Messages recommandés

Posté(e)

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

Posté(e)

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

 

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

 

 

 

 

 

 

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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.

 

Amicalement

Vincent

 

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)

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é