Aller au contenu

Fusionner les calques en conservant les couleurs des objets


ombresoleil

Messages recommandés

Bonjour, 

Je cherche désespérément une solution pour pouvoir fusionner des calques mais en conservant les couleurs et propriétés des objets fusionnés.

voici un bloc d'exemple sur lequel je cherche à fusionner les calques mais voici le résultat malheureusement (je perds les couleurs)

Je sais que l'une des solutions est de rentrer sur chacun des éléments du bloc et de définir une couleur de calque mais c'est vraiment laborieux, j'ose espérer trouver une solution plus simple et plus rapide...

image.thumb.png.c5cb899ca6d640943635dc34a463dcba.png

merci de votre aide

 

exemple fusion calque.dwg

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Rien de plus normal. Certains objet de certains bloc sont en couleur "Ducalque". Donc quand tu fusionnes tout tes calques dans un seul calque, les objets prennent la couleur définie par le calque car tes objets son en couleur "Ducalque".

Pour palier ce problème, avant fusion, il faudrait ouvrir chaque blocs et forcer la couleur pour ne plus être en "Ducalque".

  • Like 2
www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Hello @ombresoleil

En fait il te faudait une routine qui force la couleur de tous les objets <DuCalque> dans la couleur par defaut du calque d origine

et de plus qui "descende" dans la structure des Blocs pour analyser les objets <DuCalque> et faire de meme !

Ai je bien compris ?

Et apres tu fais ta fusion de calques ...

Bye, lecrabe

 

  • Like 1

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Ca pose plusieurs problèmes, car on va devoir modifier la couleur d'une définition de bloc en fonction de l'insertion de sa référence.

