balyoa Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Bonjour, J'ai un dessin qui contient des blocs identiques mais qui portent un nom différent, et donc pleins de définitions de blocs pour rien. Par exemple mes symboles d'arbres s'appelent arbre, arbre_1, arbre_2, etc.... et mes poteaux s'appellent poteau, poteau_1, poteau_2, etc... Je souhaite donc substituer les blocs avec suffixe (_xx) par le bloc d'origine (arbre, poteau, etc...). J'ai essayé avec la commande blockreplace des expresstools et avec la commande substituer de covadis. Ca marche bien mais que pour un bloc à la fois, et j'ai des centaines de remplacements à faire... Qui aurait eu idée sur l'automatisation de ces substiutions ? Merci d'avance. Cdt.
lecrabe Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Hello le Grenoblois J'ai deja eu ce genre de probleme et donc j'ai resolu avec une manipulation MAP ! 1) MAPEXPORT vers SHP (de type Ponctuel) de TOUS les blocs selectionnes (donc ceux qui sont concernes) 2) MAPIMPORT depuis SHP en donnant le bon Nom de bloc ... Et voila c fini !! lecrabe Autodesk Expert Elite Team
balyoa Posté(e) le 30 avril 2012 Auteur Posté(e) le 30 avril 2012 Salut, Et si je souhaite rester dans l'environnement Autocad sans passer par un shp ?En fait mes blocs ont des rotations, des attributs et des échelles que je ne souhaite pas perdre.Donc je voyais plus la chose en lisp. Si je passe par le shp je vais perdre des choses en route. J'qi trouvé ca (http://forums.autodesk.com/autodesk/attachments/autodesk/247/33798/1/rblock.zip) , pas mal mais pas automatisés. Ce que je cherche c'est un truc du genre : - sélectionne tous les blocs nommés ******_*- remplace les par le bloc nommé ****** Merci, @+
lecrabe Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Hello Tu peux envoyer (MAPEXPORT) TOUS les parametres voulus dans le SHP et donc il faut aussi exporter la Rotation et Echelle_X ! Puis lors de l'Import (MAPIMPORT) les donnees attributaires peuvent "rentrer directement" dans les attributs du bloc/symbole (a condition que Etiquette Attribut = Nom de champ du SHP) Ne pas oublier 2 attributs du genre : ROTATION et SCALE que tu vas utiliser ci-apres ... Ensuite par 2 requetes successives sur le groupe de dessin, tu vas appliquer ROTATION et SCALE a tes blocs/symboles ... Bon d'accord c du pur MAP et non pas de l'AutoCAD ... Que veux tu le gars du 42 essaye t'aider le gars du 38 ... Bon Appetit, lecrabe Autodesk Expert Elite Team
philsogood Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Hors Sujet :lecrabe t'es du 42? oh mon pauvre... t'es pas très loin de la diagonale du vide tu sais;) Projeteur Revit Indépendant - traitement des eaux/CVC
balyoa Posté(e) le 30 avril 2012 Auteur Posté(e) le 30 avril 2012 Merci Le Crabe pour ton aide, mais je préferais rester dans l'environnement Autocad et pas me servir de MAP sur ce coup là. Donc si un lispeur passe dans le coin, son aide est la bienvenue... Sinon, c'est vrai que le préfère de loin le 38 au 42 .... A+
lecrabe Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Hello Le 42 = La diagonale du vide ! Oui pourquoi pas, mais en terme de vide je suis deja alle dans la Lozere (48), Correze (19), Creuse (23), etc et donc je pense que La Loire (42 - Prefecture: St-Etienne) n'est quand meme pas si "vide" que cela ! Mais c SUR, le passe industriel (historique) de St-Etienne est MORT : la Siderurgie, les Mines, Manufrance, etc ...Meme la Manufacture d'Armes de St-Etienne est "OUT" ! http://fr.wikipedia.org/wiki/Manufacture_d%27armes_de_Saint-%C3%89tienne "Tout fout le camp" ... Quoique un collegue est deja alle dans l'Ariege (09 - Prefecture: Foix) et il m'avait dit que c'etait vraiment "microscopique" lecrabe Autodesk Expert Elite Team
lecrabe Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Hello le 38 Sinon j'ai deja resolu ce genre de probleme d'une autre facon "plus violente"Si tes blocs/symboles se nomment par exemple : poteau_1, poteau_2, etcet que le bon nom de bloc/symbole se nomme : poteau Eventuellement tu fais AVANT par securite, un RENOMMER en mode type d'objet : BLOCpoteau*en zzzpoteau* afin d'etre SUR d'avoir un nom de type zzzpoteauXXXXX qui est seulement un nom de bloc/symbole Puis DXFOUT de tout le DWG (ou peut etre meme QUE les blocs/symboles) en texte/asciiUne manipulation subtile avec un editeur de texteET tu finis par un DXFIN et ca marche en principe ! lecrabe (decapodesquement votre serviteur du 42) Autodesk Expert Elite Team
Dioka Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Pour ma part, je ferai la méthode suivante: Exportation de tous les "Arbre_1" dans un fichier, des "arbre_2" dans un autre fichier, etc...(Pour le faire simplement, tu selectionnes un "arbre_1", bouton de droite "sélection similaire" et wbloc dans un fichier.) Ouverture de chacun des fichier, commande "renommer" "bloc" Ancien nom "Arbre_1" nouveau nom "Arbre"(Certains lisp du forum peuvent te permettre de faire ça rapidement pour tous les fichiers) Une fois que tu as fait ça pour tous les fichiers, tu supprimes tous les blocs ayant une indexation (arbre_1, arbre_2, etc...) Tu importes tous les fichiers que tu as modifier. Si le point d'insertion et les paramètres sont les même pour tes blocs, tu n'aura plus qu'un seul blocs arbres. La méthode la plus rapide est d'exporter tous les blocs dans un fichiers DXF (format Ascii) et de changer les arbre_1, arbre_2, arbre_3 en arbre. Une fois enregistrer tu importes ton dxf dans un nouveau fichier avant de l'insérer dans ton dessin.
balyoa Posté(e) le 30 avril 2012 Auteur Posté(e) le 30 avril 2012 Merci Dioka, mais vu le nombre de blocs à traiter et le nombre de fichiers à traiter ta méthode serait beaucoup trop longue. A raison de plusieurs centaines de définitiions de blocs x plusieurs dizaines de fichiers, c'est pas jouable avec la méthode d'export dans un fichier. Je vais essayer la méthode "brute force" du DXF si pas d'autres astuces, mais j'aimerais éviter de dégrader mon DWG d'origine. A+ les cadistes...
lecrabe Posté(e) le 30 avril 2012 Posté(e) le 30 avril 2012 Hello Au fait la fameuse routine RBLOC de Patrick35 a beaucoup evolue !http://patrick.blog-cao.com/2011/02/16/rbloc-v2-20/ As tu essaye la derniere version v2.22 ? lecrabe Autodesk Expert Elite Team
balyoa Posté(e) le 30 avril 2012 Auteur Posté(e) le 30 avril 2012 Oui je viens de l'essayer mais ce ne répond pas à l'automatisation recherchée. A+
balyoa Posté(e) le 3 mai 2012 Auteur Posté(e) le 3 mai 2012 Bonjour, Je relance le sujet, car je suis toujours demandeur d'une astuce sans passer ni par MAP ni par le DXF.Rbloc et Rblock ne propose pas cette fonction. Cordialement
bryce Posté(e) le 3 mai 2012 Posté(e) le 3 mai 2012 Bonjour, Un petit Lisp vite fait: (defun c:FUSBLOCS ( / ss i el bname nbname suff ) (setq ss (ssget "_X" '( (0 . "INSERT")(2 . "*_*") ) )) (setq i 0) (repeat (sslength ss) (setq el (entget (ssname ss i)) bname (cdr (assoc 2 el)) pos (vl-string-search "_" bname) nbname (substr bname 1 pos) suff (substr bname (+ pos 2))) (if (> (atoi suff) 0) (entmod (subst (cons 2 nbname) (cons 2 bname) el)) ) (setq i (+ 1 i)) ) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
lecrabe Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Hello Bryce Desole mais il y a un probleme (Teste sur AutoCAD 2009 et AutoCAD 2013) : Commande: FUSBLOCS; erreur: type d'argument incorrect: lselsetp nil SVP serait il possible que tu mettes dans une simple variable Lisp au depart de ton progr un truc du genre :(setq nombloc "TAMPON_")et donc ne traiter que les blocs dont le nom commence par ... Ainsi on pourra adapter facilement ton progr a differents cas !Car en effet j'ai deja eu le meme probl que Balyoa et si on n'est pas avec un AutoCAD MAP (ou CIVIL), c chiant a resoudre ! Merci d'avance, lecrabe Autodesk Expert Elite Team
balyoa Posté(e) le 4 mai 2012 Auteur Posté(e) le 4 mai 2012 Salut, Merci Bryce. Mais moi aussi probleme sur un MAP2011, quand le lance le lisp il m'écrit "149" ou "10", ou autre chiffre aléatoire et ne traite rien, bizarre... Sinon je suis aussi preneur de pouvoir filtrer soit sur les premiers caractères du nom des blocs à traiter (genre T***_X), soit par sélection à l'écran. Merci d'avance, bonne journée à tous. Yo
bryce Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Bonjour, Desole mais il y a un probleme (Teste sur AutoCAD 2009 et AutoCAD 2013) : Commande: FUSBLOCS; erreur: type d'argument incorrect: lselsetp nil C'est simplement que la sélection est vide (aucun bloc à traiter). Merci Bryce. Mais moi aussi probleme sur un MAP2011, quand le lance le lisp il m'écrit "149" ou "10", ou autre chiffre aléatoire et ne traite rien, bizarre... Le chiffre en question n'est pas aléatoire, c'est le nombre de références de blocs remplacées dans le dessin. ;)Tu es sûr qu'il ne traite rien ?Si c'est le cas, merci de poster un dessin en exemple.Voici une version légèrement modifiée pour que les messages soient plus clairs. (defun c:FUSBLOCS ( / ss i el bname nbname suff ) (setq ss (ssget "_X" '( (0 . "INSERT")(2 . "*_*") ) )) (if ss (progn (setq i 0) (repeat (sslength ss) (setq el (entget (ssname ss i)) bname (cdr (assoc 2 el)) pos (vl-string-search "_" bname) nbname (substr bname 1 pos) suff (substr bname (+ pos 2))) (if (> (atoi suff) 0) (entmod (subst (cons 2 nbname) (cons 2 bname) el)) ) (setq i (+ 1 i)) ) (princ (strcat "\n" (itoa (+ 1 i)) " blocs substitués.")) ) (princ "\nAucun bloc trouvé.") ) (princ) ) Pour les autres améliorations demandées, je verrai quand j'aurai le temps. ;) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
balyoa Posté(e) le 4 mai 2012 Auteur Posté(e) le 4 mai 2012 Bonjour et merci Bryce, le lisp marche bien en fait, mais le probleme c'est que pour certains blocs il n'existait pas dans le dessin le bloc d'origine (sans suffixe), et donc il ne faisait aucun remplacement (logique ;-) Il ne manque qu'un filtre de sélection (à l'écran ca suffirait) et c'est parfait. Encore merci à tous pour ces échanges et votre disponibilité ;-) A+ Yo
lecrabe Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Hello Bryce Dans mon dessin Test, les blocs se nomment : C_1, C_2, C_11, C_22, C_111, C_112, etc Que fais tu exactement dans ton Progr ?Je pensais que tu rassemblais "TOUT" sur le bloc nomme "C_1" par exemple ?Mais je pense que tu raisonnes autrement ... C pour ca que j'aurais bien aime 2 preparations de variables(setq ancienbloc "TAMPON_") c en fait le prefixe a rechercher TAMPON_???????(setq nouveaubloc "JOLITAMPON") c le nouveau nom de bloc que tu substitues Vois tu ce que je veux dire ? lecrabe Autodesk Expert Elite Team
balyoa Posté(e) le 4 mai 2012 Auteur Posté(e) le 4 mai 2012 En fait son lisp cherche les blocs "C_1, C_2, C_11, C_22, C_111, C_112, etc..." et les substituent par le bloc "C" si il est présent dans le dessin. Mais j'ai des blocs comportant un suffixe que je ne veux pas substituer d'où la demande de filtre sur le préfixe du bloc ou sur une sélection à l'écran (qui doit suffire si avant on lance un filter sur le nom des blocs à traiter ;-) A+
lecrabe Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Hello OUI je viens de voir ca ! Merci a notre charmant Pingouin du 38 qui apporte la lumiere dans le "Vide" du 42 ... lecrabe Autodesk Expert Elite Team
balyoa Posté(e) le 4 mai 2012 Auteur Posté(e) le 4 mai 2012 Le pingouin38 parle au crabe42 : tu sais comment on rajoute une sélection à l'écran dans le lisp de Bryce ? Yo
Patrick_35 Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Salut Avec Rbloc, tu peux choisir plusieurs blocs de noms différents (sélection écran) que tu peux remplacer par un seul.Si je pousse le bouchon, il est tout à fait possible avec Rbloc de remplacer tous les blocs d'un dessin pas un seul type de bloc. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bryce Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Le pingouin38 parle au crabe42 : tu sais comment on rajoute une sélection à l'écran dans le lisp de Bryce ? Il suffit de remplacer (ssget "_X" ...) par (ssget ...) ;) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
lecrabe Posté(e) le 4 mai 2012 Posté(e) le 4 mai 2012 Hello Un truc du genre : ;; (setq ss (ssget "_X" '( (0 . "INSERT")(2 . "*_*") ) )) devient (setq ss (ssget '( (0 . "INSERT")(2 . "*_*") ) )) lecrabe PS: Sorry j'ai ete devance par Super_BRYCE Autodesk Expert Elite Team
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