Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

J'ai régulièrement des plans architectes à traiter mais j'ai des grandes difficultés avec des hachures qui se trouvent à l'intérieur des blocs. Je voudrais supprimer toutes ces hachures sans avoir à ouvrir chaque bloc :

Il faut que je puisse supprimer toutes les hachures qui sont dans les blocs tels que le mobilier, les voitures, les arbres, les locaux, etc.

MAIS il ne faut pas supprimer les hachures qui sont dans les blocs d'éléments de construction tels que les murs ou similaires.

Auriez-vous une solution ?

Merci d'avance pour votre précieuse aide.

Posté(e)

Bonjour @Aeropix1908

OK, ça devrait le faire.
Par contre, comment devra-t-on sélectionner les blocs dont il faut supprimer les hachures contenues ?

  • Par clic sur le bloc ?
  • Tous les blocs du dessin ?
  • Par choix des noms ?

Actuellement, je choisis de cliquer sur un bloc, ça irait ?
De cette façon, on peut sélectionner des blocs sans connaitre leurs noms.

Amicalement

 

 

Posté(e)

Bonjour @rebcao,

Les hachures ne sont pas sur des calques spécifiques "hachures". Elles sont sur toutes sortes de calques.

 

Bonjour @didier,

Concernant la sélection de bloc, je ne sais pas justement. Si on choisi tous les blocs du dessin, les murs seront sélectionnés (et il ne faut pas supprimer les hachures des murs). Les sélectionner un à un est beaucoup trop long en temps (centaines de blocs par étages). Les sélectionner par nom me semble difficile puisque je connais pas les noms.

Vous trouvez un extrait de plan dans l'exemple ci-joint. L'objectif est de supprimer les hachures du mobilier/locaux (les hachures blanches dans cette exemple). Mais il ne faut pas supprimer les hachures rouges/grises des murs.

Exemple.dwg

Posté(e)

Salut,

Le LISP suivant supprime toutes les hachures des blocs qui ne sont pas sur le calque "Constr - Murs".

Code modifié

(vl-load-com)
(or *acad* (setq *acad* (vlax-get-acad-object)))
(or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
(or *block* (setq *blocks* (vla-get-Blocks *acdoc*)))
(or *layers* (setq *layers* (vla-get-Layers *acdoc*)))

(defun c:aeropix (/ *error* name lst)

  (defun *error* (msg)
    (and
      msg
      (/= msg "Fonction annulée")
      (princ (strcat "\nErreur: " msg))
    )
    (vla-EndUndoMark *acdoc*)
    (princ)
  )
  
  (vla-StartUndoMark *acdoc*)
  (vlax-for obj	(vla-get-ModelSpace *acdoc*)
    (if
      (and
	(= (vla-get-ObjectName obj) "AcDbBlockReference")
	(/= (vla-get-Layer obj) "Constr - Murs")
	(null (member (setq name (vla-get-Name obj)) lst))
      )
       (setq lst (cons name lst))
    )
  )
  (foreach n lst
    (setq blk (vla-item *blocks* n))
    (vlax-for obj blk
      (if (and
	    (= (vla-get-Lock (vla-Item *layers* (vla-get-Layer obj)))
	       :vlax-false
	    )
	    (= (vla-get-ObjectName obj) "AcDbHatch")
	  )
	(vla-delete obj)
      )
    )
  )
  (vla-regen *acdoc* acActiveViewport)
  (*error* nil)
)

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Bonjour @Aeropix1908

Ah OK, il aurait fallu commencer par là ! (comme souvent)
Cette façon de faire n'est pas l'utilisation classique des blocs.
Chaque bloc est différent et inséré qu'une seule fois.
Moi, je suis parti sur un cas classique et du coup je suis hors sujet.
Essayez le LSP de l'ami (gile), si ça vous va tant mieux,
sinon, revenez questionner et je retravaillerai ma routine au niveau du jeu de sélection.

Posté(e)

Je n'avais encore jamais utilisé de LISP : grande découverte pour ma part. Je viens de réussir à utiliser celui de gile ci-dessus et je dois dire que ça semble très pratique mais je suis pas prêt de pouvoir en créer par moi-même malheureusement (j'ai vraiment de la peine avec la programmation).

Par contre, ce LISP supprime toutes les hachures de mon exemple y.c. celles des murs, ce que je ne souhaite pas.

En fait, je reçois des plans d'architectes de la part d'architectes différents et les calques sont très souvent mal gérés, c'est à dire que les objets/blocs/symboles/dessin/ligne/etc. ne sont pas sur les bons calques. Je pense qu'il ne faut donc pas créer un LISP sur une base de calques.

J'imagine qu'il faut bien utiliser des critères pour créer un LISP. Peut-être est-il possible de faire quelque chose avec les couleurs ? Par exemple supprimer toutes les hachures sauf celles de couleurs rouge et noirs ?

Et je pourrais ensuite modifier si besoin le code couleur dans le LISP en fonction des projets et de ce que je dois supprimer comme hachures ?

 

  • Upvote 1
Posté(e)

Bonjour @Aeropix1908

Il suffit de décomposer ces blocs dont le nom commence par mur…
Commande décomposer et au message choix des objets, créer un filtre 'fi et choisir nom de bloc et renseigner mur*
Tous les blocs murs seront décomposés, de toute façon ce n'est pas très utile de les laisser sous forme de blocs.

2024-09-13_16-55-33.png.4a360c26fadcfecc2b79e8bb54de4800.png

Posté(e)
il y a 38 minutes, Aeropix1908 a dit :

Par contre, ce LISP supprime toutes les hachures de mon exemple y.c. celles des murs, ce que je ne souhaite pas.

C'était un oubli, j'ai modifié le LISP ci-dessus.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é