Si un bloc CHAISE (composé d'objets de couleur DUBLOC ou DUCALQUE) est inséré 1 fois dans un calque Bleu et une fois dans un calque Vert, de quelle couleur doit être la chaise, car on peut forcer Vert ou Bleu, mais pas les 2 en même temps!

Si un bloc est composé d'objet de couleur DUBLOC et que le bloc est inséré 1 fois en couleur Ducalque dans un calque Bleu et 1 fois dans ce même calque Bleu mais avec une couleur forcée Rouge, quelle doit être la couleur de la chaise?

Si une définition de bloc, contient d'autre bloc, on multiplie par 2 ou plus les problèmes.

 

Olivier

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

J'ai eu le même besoin il y a fort longtemps.

La base du lisp (traiter tous les blocs en 0 dubloc dubloc) n'est pas de moi.

Je ne me rappelle même pas si c'est moi qui l'ai adapté à ce besoin.

 

 ;**********************************************************************************************************************************************************
 ;NORMALISER BLOCS
  ;**********************************************************************************************************************************************************
 ;Place les entités constituant chaque blocs sur le calque 0 en couleur d'ORIGINE

(defun c:nb2 ()


  (setq echoold (getvar "cmdecho"))
  (setvar "cmdecho" 0)

  ;(command "-calque" "a" "e" "Normalise" "" "" "")

  (COMMAND "-calque" "L" "*" "AC" "*" "D" "*" "")
  (COMMAND "-calque" "E" "0" "")
  

 ;Normalisation des blocs dans la table des blocs
  (if (/= nil (setq	i   (tblnext "block" t)))(progn
 ; RECHERCHE LA PREMIERE ENTREE DANS LA TABLE DES BLOCS 
	(setq tot 1)
  (while i
    (setq n (cdr (assoc -2 i)))
 ; SELECTIONNE LA PREMIERE ENTITE QUI COMPOSE LE BLOC
    (while n
      (setq n (entget n))

      
      (setq colorigin (cdr (assoc 62 n)))
      (if (or (= nil colorigin)(= 256 colorigin)(= "BYLAYER" colorigin))(setq colorigin (cdr(assoc 62 (tblsearch "layer" (cdr (assoc 8 n)))))))
      (if (> 0 colorigin)(setq colorigin (- 0 colorigin)))
;Récupère la couleur de l'entité d'origine (ou de son calque si la couleur est "bylayer")

      
 ; RECUPERE LES VALEURS DES ENTITES QUI COMPOSE LE BLOC
      (if (/= (cdr (assoc 8 n)) "0")
	(progn
	  (setq n (subst (cons 8 "0") (assoc 8 n) n))
 ;SI L'ENTITE N'EST PAS SUR 0, LA DEPLACE SUR 0
	  (entmod n)
	  ) ;_ Fin de progn
	) ;_ Fin de if

      (if (not (assoc 62 n))
 ;SI L'ENTITE N'A PAS LE CODE DXF 62 (=DuCalque), LE CREE ET LUI AFFECTE LA VALEUR de son calque d'origine
	(setq n (append n (list (cons 62 colorigin)))))
	
 ;CHANGE LA COULEUR EN COULEUR D4ORIGINE
	  (setq n (subst (cons 62 colorigin) (assoc 62 n) n))
	  

      (entmod n)
      (setq n (entnext (cdr (assoc -1 n)))) ;ENTITE SUIVANTE
      ) ;_ Fin de while
    (setq i   (tblnext "block")
	  tot (1+ tot)
	  ) ;BLOC SUIVANT
    ) ;_ Fin de while

 ;Normalisation des étiquettes d'attributs de blocs dans le dessin (car une étiquette peut avoir des valeurs de calque, couleur, etc. différentes de l'attribut)
  (setq j 0)
  (setq nat 0)
  (if (/= nil (setq sel (ssget "x" (list (cons 0 "INSERT")))))(progn
  (while (ssname sel j)
    (setq n (entget (ssname sel j)))
    (if	(assoc 66 n)
      (progn
	(setq i (entget (entnext (cdr (assoc -1 n)))))
	(while (/= (cdr (assoc 0 i)) "SEQEND")
	  (setq i (subst (cons 8 "0") (assoc 8 i) i))
 ; mettre l'attribut sur le calque 0



(if (not (assoc 62 i))(setq i (append i (list (cons 62 0)))))
(if (/= (cdr (assoc 62 i)) 0)(setq i (subst (cons 62 0) (assoc 62 i) i)))
	  

	  
 ; mettre l'attribut en couleur dubloc





	  
	  (entmod i) ; modifier l'entité
	  (entupd (cdr (assoc -1 i)))
 ; mettre à jour sur l'écran l'entité
	  (setq nat (+ 1 nat))
	  (setq i (entget (entnext (cdr (assoc -1 i)))))
	  ) ;_ Fin de while
	) ;_ Fin de progn
      ) ;_ Fin de if
    (setq j (1+ j))
    ) ;_ Fin de while
    ) ;_ Fin de progn
  ) ;fin de if
	
 ;Résultat
 ;-----------------------------------------------
  (princ
    (strcat "\nTraitement de "
	    (itoa (+ tot nat))
	    " bloc(s) ("
	    (itoa tot)
	    " dans la table des blocs et "
	    (itoa nat)
	    " étiquette(s) d'attribut(s) de bloc(s) dans le dessin)"
	    ) ;_ Fin de strcat
    ) ;_ Fin de princ
  ;(command "-calque" "a" "s" "Normalise" "" "")
  (command "regen")
  (setvar "cmdecho" echoold)
  (graphscr)
  (princ)
    )
  ) 
)
(prompt
  "\nnb2 : Normaliser les blocs du dessin (calque 0 - Couleur d'ORIGINE)"
  ) ;_ Fin de prompt

Attention, cela traite TOUS les blocs du dessin d'un coup.

Attention cela ne traite QUE les blocs (donc j'avais l'habitude de faire un bloc de tout mon dessin avant de le lancer ; mais doit y avoir moyen de modifier le programme).

Il faudrait ajouter un traitement des calques verrouillés je crois, sinon, ça marche

 

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é