Aller au contenu

Recomposer plusieurs blocs en même temps


AutoKad

Messages recommandés

Bonjour à tous,

 

Je travaille actuellement sous AUTOCAD LT mais je possède aussi AUTOCAD 2009 au bureau et une version éducative d'Autocad 2016.

 

Je voudrais savoir si il est possible de recomposer des blocs qui ont été décomposés.

 

Pour être plus précis, j'ai reçus un fichier AUTOCAD venant d'un Bureau d'étude cependant tous les bloc de celui-ci ont été décomposés.

 

(Je pense que ce sont des blocs décomposés car à l'ouverture de mon fichier AUTOCAD il me dit que le fichier contient des objet AEC créer par une application ARX).

 

Cependant peut être que le dessinateur qui à créer ce fichier en bureau d'étude n'a fais que copier-coller les objet sans les mettre en blocs.

 

(Ce dont je doute fortement car les fichiers car il y a plusieurs fichiers contiennent des milliers de formes ou bloc décomposés).

 

Je voudrais donc savoir si il existe une LISP pour AUTOCAD ou une Macro pour AUTOCAD LT qui me permettrai de changer toutes ces formes en bloc d'un seul coup.

 

Car on m'a demander au travail de faire en sorte que toutes ces formes par soit des blocs (sans changer leur apparence).

 

Par exemple pour une armoire électrique il s'agit d'un rectangle avec deux lignes en diagonale dedans pour faire une croix, et on me demande de transformer cette forme en bloc, cependant il y a des milliers d'armoires donc en attendant une solution je me retrouve à devoir toutes les transformer en bloc une à une.

 

A savoir que les formes font toute partie du même calque et que je n'ai pas pu avoir accès aux informations concernant le bureau d'étude qui à émis ces fichiers.

 

Est-ce que quelqu'un pourrait m'aider à sortir de ce cauchemar de dessinateur?

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

ha!...

 

un classique...

mais disons le tout de suite non! Il n’existe pas de formule magique, d'incantation vaudou, ou de prière au dieux des octets capable de retrouver dans un ensemble de lignes et autres entité simple une forme sympathique en se disant "ho ça ça ressemble à un bloc", je le recompose. C'est sur que les progrès de inintelligence artificielle sont bluffant, mais on est loin de ce qui peu se faire en lisp sur autocad.

 

Tu peux t'en sortir si le petit malin qui à exploser tous les bloc ne l'est pas assè pour avoir purger le dessin au quel cas, tu peux retrouver des blocs, (mais pas remplacer les blocs explosés par un (ou des) bloc) Ou encore, si tu as garder de bon rapports avec le BE Il faut toujours garder de bon rapport avec son BE (^^)

 

 

Lien vers le commentaire
Partager sur d’autres sites

Salut.

 

Tu peut passer tout simplement par le bouton insérer du ruban, mais le mieux c'est de passer par le dezigne center.

 

Cordialy.

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je suis entièrement d'accord avec x_all, le plus simple serait de te retourner vers le BE pour qu'il te fournisse un DWG exploitable.

 

Je sais que certains sont tellement jaloux de leur travail qu'ils ne veulent pas fournir de DWG contenant leurs blocs (voire ne pas fournir de DWG utilisable).

On en a même vu, ici, demander une routine pour décomposer tous les blocs d'un dessin. Personnellement, j'ai toujours refusé de le faire.

Continuer à travailler avec des BE qui font ça délibérément est, à mon avis, contre productif...

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Heu...

 

Je fait de l'informatique, pas de la magie laugh.gif, et de plus je début, donc il est très possible que quelqu'un d'autre ais une meilleur solution.

 

Tout ce que je peut faire c'est te proposer la méthode suivante :

 

-> Vérifier dans le bloc quelle est le point de base

 

-> Faire un calque à part et placer un point sur l'équivalant du point de base dans tes blocs décomposés sur ton dessin

 

-> Isoler le calque avec les points et insérer le bloc sur chaque point

 

-> Tout remettre visible et vérifier que les bloc se superposent correctement à leur alter-ego décomposé

 

-> Dans tout ça prévoir un moyen de supprimer les blocs décomposés si'il ne sont pas déjà dans un calque particulier, peut-être les y envoyer pendant l'étape 2, pour pouvoir tous les effacer d'un coup.

 

Pour ton problème d’échelle, vérifie l’unité de tes blocs.

 

Tu a trois solutions :

 

-> Changer provisoirement l’échelle de ton dessin, ou modifier son unité.

 

-> Changer l’échelle d'insertion du bloc en lui-même (je crois que c'est possible mais je ne me souviens plus comment) ou changer l’échelle du bloc par BEDIT en même temps que l’étape 1.

 

-> Faire une MACROS qui intégrera le facteur d’échelle d'insertion (à mon avis loin d’être le plus simple).

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je suis entièrement d'accord avec vous et je vais insister auprès de la direction pour avoir des dwg exploitable, mais le problème c'est qu'actuellement je suis seul au bureau et les chefs et tous ceux qui ont les contacts avec le BE sont en vacances et je dois rendre mon travail le 15.

 

