ombresoleil Posté(e) le 3 avril Posté(e) le 3 avril 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... merci de votre aide exemple fusion calque.dwg Citer
La Lozère Posté(e) le 4 avril Posté(e) le 4 avril 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". 2 Citer www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
lecrabe Posté(e) le 4 avril Posté(e) le 4 avril 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 1 Citer Autodesk Expert Elite Team
ombresoleil Posté(e) le 4 avril Auteur Posté(e) le 4 avril bonjour, merci pour vos retour @lecrabe oui exactement mais comment faire concrètement pour forcer les couleurs ? Thanks Citer
Olivier Eckmann Posté(e) le 4 avril Posté(e) le 4 avril 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 1 Citer
LUDWIG Posté(e) le 9 avril Posté(e) le 9 avril 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 Citer Autocad 2021 - Revit 2022 - Windows 10
LUDWIG Posté(e) le 9 avril Posté(e) le 9 avril Ah je précise que ça met toutes les entités des blocs sur le calque 0 Citer Autocad 2021 - Revit 2022 - Windows 10
Messages recommandés