dfbiagio Posté(e) le 20 mai 2024 Posté(e) le 20 mai 2024 Bonjour, J'ai un problème pour modifier la couleur d'un objet Je mets la nouvelle couleur dans une variable nommée Cou, mais lorsque je veux la remplacer dans l'objet il me met une erreur. Exemple: (setq Objet-A-Modifier (entget (car (entsel)))) Sélectionnez un objet: ((-1 . <Nom d'entité: 1c81879ce70>) (0 . "LINE") (330 . <Nom d'entité: 1c81323fa30>) (5 . "92947") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 146.0 932.0 0.0) (11 809.0 1141.5 0.0) (210 0.0 0.0 1.0)) Commande: (setq cou 7) 7 Commande: (cons 62 cou) (62 . 7) Commande: (append objet-a-modifier (cons 62 cou)) ; erreur: liste incorrecte: 7 Mais, lorsque je le mets manuellement, ça fonctionne: (append Objet-A-Modifier '((62 . 7))) Commande: (append Objet-A-Modifier '((62 . 7))) ((-1 . <Nom d'entité: 1c81879ce70>) (0 . "LINE") (330 . <Nom d'entité: 1c81323fa30>) (5 . "92947") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbLine") (10 146.0 932.0 0.0) (11 809.0 1141.5 0.0) (210 0.0 0.0 1.0) (62 . 7)) Merci d'avance pour votre aide.
bonuscad Posté(e) le 20 mai 2024 Posté(e) le 20 mai 2024 Bonjour, (append) joint des listes d'éléments, si tu fais: (append objet-a-modifier (list (cons 62 cou))) cela fonctionne. D'ailleurs quand tu l'as fait manuellement, tu as quoter ta liste : '((62 . 7)) 😉 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VDH-Bruno Posté(e) le 20 mai 2024 Posté(e) le 20 mai 2024 il y a 23 minutes, dfbiagio a dit : Commande: (append objet-a-modifier (cons 62 cou)) ; erreur: liste incorrecte: 7 Mais, lorsque je le mets manuellement, ça fonctionne: (append Objet-A-Modifier '((62 . 7))) Bonjour, Oui lorsque tu le mets manuellement la syntaxe est bonne, regarde le nombre de parenthèses diffèrent dans tes 2 expressions. Pour l'exemple une écriture "épuré" de ce que tu veux faire : (entmod (append (entget (car (entsel))) '((62 . 7)))) Cdt Bruno 1 Apprendre => Prendre => Rendre
dfbiagio Posté(e) le 20 mai 2024 Auteur Posté(e) le 20 mai 2024 Pas sur de tout comprendre entre les list les ' en tout cas avec (list (cons 62 cou)) ça fonctionne. Merci bcq
Vincent P. Posté(e) le 20 mai 2024 Posté(e) le 20 mai 2024 Bonjour, Je te renvoi vers le merveilleux site https://www.da-code.fr/append/ tu l'écrit toi même : (append objet-a-modifier (cons 62 cou)) => ne marche pas (append Objet-A-Modifier '((62 . 7))) => ça marche. Sauf que (cons 62 cou) créé une paire pointée, toute seul, alors que '((62 . 7)) créé une paire pointée dans une liste. C'est ce "dans une liste" qui fait toute la différence. 1 Lispeur éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
bonuscad Posté(e) le 20 mai 2024 Posté(e) le 20 mai 2024 Il y a 10 heures, dfbiagio a dit : Pas sur de tout comprendre entre les list les ' en tout cas avec (list (cons 62 cou)) ça fonctionne. Merci bcq Pour compléter Vincent.P regarde aussi https://www.da-code.fr/quote/ Une autre remarque pour le code 62 concernant la couleur: Par défaut une entité n'a pas pas ce code, si l'on veut forcer la couleur il faut faire un (append) Mais si la couleur est déjà forcée, il faut faire un (subst) du code 62 Donc bien vérifier si ce code existe dans la liste retournée par (entget) pour bien faire l'action désirée: (subst) ou (append) NB: pour retourner au défaut ducalque on peut mettre (62 . 256) et (62 . 0) pour dubloc. 1 Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VDH-Bruno Posté(e) le 21 mai 2024 Posté(e) le 21 mai 2024 Il y a 11 heures, bonuscad a dit : Une autre remarque pour le code 62 concernant la couleur: Par défaut une entité n'a pas pas ce code, si l'on veut forcer la couleur il faut faire un (append) Mais si la couleur est déjà forcée, il faut faire un (subst) du code 62 Donc bien vérifier si ce code existe dans la liste retournée par (entget) pour bien faire l'action désirée: (subst) ou (append) Bonjour, Pour compléter, c’est un idiome d’implémentation qui est proposé et que l’on retrouve dans de nombreux codes Autolisp, mais qui n’est pas toujours justifié (avec les codes dxf générique), du moins si c’est pour construire des listes à soumettre à entmake, entmakex, entmod. J’avais ci-dessous tenté d’expliquer le pourquoi, dans un petit décryptage des fonctions entmake, entmakex, entmod: https://cadxp.com/topic/40688-exceptions-et-anomalies-dans-certaines-fonctions-lisp/?do=findComment&comment=227875 Et c’est pourquoi ci-dessus j’avais qualifié mon exemple de code "épuré" A+ Bruno 1 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