Du coup je voudrais savoir si il existait au moins un LISP ou une Maco qui me permettrai de créer plusieurs bloc en même temps vu que les formes existe déjà et sont dans le même calque.

 

Ou bien si il existe quelque chose pour pouvoir créer les bloc plus rapidement car à les transformer un à un je vais devenir dingue.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Sinon est ce qu'il existe une macro qui me permettrai d'avoir les bloc que j'ai créer dans la palette d'outils à l'échelle pour chaque dessin (j'ai créer des bloc et glisser-déposer dans la palette d'outils) .

 

Car les dessin ne sont pas tous à la même échelle.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Du coup je voudrais savoir si il existait au moins un LISP ou une Maco qui me permettrai de créer plusieurs bloc en même temps vu que les formes existe déjà et sont dans le même calque.

Salut

 

La réponse est simple. Non car comment dire à autocad quel objet compose de tel bloc, à part la personne qui voit le dessin ?

 

Ou bien si il existe quelque chose pour pouvoir créer les bloc plus rapidement car à les transformer un à un je vais devenir dingue.

La commande bloc est rapide. La difficulté est plus de comparer dans le dessin les objets et les remplacer par les bons blocs, et là, ça risque de prendre beaucoup de temps et automatiser cette tâche en lisp est très, très compliquée (facteur d'échelle, angle de rotation, etc...).

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

En utilisant la commande bloc, les bloc n'auront donc pas le même nom.

 

Ou est-ce qu'il existe une méthode pour que tous les bloc ait le même nom?

 

Merci

Oui, avec la commande inserer.

 

@

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

non.. c'est sur qu'a une époque ou google sais reconnaître sur photo un visage quel que soit l'orientation, on se dit que quand même chez todesk il pourrai mettre une équipe la dessus. Après tout on est en plein dans la maturité de inintelligence artificielle!

 

 

Schématiquement parlant, on détermine des patern, on les compare en orientation et en échelle à ce qu'il y a sur le dessin, on vérifie dans notre base de donnée que le bloc n'est pas déja traité.... on efface les entités pour les remplacer par le bloc... simple non?

Mais si tu veux mon avis... vue les "évolutions" de ces dernières années.. s'il existe des ingé capable de le faire, il sont parti bosser chez google depuis un moment car chez todesk, on peu pas dire qu'on sur exploite leur intelligence... Alors l'intelligence artificielle...

Lien vers le commentaire
Partager sur d’autres sites

Alors là c'est plus la même chose.

 

Il y a peut-être, je dit bien peut-être, moyen de bricoler quelque-chose avec SELECTRAP si tous les blocs ont les mêmes dimensions, ou peut de variantes. Je ne connais pas assez ni SELECTRAP ni les LISP pour pouvoir faire plus qu’énoncer l'idée.

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Comme il s'agit de rectangle donc une polyligne fermée et en plus dans le même calque dans mon cas je pensais qu'Autocad pouvait reconnaître ça et faire en sorte de transformer tout ce qui est une polyligne fermée en bloc.

Il est alors possible de faire quelque chose de pas trop compliqué.

 

Si tu pouvais fournir une exemple.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'ai fait, il y a peu, un LISP pour remplacer des rectangles (polyligne fermée rectangulaire) par des blocs dynamiques (c'était la demande).

 

Je l'ai adapté pour fonctionner avec un simple bloc (rectangle de 1x1 unité) qui est inséré avec les échelles en X et Y correspondant aux dimensions de la polyligne remplacée.

Le bloc, nommé "rectangle" par défaut (à modifier au besoin au début du code) est créé s'il n'existe pas dans le dessin.

L'utilisateur est invité à spécifier un nom de calque. Toutes les polylignes rectangulaires sur ce calque sont remplacées par une référence de bloc.

 

(defun c:rec2blk (/	      *error*	  2dVar2PtList
	  midPt	      tryGetRectangle	      replaceByBlock
	  makeBlock   blkName	  layName     ss
	  rect	      rectangs	  org	      len
	  wid	      rot
	 )
 ;; remplacer "rectangle" par le nom du bloc souhaité
 (setq blkName "rectangle")

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

 (defun *error* (msg)
   (and msg
 (/= msg "Fonction annulée")
 (prompt (strcat "\nErreur: " msg))
   )
   (vla-EndUndoMark *acdoc*)
   (princ)
 )

 ;; Convertit une liste de coordonnées 2d en liste de points 2d
 (defun 2dVar2PtList (lst)
   (if	lst
     (cons (list (car lst) (cadr lst)) (2dVar2PtList (cddr lst)))
   )
 )

 ;; Retourne le milieu de deux points
 (defun midPt (p1 p2)
   (mapcar (function (lambda (x1 x2) (/ (+ x1 x2) 2.))) p1 p2)
 )

 ;; Evalue si les points tournent dans le sens horaire
 (defun clockwise-p (p1 p2 p3)
   (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)
 )

 ;; Evalue si la polyligne est rectangulaire et retourne les données du rectangle
 (defun tryGetRectangle (pline / pts org len wid rot)
   (if
     (and
(= (vla-get-closed pline) :vlax-true)
(setq pts (2dVar2PtList (vlax-get pline 'Coordinates)))
(= (length pts) 4)
(equal (distance (car pts) (caddr pts))
       (distance (cadr pts) (cadddr pts))
       1e-9
)
(equal (midPt (car pts) (caddr pts))
       (midPt (cadr pts) (cadddr pts))
       1e-9
)
     )
      (progn
 (if (clockwise-p (car pts) (cadr pts) (caddr pts))
   (setq pts (reverse pts))
 )
 (setq org (car
	     (vl-sort pts
		      (function
			(lambda	(p1 p2)
			  (if (= (cadr p1) (cadr p2))
			    (< (car p1) (car p2))
			    (< (cadr p1) (cadr p2))
			  )
			)
		      )
	     )
	   )
 )
 (cond
   ((equal org (car pts))
    (setq len (distance org (cadr pts))
	  wid (distance org (cadddr pts))
	  rot (angle org (cadr pts))
    )
   )
   ((equal org (cadr pts))
    (setq len (distance org (caddr pts))
	  wid (distance org (car pts))
	  rot (angle org (caddr pts))
    )
   )
   ((equal org (caddr pts))
    (setq len (distance org (cadddr pts))
	  wid (distance org (cadr pts))
	  rot (angle org (cadddr pts))
    )
   )
   (T
    (setq len (distance org (car pts))
	  wid (distance org (caddr pts))
	  rot (angle org (car pts))
    )
   )
 )
 (list org len wid rot)
      )
   )
 )

 ;; Remplace la polyligne par un bloc
 (defun replaceByBlock
 (pline rect blkName layName / org len wid rot ins blk)
   (mapcar 'set '(org len wid rot) rect)
   (setq
     ins (list (car org) (cadr org) (vla-get-Elevation pline))
     blk (vla-InsertBlock
    (vla-get-ModelSpace *acdoc*)
    (vlax-3d-point ins)
    blkName
    len
    wid
    1.0
    rot
  )
   )
   (vla-put-Normal blk (vla-get-Normal pline))
   (vla-put-Layer blk layName)
 )

 ;; Crée la définition de bloc
 (defun makeBlock (blkName / blk)
   (setq block (vla-Add *blocks* (vlax-3d-point '(0. 0. 0.)) blkName))
   (setq pline	(vlax-invoke
	  block
	  'AddLightWeightpolyline
	  '(0. 0. 1. 0. 1. 1. 0. 1.)
	)
   )
   (vla-put-Closed pline :vlax-true)
   (vla-put-Layer pline "0")
 )

 ;; Fonction principale
 (vla-StartUndoMark *acdoc*)
 (or (tblsearch "block" blkName)
     (makeBlock blkName)
 )
 (if
   (and
     (setq layName (getstring T "\nEntrer le nom du calque: "))
     (tblsearch "layer" layName)
   )
    (if (ssget	"_X"
	(list (cons 0 "LWPOLYLINE")
	      (cons 8 layName)
	      (cons 410 "Model")
	)
 )
      (progn
 (vlax-for pline (setq ss (vla-get-ActiveSelectionSet *acdoc*))
   (if (setq rect (tryGetRectangle pline))
     (progn
       (replaceByBlock pline rect blkName layName)
       (vla-Delete pline)
     )
   )
 )
 (vla-Delete ss)
      )
    )
    (prompt (strcat "\nLe calque '" layName "' n'existe pas."))
 )
 (*error* nil)
)

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Désolé de répondre en retard mais j'avais des problèmes pour me connecter au site.

 

Voici le lien vers un petit exemple que j'ai à traiter:

 

https://we.tl/DhTpDWm1ou

 

Il s'agit d'un dessin dwg qui contient une légende pour identifier les bloc qui sont décomposés et que je souhaite recomposer.

 

Sinon Gile peux tu me dire si ton LISP fonctionne pour remplacer ces blocs qui ne sont pas dynamiques.

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Sinon Gile peux tu me dire si ton LISP fonctionne pour remplacer ces blocs qui ne sont pas dynamiques.

 

Comme décris plus haut, le LISP remplace les "rectangles" (polylignes fermées rectangulaires) par un bloc qui, en l'état n'est qu'un rectangle.

Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Ok Gile pour le LISP mais justement en remplaçant mes rectangles par des blocs (pour l'armoire par exemple dans le dwg que j'ai donné), il n'existe pas une commande qui me permettrai de remplacer ce nouveau bloc (le bloc rectangle nouvellement crée) par un autre bloc qui serait celui de l'armoire?

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

Bonjour à tous,

 

Je reviens vers vous pour vous confirmer que j'ai remplacé les blocs rectangles crées par le LISP de gile par d'autres blocs avec Rbloc et que ça marche super bien.

 

Donc merci beaucoup à toi gile.

 

Mais aussi, je voudrais savoir si il était possible d'arranger le LISP pour que cela fonctionne avec des cercles.

 

Ce que je voudrais c'est changer tous les cercles en bloc pour pouvoir ensuite les modifier avec Rbloc.

 

Merci encore

Lien vers le commentaire
Partager sur d’autres sites

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é