touvenant Posté(e) le 7 septembre 2011 Posté(e) le 7 septembre 2011 Bonjour, j'ai des objets sur un calque et je voudrais copier une sélection de ces objets sur 4 autres calques.Je les sélectionne, je les copie, je resélectionne les objets copiés un par un puis je clique sur un des calques sur lequel je veux coller et je recommence... Il me semble avoir utilisé autrefois, dans une autre vie (celle où mes neurones faisaient du zèle) une commande qui faisait ça plus simplement. Je croyais avec express tool, mais ils sont installés sur mon poste et je ne retrouve pas de commande qui ressemble à ça... Et en plus, les objets que je copie sont des objets dynamiques et ils perdent leurs propriétés dynamique (trop vieux ?) [Edité le 7/9/2011 par touvenant]
FormaBois Posté(e) le 7 septembre 2011 Posté(e) le 7 septembre 2011 Salut,Bonuscad à créé un lisp qui copie tous les objets d'un calque sur tous les autres calques, il suffit de faire une petite recherche.Si tu ne veux pas la copie sur tous il suffit d'isoler les calques non concernésEn revanche je ne sais pas si on peut copier une sélection seulement@+ 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"
Tramber Posté(e) le 7 septembre 2011 Posté(e) le 7 septembre 2011 Pour un truc comme cela je fais une selection.Je lance CHPROP, je fais une selection et je change le calque (si le nom n'est pas trop complexe).Puis je copie. et je recommence. Mais j'utilise toujours P comme Précédent dans les manips de COPIER et CHPROP et ça gaze très vite. Je ne fais de la souris qu'à la première selection. Que du clavier après. Faire un programme se justifie-t-il ? Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
bryce Posté(e) le 7 septembre 2011 Posté(e) le 7 septembre 2011 Bonjour, J'avais déjà fait un truc semblable aussi : (defun c:CPAL (/ acdoc layers *error* lay slay ss obj i) ; Copie les objets sélectionnés dans tous les calques. (vl-load-com) (setq layers (vla-get-layers (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))) ) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (vla-endundomark acdoc) (princ) ) (vla-startundomark acdoc) (if (or (setq ss (cadr (ssgetfirst))) (setq ss (ssget)) ) (progn (vlax-for lay layers (setq i 0) (repeat (sslength ss) (if (/= (vla-get-layer (setq obj (vlax-ename->vla-object (ssname ss i)))) (setq slay (vla-get-name lay))) (vla-put-layer (vla-copy obj) slay) ) (setq i (1+ i)) ) );vlax-for layer (princ "\nCopie effectuée !") ) );if selection (*error* nil) );cpl (princ "\nCommande à utiliser: CPAL") (princ) Mais ça copie la sélection dans TOUS les calques, même s'ils sont gelés ou verrouillés. Pour ton besoin, il faudrait le modifier un peu pour ne pas prendre en compte les calques gelés/verrouillés, ou pour afficher une boîte permettant de choisir les calques de destination. Mais bon, pour faire 4 copies... :cool: Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
FormaBois Posté(e) le 7 septembre 2011 Posté(e) le 7 septembre 2011 Salut à tous, j'ai retrouvé le lisp de Bonuscad, c'est ici et en plus le code est commenté 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"
touvenant Posté(e) le 12 septembre 2011 Auteur Posté(e) le 12 septembre 2011 Salut, Bonuscad à créé un lisp qui copie tous les objets d'un calque sur tous les autres calques, il suffit de faire une petite recherche. Si tu ne veux pas la copie sur tous il suffit d'isoler les calques non concernés Bonjour,ça a l'air bien, mais j'ai trouvé ce lien :bonuscad.perso.sfr.fr/et je ne trouves pas le lisp dont tu parles.
touvenant Posté(e) le 12 septembre 2011 Auteur Posté(e) le 12 septembre 2011 Salut à tous, j'ai retrouvé le lisp de Bonuscad, c'est ici et en plus le code est commenté Bonjour,le lien ne marche pas.Dommage.
touvenant Posté(e) le 12 septembre 2011 Auteur Posté(e) le 12 septembre 2011 Pour un truc comme cela je fais une selection. Je lance CHPROP, je fais une selection et je change le calque (si le nom n'est pas trop complexe). Puis je copie. et je recommence. Mais j'utilise toujours P comme Précédent dans les manips de COPIER et CHPROP et ça gaze très vite. Je ne fais de la souris qu'à la première selection. Que du clavier après. Faire un programme se justifie-t-il ? Bonjour,merci tramber (y'a un lien avec les créateurs de Kébra ?).A défaut de retrouver la commande (je l'ai peut être rêvée ?) ça va déjà beaucoup plus vite.
touvenant Posté(e) le 12 septembre 2011 Auteur Posté(e) le 12 septembre 2011 Bonjour, J'avais déjà fait un truc semblalble aussi : (defun c:CPAL (/ acdoc layers *error* lay slay ss obj i) ; Copie les objets sélectionnés dans tous les calques. (vl-load-com) (setq layers (vla-get-layers (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))) ) (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (vla-endundomark acdoc) (princ) ) (vla-startundomark acdoc) (if (or (setq ss (cadr (ssgetfirst))) (setq ss (ssget)) ) (progn (vlax-for lay layers (setq i 0) (repeat (sslength ss) (if (/= (vla-get-layer (setq obj (vlax-ename->vla-object (ssname ss i)))) (setq slay (vla-get-name lay))) (vla-put-layer (vla-copy obj) slay) ) (setq i (1+ i)) ) );vlax-for layer (princ "\nCopie effectuée !") ) );if selection (*error* nil) );cpl (princ "\nCommande à utiliser: CPAL") (princ) Mais ça copie la sélection dans TOUS les calques, même s'ils sont gelés ou verrouillés. Pour ton besoin, il faudrait le modifier un peu pour ne pas prendre en compte les calques gelés/verrouillés, ou pour afficher une boîte permettant de choisir les calques de destination. Mais bon, pour faire 4 copies... :cool: Bonjour,merci pour ce programme.Je ne sais malheureusement pas quoi en faire.Je l'ai naïvement copié puis collé dans "outils" "autolisp" "editeur visual lisp" mais je ne peux même pas faire un enregistrement, alors le modifier...Y a-t-il une âme charitable qui voudrait, non pas me donner le produit tout cuit prêt à consommer, mais me mettre le pied à l'étrier pour débuter l'apprentissage du lisp à partir de ce petit bout de programme en commentant chaque ligne ?Ensuite, si Formabois voulais bien envoyer une copie du programme qu'il a trouvé (bonuscad) peut être que je pourrais faire quelque chose avec les deux.Je ne suis pas complètement ignorant, j'ai appris le basic en 1978, le DOS en 1983 et un peu d'assembleur en 1986...
bryce Posté(e) le 12 septembre 2011 Posté(e) le 12 septembre 2011 Bonjour, Je t'ai mis le fichier en téléchargement:http://www.creao.fr/uploads/lisp/cpal.lsp Il suffit de le charger dans AutoCAD (Outils > Charger une application, ou commande APPLOAD) pour l'utiliser tel quel.Pour le modifier, tu peux l'ouvrir dans l'éditeur AutoLISP ou n'importe quel éditeur de texte (Bloc-notex, Notepad++, etc.).Pa contre je n'ai pas le temps de le commenter aujourd'hui, désolé... Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
Titi95 Posté(e) le 12 septembre 2011 Posté(e) le 12 septembre 2011 Pour les lisp, je procède de 2 facons : Je prends le fichier et je le glisse dans Autocad directement puis tu l’appel. Ou tu fais un copier/coller de l’ensemble du code dans la barre de commande de Autocad et tu l’appel Mes anciennes réalisations Autocad
touvenant Posté(e) le 13 septembre 2011 Auteur Posté(e) le 13 septembre 2011 Merci, ca marche !j'ai déjà compris ça.si quelqu'un peut le commenter... A+
bryce Posté(e) le 13 septembre 2011 Posté(e) le 13 septembre 2011 (defun c:CPAL (/ acdoc layers *error* lay slay ss obj i) ; Copie les objets sélectionnés dans tous les calques. (vl-load-com) ; chargement des extensions Visual Lisp ; on stocke dans la variable layers la liste des calques du dessin (setq layers (vla-get-layers (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))) ) ; on redéfinit la fonction *error*, qui est appelée en cas d'erreur du programme. ; Elle est aussi appelée volontairement à la fin du programme pour "faire le ménage". (defun *error* (msg) (and msg (or (member (strcase msg) '("FUNCTION CANCELLED" "QUIT / EXIT ABORT" "FONCTION ANNULEE" "QUITTER / SORTIR ABANDON")) (princ (strcat "\nErreur : " msg)) ) ) (vla-endundomark acdoc) ; on ferme la dernière marque d'annulation (princ) ) ; fin de la redéfinition de *error* (vla-startundomark acdoc) ; on crée une marque d'annulation (if (or (setq ss (cadr (ssgetfirst))) ; si une sélection est active, on la récupére dans le jeu de sélection appelé ss (setq ss (ssget)) ; sinon on demande à l'utilisateur de choisir des objets, et on récupére la sélection dans le jeu de sélection appelé ss ) (progn ; début du progn qui contient toutes les actions effectuées sur la sélection (vlax-for lay layers ; début de la boucle des calques. Boucle effectuée successivement pour chaque calque contenu dans la variable layers, le calque en cours de traitement étant stocké dans la variable lay. (setq i 0) ; on met le compteur i à 0 (repeat (sslength ss) ; début de la boucle des entités, répétée autant de fois qu'il y a d'objets dans le jeu de sélection ss. (if (/= (vla-get-layer (setq obj (vlax-ename->vla-object (ssname ss i)))) (setq slay (vla-get-name lay))) ; si le nom du calque de l'objet n° i dans la sélection est différent du nom du calque stocké actuellement dans lay (nom que l'on stocke dans slay) (vla-put-layer (vla-copy obj) slay) ; alors on copie l'objet sur le calque dont le nom est stocké dans slay ) (setq i (1+ i)) ; on ajoute 1 à i, pour que la prochaine passe de la boucle traite l'objet suivant dans le jeu de sélection ) ; fin de la boucle des entités ); fin de la boucle des calques (princ "\nCopie effectuée !") ) ; fin du progn qui contient toutes les actions effectuées sur la sélection );fin du if sélection (*error* nil) ; on appelle volontairement *error* pour fermer la marque d'annulation créée précédemment );cpl (princ "\nCommande à utiliser: CPAL") (princ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
lili2006 Posté(e) le 14 septembre 2011 Posté(e) le 14 septembre 2011 Bonjour à toutes et tous, Et pourquoi pas : Format => outils de calque => Copier les objets dans un nouveau calque ? ("_copytolayer" au clavier,...) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
touvenant Posté(e) le 15 septembre 2011 Auteur Posté(e) le 15 septembre 2011 Merci, merci beaucoup ! lili206 : et pourquoi pas ? => parce que ! Pourquoi faire simple quand on peut faire comme moi ?Sans plaisanter, merci pour cette commande de laquelle je suis passé à coté.bryce, merci aussi pour le commentaire (la commentation ? la commentarisation ? ) je vais profiter de cet exemple concret pour me mettre enfin au lisp et tacher, d'une seule commande, de copier la sélection sur une sélection de calques. Bonne journée à tous,moi, avec ça, ça va être être facile.
Tramber Posté(e) le 15 septembre 2011 Posté(e) le 15 septembre 2011 merci tramber (y'a un lien avec les créateurs de Kébra ?). Non. C'est Bertrand à l'envers... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
FormaBois Posté(e) le 17 octobre 2011 Posté(e) le 17 octobre 2011 le lien ne marche pas. Dommage.touvenant, j'ai retrouvé et mis à jour le lienJe sais que la réponse arrive un peu tard, mais comme on dit mieux vaut tard que jamais ;) 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"
Sagittaire Posté(e) le 16 avril 2015 Posté(e) le 16 avril 2015 Bonsoir tout le monde, Ce lisp m'intéresse, mais est'il possible de modifier la variable sur tous les calquespar une variable qui permet de copier les objets, uniquement sur un calque précis ? Merci d'avance et bonne soirée. :)
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