ldidber Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 Bonjour Je vous explique mon problème.Je récupère des plans Dwg fait sur ALLPLAN mais le nom des calques n'est pas terrible.En effet au début de chacun d'eux, j'ai une série de caractères que j'aimerais virer. en l'occurence 1$9$BT$ (ou un truc du genre).Pour ces calques, c'est toujours la même chaine que je souhaiterias enlever. ça doit bien être possible en lisp non ? :casstet:
PONTIAC95-2 Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 Bjr, j'ai un prog qui devrait convenir, faut voir en testant... Peux-tu indiquer ton mail et je te l'envoie.
ldidber Posté(e) le 15 février 2006 Auteur Posté(e) le 15 février 2006 ldidier@mail-sc.com merci d'avance ;)
JAMESsirop Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 Bonjour,Je serais également intéressé par ton programme.Peux-tu me l'envoyer à cette adresse STP.j.sirop@sotec-ingenierie.frD'avance merci.
ldidber Posté(e) le 15 février 2006 Auteur Posté(e) le 15 février 2006 J'ai bien reçu le programme. J'aurais cependant une autre requête.En effet les calques n'ont pas toujours le même préfixe à enlever. Par contre le préfixe à enlever se termine toujours par les 3 mêmes caractères: préfixelongueurvariable TB_nomducalqueàgarder. Comment puis-je automatiser celà ? merci d'avance :casstet:
Tramber Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 C'est malin de vous les refiler par mail ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
ldidber Posté(e) le 15 février 2006 Auteur Posté(e) le 15 février 2006 Voici la source ;) ; NEWLAYER-AJOUT PREFIXE.LSP ;........................................................; ce programme modifie le nom du debut des nappes; l'utilisateur saisi les caracteres qu'il veut supprimer; puis saisi a la suite les caracteres de remplacement;........................................................ (defun c:NNL (/ nom nom1 nomb nomb2 oldtx oldtx1 oldtx2 sset nbsset v2 newtx newtxt ent entit)(setvar "cmdecho" 0) (setq nom (getstring "\n FILTRE DEBUT NOM DE CALQUES a modifier PAR AJOUT DE PREFIXE:"));(setq nom (getstring T "\n Debut texte a modifier :"));(cond ((= nomp "") (setq nomb 0)));transformation du texte en majuscule;(setq nom (strcase nom))(setq nom1 (getstring "\n Nouveau PREFIXE DES CALQUES :"));transformation du texte en majuscule;(setq nom1 (strcase nom1));calcul du nombre de lettre a supprimer;(if (/= nom "")(setq nomb (strlen nom)) (setq nomb2 (+ 1 nomb)) ; On se positionne sur le premier nom de plan qui est défini (setq x_plan (tblnext "layer" T)) ; On boucle pour passer un à un tous les plans (while (/= x_plan nil) ;recherche du nom de la nappe dans l'entite incremente;sous la forme d'une liste (setq oldtx1 (assoc 2 x_plan))(prin1 oldtx1);le nom de la nappe est le second texte de la liste ci dessus (setq oldtx (cdr oldtx1))(prin1 oldtx);recherche du debut de texte du nom de la nappe (setq oldtx2 (substr oldtx 1 nomb))(prin1 oldtx2);test pour savoir si le debut du texte dans l'entite ;correspond au texte que l'on veut supprimer (if (= nom oldtx2) (progn;suppression du debut de texte du nom de la nappe (setq oldtx3 (substr oldtx nomb2))(prin1 oldtx3);concatenation du nouveau texte avec l'ancien moins le debut de texte ;qui a ete supprime (setq newtx (strcat nom1 oldtx3));mise en forme du nouveau nom de la nappe sous la forme de liste (setq newtxt (cons 8 newtx));command AUTOCAD renommer (command "renommer" "ca" oldtx newtx) ) ) (setq x_plan (tblnext "layer")) ) ; fin du while (print)(princ))
PONTIAC95-2 Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 l'envoi par mail etait pour moi la solution la plus rapide, bien sûr je peux copier içi le prog et que ceux qui sont intéréssé n'ont qu'à le sauvegarder .Programmation basique à mon niveaux qui me dépanne... ; NEWLAYER-AJOUT PREFIXE.LSP ;........................................................; ce programme modifie le nom du debut des nappes; l'utilisateur saisi les caracteres qu'il veut supprimer; puis saisi a la suite les caracteres de remplacement;........................................................ (defun c:NNL (/ nom nom1 nomb nomb2 oldtx oldtx1 oldtx2 sset nbsset v2 newtx newtxt ent entit)(setvar "cmdecho" 0) (setq nom (getstring "\n FILTRE DEBUT NOM DE CALQUES a modifier PAR AJOUT DE PREFIXE:"));calcul du nombre de lettre a supprimer (setq nomb (strlen nom))(setq nomb2 (+ 1 nomb)); On se positionne sur le premier nom de plan qui est défini(setq x_plan (tblnext "layer" T)); On boucle pour passer un à un tous les plans(while (/= x_plan nil);recherche du nom de la nappe dans l'entite incremente;sous la forme d'une liste (setq oldtx1 (assoc 2 x_plan))(prin1 oldtx1);le nom de la nappe est le second texte de la liste ci dessus (setq oldtx (cdr oldtx1))(prin1 oldtx);recherche du debut de texte du nom de la nappe (setq oldtx2 (substr oldtx 1 nomb))(prin1 oldtx2);test pour savoir si le debut du texte dans l'entite ;correspond au texte que l'on veut supprimer (if (= nom oldtx2) (progn;suppression du debut de texte du nom de la nappe (setq oldtx3 (substr oldtx nomb2))(prin1 oldtx3);concatenation du nouveau texte avec l'ancien moins le debut de texte ;qui a ete supprime (setq newtx (strcat nom1 oldtx3));mise en forme du nouveau nom de la nappe sous la forme de liste (setq newtxt (cons 8 newtx));command AUTOCAD renommer (command "renommer" "ca" oldtx newtx) ) ) (setq x_plan (tblnext "layer")) ) ; fin du while (print)(princ))
PONTIAC95-2 Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 J'ai bien reçu le programme. J'aurais cependant une autre requête.En effet les calques n'ont pas toujours le même préfixe à enlever. Par contre le préfixe à enlever se termine toujours par les 3 mêmes caractères: préfixelongueurvariable TB_nomducalqueàgarder. Comment puis-je automatiser celà ? merci d'avance :casstet: Je suis collé, disons car pas trop le temps de me pencher sur mon developpement.En fait mon programme n'avait été développé que pour ajouter des préfixes constant à des nappes dont les préfixes de départ étaient identiques (mais ne convenant pas à une certaine charte) sur un certain nombre de caractères. Par contre et dans ton cas, si le préfixe a supprimé est variable, il vaut mieux extraire les noms de calques vers excel, les transformer par excel puis avec un script (renommer calque) les ré-injecter dans autocad . J'ai fais une fois un truc similaire et cela avait bien marché.
bonuscad Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 Tu peux essayer ceci ((lambda ( / def_lay name_lay new_name) (setq def_lay (tblnext "LAYER" t)) (while def_lay (setq name_lay (cdr (assoc 2 def_lay))) (if (setq start_str (vl-string-search "TB_" name_lay)) (progn (setq new_name (substr name_lay (+ start_str 4))) (command "_.-rename" "_layer" name_lay new_name) ) ) (setq def_lay (tblnext "LAYER")) ) (prin1) )) En modifiant (vl-string-search "TB_" name_lay) en (vl-string-search "$0$" name_lay)Il peut servir à renommer les calques après l'ajout d'Xref dans le dessin. ;) [Edité le 15/2/2006 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
PONTIAC95-2 Posté(e) le 15 février 2006 Posté(e) le 15 février 2006 essaye avec ça, modif de mon prog précdent ; NEWLAYER-AJOUT PREFIXE.LSP ;........................................................; ce programme modifie le nom du debut des nappes; l'utilisateur saisi les caracteres qu'il veut supprimer; puis saisi a la suite les caracteres de remplacement;........................................................ (defun c:NNL (/ nom nom1 nomb nomb2 oldtx oldtx1 oldtx2 sset nbsset v2 newtx newtxt ent entit)(setvar "cmdecho" 0) (setq nom (getstring "\n FILTRE DEBUT NOM DE CALQUES a modifier PAR AJOUT DE PREFIXE:")) (setq nom1 (getstring "\n Nouveau PREFIXE DES CALQUES :")) (setq nomb (strlen nom)) (setq nomb2 (+ 1 nomb)) ; On se positionne sur le premier nom de plan qui est défini (setq x_plan (tblnext "layer" T)) ; On boucle pour passer un à un tous les plans (while (/= x_plan nil) ;recherche du nom de la nappe dans l'entite incremente;sous la forme d'une liste (setq oldtx1 (assoc 2 x_plan));(prin1 oldtx1);le nom de la nappe est le second texte de la liste ci dessus (setq oldtx (cdr oldtx1))(prin1 oldtx) ;boucle de test variable(setq boucle 1) (while (< boucle 10);recherche du debut de texte du nom de la nappe (setq oldtx2 (substr oldtx boucle nomb));(prin1 oldtx2);(prin1 nomb);test pour savoir si le debut du texte dans l'entite ;correspond au texte que l'on veut supprimer (if (= nom oldtx2) (progn;suppression du debut de texte du nom de la nappe (setq nomb3 (+ boucle nomb)) (setq oldtx3 (substr oldtx nomb3))(prin1 oldtx3);concatenation du nouveau texte avec l'ancien moins le debut de texte ;qui a ete supprime (setq newtx (strcat nom1 oldtx3));command AUTOCAD renommer (command "renommer" "ca" oldtx newtx) ) ; fin du progn ) ; fin du while (setq boucle (+ boucle 1))) (setq x_plan (tblnext "layer")) ) ; fin du while (print)
ldidber Posté(e) le 15 février 2006 Auteur Posté(e) le 15 février 2006 Merci à vous 2 J'ai trouvé mon bonheur :D
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