willy95 Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Bonjour à tous, Je cherche à renommer le début de certains calques commençant par AAA et les renommer en BBB. Je pensai le faire avec la commande -renommer "ca" mais je ne peux mettre plusieurs calques d'un coup (sans la boite de dialogue car je veux rajouter cette opération dans un lisp) Peux être existe-il une technique pour renommer dans un lisp plusieurs calques avec un filtre pour la selection, si quelqu'un peu me mettre sur la voie ce serai fort sympa :)
Luna Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Coucou, Pourquoi ne pas passer par la commande -CALQUE plutôt, avec l'option "Renommer" ? mais bien entendu, il faudra prévoir une boucle car tu devras les renommer un par un :3 Autrement tu peux également passer par la liste DXF (ça évite d'utiliser les commandes) via les fonctions (tblsearch) pour récupérer la liste de calques commençant par "AAA" (un simple (wcmatch layer "AAA*") dans une boucle créer via (tblnext) devrait fonctionner), puis (tblobjname) pour récupérer le nom d'entité du calque et ainsi (entmod) + (subst) pour remplacer le code DXF 2 contenant le nom du calque en remplaçant la chaîne "AAA" par "BBB" :3Dans tous les cas, il est impossible à mes yeux de renommer un ensemble de calques en une seule fois étant donné qu'ils possèdent tous des noms différents.. (je ne sais pas si je suis claire et je peux te donner la soluce mais c'est tout de même plus intéressant que tu écrives ton propre code si tu souhaites progresser :3 Bisous,Luna 1
MamyTina Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Bonjour à tous, Je cherche à renommer le début de certains calques commençant par AAA et les renommer en BBB.Salut,Essai ça pour voir: Commande renommer puis tu mets AAA* sur ancien nom puis BBB* dans nouveau nom.A+Fabien AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Malheureusement, j'ai essayer avec AAA* en BBB* mais la commande n'accepte pas *, et je cherche à renommer plusieurs calques d'un coup sans avoir à les nommés individuellement. Merci à vous pour vos pistes
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Luna je te remercie de cette piste qui me semble très intéressante, mais je ne suis pas assez calé en lisp pour comprendre toutes ces fonctions qui sont encore pour moi difficile d'utilisation :(
MamyTina Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Malheureusement, j'ai essayer avec AAA* en BBB* mais la commande n'accepte pas *, et je cherche à renommer plusieurs calques d'un coup sans avoir à les nommés individuellement. Merci à vous pour vos pistesTu es sur quelle version d'AutoCad?Chez moi ça marche parfaitement, je suis au AutoCad Map 2020!A+ Fabien AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Petite précision : Dans la boite de dialogue cela fonction bien avec * mais pas dans la commande texte que je souhaite intégrer dans un lisp
MamyTina Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 ah bon, je suis en 2016 Je n'ai jamais travaillé sur 2015/2016 mais dans mon souvenir çà fonctionnait bien aussi sur 2013/2014 :mellow: Peu tu envoyer le fichier si possible?A+Fabien AutoCad MAP 2023 - Covadis + Autopiste 18.3b www.colas-mayotte.fr
Luna Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Si je comprends bien, ce n'est pas un soucis d'utilisation régulière mais plus une intégration de la fonctionnalité de la commande RENOMMER AAA* en BBB* dans un fichier lisp n'est-ce pas ? Car en effet, la commande RENOMMER est capable de renommer un groupe de calques via la boîte de dialogue, mais cette fonctionnalité n'est pas possible depuis la commande en version -RENOMMER (sans boîte de dialogue) qui est préférable car discrète et automatisable en utilisation LISP. @willy95, dans quelle mesure as-tu besoin d'aide pour ton fichier lisp ? Souhaites-tu des pistes de recherches, ou bien un début de soluce, ou une soluce toute faite ? :3Tu parles de commande TEXTE, quel lien avec le nom des calques ?Ensuite, pour quelle raison renommer l'ensemble des calques n'est pas possible en le faisant un à un (dans une boucle via la commande -CALQUE ou -RENOMMER) ? Est-ce trop long ou bien y a-t-il une autre raison ? Bisous,Luna 1
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Merci pour vos lectures et réponses que vous m'accordez, je cherche effectivement une solution assez simple pour intégrer quelques lignes dans un lisp pour transformer plusieurs types de calques en d'autre, en clair : J'ai par exemple des calques qui se nomment : AAA-1, AAA-2, AAA-3,BBB-4,BBB-6,CCC-8,CCC-9 et je souhaite suivant le choix prélable de mon lisp tous les changer en DDD-1,DDD-2,DDD3,DDD-4,DDD6,DDD8,DDD-9. J'avoue ne pas etre assez calé pour pouvoir ecrire ce code correctement avec les fonctions (entmod) (subst) que tu m'a indiqué alors une bonne partie de solution me serai bien utile :)
Luna Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Oki doki, juste pour savoir tu renommes uniquement les calques en modifiant la chaîne de début ?En clair, la chaîne de caractères que tu modifies se situe toujours en début de nom de calque ou bien elle peut se situer en milieu ou fin de chaîne aussi ?
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Je souhaite uniquement modifier et toujours que les 3 premiers caractères.
(gile) Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Salut, L'utilisation des commandes en LISP est simple et pratique, mais il a ses limites. Il faut passer à la vitesse supérieure et apprendre à modifier les objets AutoCAD via leurs données DXF (entmod). (defun changerPrefixeCalques (ancienPrefixe nouveauPrefixe / calque nomCalque) ;; on parcourt la table des calques (while (setq calque (tblnext "layer" (not calque))) ;; on récupère le nom du calque (setq nomCalque (cdr (assoc 2 calque))) ;; si le nom du calque commence par l'ancien préfixe (if (wcmatch nomCalque (strcat ancienPrefixe "*")) ;; on remplace l'ancien préfixe par le nouveau (entmod (subst (cons 2 (strcat nouveauPrefixe (substr nomCalque (+ (strlen ancienPrefixe) 1)))) (cons 2 nomCalque) (entget (tblobjname "layer" nomCalque)) ) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Même si je comprends les étapes comme indiqué à chaque ligne, j'ai essayer de compléter mes anciens et nouveaux préfixes, sans résultat, j'ai essayer de remplacer les "variables" par des valeurs, sans résultat, j'ai peu-être pas complété quelque chose, je ne suis pas assez compétent dans le domaine pour comprendre encore suffisamment les subtilisées de toutes ces imbrications de fonctions que je ne maîtrise vraiment pas. Donc, je vais relire, re-tester, même laisser un peu de temps pour y réfléchir et comprendre un peu plus ces lignes que je vais maltraitées dans tous les sens et elles finiront bien par me donner un résultat satisfaisant. Merci beaucoup pour vos réponse et votre temps passé.
Luna Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 Dans le code écrit par (gile), le nouveau et l'ancien préfixe ne doivent pas contenir les caractères "*". Peut-être que l'erreur vient de là...En clair pour l'utilisation décrite ci-dessus (remplacer les AAA* par BBB*), il faut : (changerPrefixeCalques "AAA" "BBB") Normalement cela devrait fonctionner... Bisous,Luna
VDH-Bruno Posté(e) le 3 août 2020 Posté(e) le 3 août 2020 (modifié) Bonjour, Même si je comprends les étapes comme indiqué à chaque ligne, j'ai essayer de compléter mes anciens et nouveaux préfixes, sans résultat, j'ai essayer de remplacer les "variables" par des valeurs, sans résultat, Peut être parce que tu cherche à remplacer les variables dans le corps de la fonction, plutôt que de les passer en argumentS à l'appel de cette dernière. Pour tester: (changerPrefixeCalques "AAA" "DDD") Cdt - EDIT: Désolé pour le doublon Luna a été plus rapide dans sa réponse - Modifié le 3 août 2020 par VDH-Bruno Apprendre => Prendre => Rendre
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Ah ok, merci beaucoup pour ces deux dernières explications, en fait Gile à créer une nouvelle fonction qui s'utilise directement avec des options dans l'invité de commande. Encore merci, je vais pouvoir intégrer ces lignes de code et voir si cela fonctionne comme j'en ai besoin.
willy95 Posté(e) le 3 août 2020 Auteur Posté(e) le 3 août 2020 Merci Beaucoup, effectivement cela marche à merveille, je vais pouvoir analyser ces lignes pour modifier des objets AutoCAD via leurs données DXF, car cela peu me servir dans d'autre cas. Au top du top et merci pour votre temps passé à me lire, comprendre mes problématiques et vos réponses instructives. Merci
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