Crook Posté(e) le 19 avril 2011 Posté(e) le 19 avril 2011 Bonjour,Je cherche une astuce pour copier un objet dans tous mes calques.merci
bonuscad Posté(e) le 19 avril 2011 Posté(e) le 19 avril 2011 Bonjour, Fais un copier-coller en ligne de commande de ce qui suit [color=green];Définition d'une fonction anonyme et temporaire en mémoire. ; Une fonction (defun C:Dupli2AllLayer ( / ....) aurait pu la remplacer[/color] ((lambda ( / js def_lay nam_lay n dxf_ent lay_ori dxf_nent) (princ "\nChoisir les objets à dupliquer sur tout les calques") [color=green];Une boucle (While) qui m'assure qui il aura bien une sélection non vide (not) ; pour pouvoir être sur que l'entrée utilisateur sera bien faite et que la routine pourra continuer sans erreur[/color] (while (not (setq js (ssget)))) [color=green];Avec (tblnext) j'explore la table des calque en commençant par le 1er avec l'option T[/color] (setq def_lay (tblnext "LAYER" T)) [color=green];J'entame une boucle (while) tant que la définition du calque existe (def_lay) ; La défintion suivante étant cherchée à la fin de la boucle (sans l'option T)[/color] (while def_lay [color=green];J'extrais le nom de du calque de la définition de la table[/color] (setq nam_lay (cdr (assoc 2 def_lay))) [color=green];Je fais une répétion de boucle en corélation avec le nombre d'entités contenu dans le jeu de sélection ; J'en profite pour indexer avec la variable n ce nombre d'éléments[/color] (repeat (setq n (sslength js)) [color=green];J'extrais le nom de l'entité indexée (qui est décrémentée), puis sa définition DXF dans laquelle je récupère le calque de celle-ci[/color] (setq dxf_ent (entget (ssname js (setq n (1- n)))) lay_ori (cdr (assoc 8 dxf_ent)) ) [color=green];Une condition vérifie que le calque de l'entité n'est pas la même que celui de l'élément de la table des calques en cours de traitement[/color] (cond ((not (eq lay_ori nam_lay)) [color=green];Si la condition est vérifiée ; Je récupère le calque de l'entité traitée auquel je lui substitue le nom du calque extrait de la table des calque en cours[/color] (setq dxf_ent (subst (cons 8 nam_lay) (assoc 8 dxf_ent) dxf_ent)) [color=green];Avec cette liste de code DXF à jour je crée la même entité sur le calque concerné[/color] (entmake dxf_ent) [color=green];Si j'ai affaire à une entité complexe. Bloc, Polyligne ancienne ou polyligne 3D[/color] (if (member (cdr (assoc 0 dxf_ent)) '("INSERT" "POLYLINE")) (progn [color=green];Alors j'explore les entités suivantes...[/color] (setq dxf_nent (entget (entnext (cdar dxf_ent)))) [color=green];... jusqu'à rencontrer la fin par l'entité spéciale SEQEND.[/color] (while (/= (cdr (assoc 0 dxf_nent)) "SEQEND") [color=green];Comme précédemment substitution[/color] (setq dxf_nent (subst (cons 8 nam_lay) (assoc 8 dxf_nent) dxf_nent)) [color=green];Puis création[/color] (entmake dxf_nent) [color=green];Affectation de dxf_nent à l'entité suivante (dans la boucle pour pouvoir en sortir)[/color] (setq dxf_nent (entget (entnext (cdar dxf_nent)))) ) [color=green];Puis création de l'entité SEQEND de fin de boucle qui n'a pas été évalué dans la boucle (condition de sortie)[/color] (entmake dxf_nent) ) ) ) ) ) [color=green];Définition suivante de la table des calques[/color] (setq def_lay (tblnext "LAYER")) ) )) [Edité le 21/4/2011 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
FormaBois Posté(e) le 19 avril 2011 Posté(e) le 19 avril 2011 La devinette c'est : Quel est le calque dominant ;)C'est incroyable ce qu'il est possible de faire avec un pt programme, ça paraît tellement simple...A l'utilisation c'est sûr, après j'imagine qu'à mettre en place c'est autre chose.En tout cas bravo. Je serais curieux de connaître l'utilité :o Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
bonuscad Posté(e) le 19 avril 2011 Posté(e) le 19 avril 2011 La devinette c'est : Quel est le calque dominant Dans le code ? lay_ori (cdr (assoc 8 dxf_ent)) : le calque de/des entités sélectionnées éviter le doublon dans le calque d'origine :(not (eq lay_ori nam_lay)) ça paraît tellement simple... Il m'arrive de prendre des chemins plus tortueux, ça dépends de l'inspiration ;) e serais curieux de connaître l'utilité Moi aussi, à part créer une multiplicité d'objet.....c'est un peu pour ça que j'ai fait une fonction anonyme unique (ça évite de relancer la commande par accident, car bonjour les effacements ultérieurs).Mais peut être veut-il par exemple dupliquer les murs du rez-chaussée sur les étages...) Tout les calques me surprend un peu quand même ! (faudrait rester en début de conception où il y a peu de calques) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Crook Posté(e) le 20 avril 2011 Auteur Posté(e) le 20 avril 2011 Bonjour,Merci pour le coup de main.Je m'explique : mon boulot est d'automatiser au maximum les imports-exports entre Autocad et Alllpan.Pour cela j'ai besoin de mapper les calques Autocad avec les Layers Allplan.Mais Allplan ne "voit" que les calques non vides.Donc pour créer un fichier de configuration standard (unique) Allplan utilisable avec mon Template Autocad j'ai besoin de mettre quelque chose dans chacun des 136 calques.Voilà le pourquoi du comment. Je n'ai pas encore eu le temps de tester mais merci encore.
lecrabe Posté(e) le 20 avril 2011 Posté(e) le 20 avril 2011 Hello Bruno SVP je suis eventuellement preneur d'une version amelioree de ta routine - Selection classique AutoCAD de N objets - Selection dans un DCL (genere dynamiquement) des 1-N calques voulus - Copie de la selection sur les 1-N calques (ce qui inclut la possibilite de selectionner TOUS les calques, donc ce que fait aujourd'hui ta routine) Merci d'avance, Le Decapode Autodesk Expert Elite Team
FormaBois Posté(e) le 21 avril 2011 Posté(e) le 21 avril 2011 Tout ça reste obscur pour moi, même si je repère ici et là quelques termes de script Merci en tout cas Bruno pour les explications ;) Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
bonuscad Posté(e) le 21 avril 2011 Posté(e) le 21 avril 2011 Tout ça reste obscur pour moi Comme le code n'est pas très long, j'édite mon code pour le commenter.Ainsi j'espère que cela t'éclairera les zones obscures et te sera d'une bonne aide pour t'y plonger Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
FormaBois Posté(e) le 21 avril 2011 Posté(e) le 21 avril 2011 Bon sur ce coup là, je crois que je vais imprimer la page et regarder d'un peu plus près.Merci pour la peine ;) Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
FormaBois Posté(e) le 16 septembre 2011 Posté(e) le 16 septembre 2011 (modifié) Bonjour,juste ce petit mot pour préciser que les deux derniers messages qui apparaissent ne sont pas de moi, même si c'est mon pseudo qui est utilisé !????En fait après vérification c'est le contenu du message qui a changé, et quand j'édite le message c'est l'ancien contenu qui apparait. Si j'édite le message : Hey ho !:angry:Vous faites quoi sur mon fil de discussion ?! Le texte qui apparait c'est : Tout ça reste obscur pour moi, même si je repère ici et là quelques termes de scriptMerci en tout cas Bruno pour les explications ;) Bizarre ce truc... certainement du à la refonte du site Bon le post est à nouveau normal... allez comprendreJ'aurais bien supprimé celui-ci mais je n'ai pas trouvé le bouton pour faire ça Modifié le 17 septembre 2011 par FormaBois Studio Gfilm - Agence de communication par l'image "Le matin tu peux rester couché pour poursuivre ton rêve, ou te lever pour le réaliser"
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