Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

J'utilise ce LISP pour Tout mettre en blanc (je récupère un morceau de plan pour le mettre sur une page de garde de dossier sous Excel et il faut qu'il soit en blanc).
Le problème est que les blocs se fichent bien du LISP et gardent une couleur éclatante...
Ils contiennent du texte et si je les décompose je récupère le nom de l'attribut et non plus sa valeur.
Merci pour votre aide.
 

(defun c:Blanc ()
  (vl-load-com)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq modelSpace (vla-get-ModelSpace doc))

  ;; Demander à l'utilisateur de sélectionner les objets
  (setq selectionSet (ssget))

  (if selectionSet
    (progn
      ;; Fonction pour modifier la couleur des objets tout en préservant le type de ligne
      (defun ChangerCouleur (obj)
        (if (vlax-property-available-p obj 'Color)
          (vla-put-Color obj 7) ;; Blanc (Index couleur 7)
        )
        (if (vlax-property-available-p obj 'Linetype)
          (setq linetype (vla-get-Linetype obj)) ;; Sauvegarde du type de ligne
        )
        (if linetype
          (vla-put-Linetype obj linetype) ;; Réapplication du type de ligne
        )
      )

      ;; Modifier les objets sélectionnés
      (setq i 0)
      (repeat (sslength selectionSet)
        (setq obj (vlax-ename->vla-object (ssname selectionSet i)))
        (ChangerCouleur obj)
        (setq i (1+ i))
      )

      ;; Modifier les objets dans les blocs sélectionnés uniquement
      (setq i 0)
      (repeat (sslength selectionSet)
        (setq obj (vlax-ename->vla-object (ssname selectionSet i)))
        (if (eq (vla-get-ObjectName obj) "AcDbBlockReference")
          (progn
            (setq blkName (vla-get-EffectiveName obj))
            (setq blk (vla-item (vla-get-Blocks doc) blkName))
            (vlax-for blkObj blk
              (ChangerCouleur blkObj)
            )
            ;; Déplacer les blocs vers le calque "0"
            (if (vlax-property-available-p obj 'Layer)
              (vla-put-Layer obj "0")
            )
          )
        )
        (setq i (1+ i))
      )

      ;; Modifier la couleur des cotations sélectionnées uniquement (traits, texte et flèches)
      (setq i 0)
      (repeat (sslength selectionSet)
        (setq obj (vlax-ename->vla-object (ssname selectionSet i)))
        (if (or (wcmatch (vla-get-ObjectName obj) "*Dimension*")
                (eq (vla-get-ObjectName obj) "AcDbDimension"))
          (progn
            ;; Modifier la couleur des traits de cotation
            (ChangerCouleur obj)
            
            ;; Modifier la couleur du texte de cotation
            (if (vlax-property-available-p obj 'TextColor)
              (vla-put-TextColor obj 7)
            )
            
            ;; Modifier la couleur du MText si présent
            (if (vlax-property-available-p obj 'MText)
              (progn
                (setq mtextObj (vla-get-MText obj))
                (if mtextObj
                  (vla-put-Color mtextObj 7)
                )
              )
            )
            
            ;; Modifier la couleur des flèches, lignes d'attache et lignes d'extension
            (if (vlax-property-available-p obj 'Dimclrd)
              (vla-put-Dimclrd obj 7) ;; Couleur des lignes d'attache et de cote
            )
            (if (vlax-property-available-p obj 'Dimclrt)
              (vla-put-Dimclrt obj 7) ;; Couleur des flèches
            )
            (if (vlax-property-available-p obj 'Dimclre)
              (vla-put-Dimclre obj 7) ;; Couleur des lignes d'extension
            )
            
            ;; Déplacer les cotations et les lignes de repères vers le calque "1-FORT"
            (if (vlax-property-available-p obj 'Layer)
              (vla-put-Layer obj "1-FORT")
            )
          )
        )
        (setq i (1+ i))
      )
      
      (princ "\nLes objets sélectionnés, y compris les blocs (déplacés vers le calque 0) et les cotations (déplacées vers le calque 1-FORT), ont été mis en blanc tout en conservant leur type de ligne.")
    )
    (princ "\nAucune sélection effectuée.")
  )
  (princ)
)

 

Posté(e) (modifié)

Bonjour @Faby38,

Pourrais-tu être plus précis ?

Je ne comprends pas bien ce que tu souhaites faire. Mettre tout en blanc. Mettre quoi, en blanc ? Aussi, si c'est pour mettre un morceau de dessin sur une page de garde d'un dossier, cette page de garde, de quelle couleur est-elle ? Car si elle est blanche, on ne va pas voir grand-chose de ton morceau de plan.

Veux-tu un dessin dessiné en blanc sur un fond d'une autre couleur ? Si c'est le cas, il n'y a pas besoin de lisp pour faire ça. AutoCAD peut le faire nativement, sans modifier la couleur des calques.

Pour ce qui est de la décomposition des blocs avec attributs, si tu as un AutoCAD full, il y a la commande BURST, qui fait partie des Express Tools, pour conserver la valeur des attributs.

Modifié par Steven

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Bonjour à tous,
Merci pour vos retours et pour votre aide.

Je ne connaissais pas BURST.

J'ai fait plusieurs tests (uniquement en tapant BURST dans la ligne de commande).

Sur ma pièce jointe, cela fonctionne bien sur le repère de tubulure qui garde bien sa valeur B1 et pas le nom de l'attribut (A1.1).

Cependant, je suis obligé de faire plusieurs BURST sur la boulonnerie pour arriver à la décomposer complètement (BURSTer 3 fois ?)

Je retrouve ces blocs plusieurs fois sur l'ensemble de mon plan, mais je veux BURSTer uniquement sur une sélection sans que cela influe sur le reste du plan.

Et ensuite tout passer en NOIR (et pas en Blanc...).

Merci.

 

BURST.dwg

Posté(e)
il y a une heure, Faby38 a dit :

Et ensuite tout passer en NOIR (et pas en Blanc...).

 

BURST.dwg 97.58 Ko · 1 téléchargement

Peux-tu expliquer précisément ce que tu souhaites faire ?

Tu souhaites donc, si j'ai bien compris, mettre un morceau de plan, sur une page de garde, Excel. Pour cela, tu souhaiterais imprimer tout en noir (couleur n°7 – Blanc), pour avoir un dessin noir sur blanc. C'est bien ça ?

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)
Il y a 1 heure, Faby38 a dit :

ns Bonjour à tous,
Merci pour vos retours et pour votre aide.

Je ne connaissais pas BURST.

J'ai fait plusieurs tests (uniquement en tapant BURST dans la ligne de commande).

Sur ma pièce jointe, cela fonctionne bien sur le repère de tubulure qui garde bien sa valeur B1 et pas le nom de l'attribut (A1.1).

Cependant, je suis obligé de faire plusieurs BURST sur la boulonnerie pour arriver à la décomposer complètement (BURSTer 3 fois ?)

Je retrouve ces blocs plusieurs fois sur l'ensemble de mon plan, mais je veux BURSTer uniquement sur une sélection sans que cela influe sur le reste du plan.

Et ensuite tout passer en NOIR (et pas en Blanc...).

Merci.

 

BURST.dwg 97.58 Ko · 1 téléchargement

Le bloc boulon est vraiment mal conçu. Il est fait de blocs anonymes (A$CXXXXXX) dû à des Copier-coller, qui eux-mêmes, sont dans un calque, FINS, avec la couleur 10.

Les bonnes pratiques, pour créer un bloc, est, dans la plupart du temps, de mettre les objets sur le calque 0, en couleur, DUBLOC, DUBLOC, DUBLOC ou DUCALQUE, DUCALQUE, DUCALQUE, selon le degré de souplesse qu'on souhaite avoir.

Mais bon, c'est un sujet dont les avis sont partagés.

Dans ton fichier, le bloc, Boulonnerie, est un bloc dynamique, sans attribut. Il n'y a donc pas besoin d'utiliser la commande, BURST.

Si tu souhaites imprimer ton dessin, tout en noir, sans devoir décomposer les blocs, pour les passer en noir, pourquoi ne pas utiliser le style de tracé, monochrome.ctb, du fait que ton dessin est en CTB.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

J'ai tâtonné pour créer le bloc "Boulon" (visibilité, angle, longueur) il réagi comme je le souhaite, du coup je ne suis pas allé chercher plus loin, même si cela ne colle pas aux bonnes pratiques.

Je ne suis pas tout seul à venir piocher ce croquis ou un morceau de croquis (inspecteurs, contrôleurs, atelier...).
Nous avons l'habitude de fonctionner de cette façon en venant copier un bout de DWG.

Si j'utilise 3 fois BURST dans la ligne de commande, puis tout mettre en noir cela fonctionne.

Je vais laisser tomber le LISP, ceci me convient.

Merci encore pour votre aide.

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é