AutoKad Posté(e) le 2 avril 2017 Posté(e) le 2 avril 2017 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
x_all Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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 (^^) quelques trucs sur autocad
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 Salut, Peux tu me dire comment retrouver les blocs si la personne n'a pas purger le dessin. Merci
Aleck_Ultimate Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 Il y a bien les bloc quand je vais dans insérer mais il ne sont pas à la bonne échelle. Peux tu me dire comment faire pour remplacer tous les bloc d'un coup à partir des bloc dans insérer. Merci
(gile) Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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 - GitHub Développements sur mesure pour AutoCAD
Aleck_Ultimate Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 Heu... Je fait de l'informatique, pas de la magie , 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
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 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
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 Oui Aleck c'est ce que j'ai commencé à faire. J'ai créer des boutons dans la palette d'outils contenant mes bloc à la bonne échelle et je les colle par dessus les formes décomposées mais bon je le fais sans isoler le calque.
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 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
Patrick_35 Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 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
Patrick_35 Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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? MerciOui, avec la commande inserer. @ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
x_all Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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... quelques trucs sur autocad
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 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.
Aleck_Ultimate Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 Est ce que c'est possible que ce soit parce que j'ouvre un fichier fait sous Autocad 2016 avec mon Autocad LT 2017 que les bloc soit décomposés?
x_all Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 non la décomposition des blocs est une action volontaire quelques trucs sur autocad
AutoKad Posté(e) le 3 avril 2017 Auteur Posté(e) le 3 avril 2017 Parce que j'ai certains fichier dwg ou les bloc ne sont pas décomposés.
Patrick_35 Posté(e) le 3 avril 2017 Posté(e) le 3 avril 2017 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 4 avril 2017 Posté(e) le 4 avril 2017 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 - GitHub Développements sur mesure pour AutoCAD
AutoKad Posté(e) le 11 avril 2017 Auteur Posté(e) le 11 avril 2017 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
(gile) Posté(e) le 11 avril 2017 Posté(e) le 11 avril 2017 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 - GitHub Développements sur mesure pour AutoCAD
AutoKad Posté(e) le 11 avril 2017 Auteur Posté(e) le 11 avril 2017 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
AutoKad Posté(e) le 9 mai 2017 Auteur Posté(e) le 9 mai 2017 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant