Aller au contenu

copier sur plusieur calques


Messages recommandés

Posté(e)

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]

Posté(e)

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

En 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"

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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:

Posté(e)

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.

Posté(e)

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.

Posté(e)

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

Posté(e)

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

Posté(e)
(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)

Posté(e)

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.

Posté(e)

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

 

./__\.
(.°=°.)
  • 1 mois après...
  • 3 ans après...
Posté(e)

Bonsoir tout le monde,

 

Ce lisp m'intéresse, mais est'il possible de modifier la variable sur tous les calques

par une variable qui permet de copier les objets, uniquement sur un calque précis ?

 

Merci d'avance et bonne soirée. :)

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é