Aller au contenu

Renommer les calques par filtre


willy95

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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" :3

Dans 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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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

Tu 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.0c

www.colas-mayotte.fr

Lien vers le commentaire
Partager sur d’autres sites

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 ? :3

Tu 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

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ?

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é par VDH-Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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é