Aller au contenu

Alignement de blocs


Lucas DE AMORIM

Messages recommandés

Bonjour, 

Je sais qu'il existe une commande "ALIGNER" sur AutoCAD mais il semblerait qu'elle ne réponde pas exactement à mes besoins car elle concerne surtout les textes.
Sur autocad 2021, j'aimerais créer un LISP (si AutoCAD ne permet pas cette fonction)
Je contextualise puis je donnerais les objectifs : J'ai un dessin avec un fond de plan, par dessus de nombreux blocs ont été disposés pour faire de l'implantation d'équipements.
J'ai collé ces blocs dans un nouveau fichier sans fond de plan afin de garder tous leurs attributs (essentiellement le nommage), le but étant, dans ce nouveau dessin, de faire un synoptique. Cependant, les ayant copiés collé, il sont disposés dans un désordre total j'aimerais dans un premier temps qu'ils se retrouvent tous alignés en colonne avec un espacement régulier. Puis dans un second temps eventuellement qu'ils se rangent dans l'ordre de leur numérotation.
Savez-vous si un LISP de ce type existe déjà ? J'en ai essayé un qui n'aboutit pas le voici :


(defun c:AlignBlocks ()
  (setq start-point (getpoint "\nSélectionnez le point de départ de la colonne : "))
  (setq spacing (getdist "\nEntrez l'espacement entre les blocs : "))
  
  (setq current-point start-point)
  
  (foreach blk (ssget)
    (command "._move" (cdr (assoc 10 (entget (ssname blk 0)))))
            current-point
  (setq current-point (polar current-point 0 spacing))
  )
  (princ "\nBloc aligné en colonne avec succès.")
)

 

Je vous remercie par avance pour l'interêt que vous aurez porté à ma demande,

Bonne journée 

Lucas

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Dans ton programme, tu utilises (foreach) sur un jeu de sélection, or cela ne fonctionne qu'avec les listes..
Pour faire une boucle sur ton jeu de sélection je te suggère ceci :

(defun c:AlignBlocks (/ start-point spacing current-point jsel i)
  (setq start-point (getpoint "\nSélectionnez le point de départ de la colonne : "))
  (setq spacing (getdist "\nEntrez l'espacement entre les blocs : "))
  
  (setq current-point start-point)
  
  (repeat (setq i (sslength (setq jsel (ssget '((0 . "INSERT"))))))
    (command "._move" (cdr (assoc 10 (entget (ssname jsel (setq i (1- i)))))) current-point)
    (setq current-point (polar current-point (/ pi -2.) spacing))
  )
  (princ "\nBloc aligné en colonne avec succès.")
)

Je n'ai pas testé le programme et j'ai fait en sorte de rester au plus proche de ce que tu as déjà développé. Je n'ai fait que corriger certaines erreurs :
 - déclaration des variables locales
 - utilisation d'une boucle (repeat) pour parcourir le jeu de sélection
 - ajout d'un filtre sur le jeu de sélection pour ne sélectionner que les références de bloc
 - modification de l'angle pour (polar), car si tu veux aligner tes blocs en colonne, on est d'accord que cela signifie que tu veux qu'ils soient tous alignés sur un même axe vertical ? Si c'est bien le cas, alors l'angle est -pi/2 (donc une colonne avec les insertions vers le bas).

Autrement, tu peux éventuellement regarder certains lisps existants comme celui de Lee-Mac : http://www.lee-mac.com/blockcounter.html
Je ne suis pas une experte pour retrouver les lisps déjà existants pour correspondre à ton besoin, peut-être que @lecrabe aura plus d'infos pour toi.

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Il y a 3 heures, Lucas DE AMORIM a dit :

Je sais qu'il existe une commande "ALIGNER" sur AutoCAD mais il semblerait qu'elle ne réponde pas exactement à mes besoins car elle concerne surtout les textes.

La commande ALIGNER est utilisé pour des objets 2D ou 3D, c'est une super commande ! Elle déplace, pivote ou encore met à l'échelle un objet par rapport à un autre. 3 fonctions en une seule commande. Elle peut donc servir à aligner des blocs, sur une ligne, par exemple. 

Sinon, il y a ce Lisp pour la numérotation (à voir si cela peut convenir à votre demande) :

Numérotation automatique des blocs AutoCAD (compteur incrémental, InsertC)

Numérotation séquentielle dans les blocs AutoCAD

Si vous devez insérer des blocs avec des numéros incrémentiels dans les attributs ou renuméroter automatiquement les blocs existants dans votre dessin DWG , vous pouvez utiliser l' utilitaire gratuit CADstudio InsertC . InsertC contient deux commandes - InsertC et BlockC .

La commande InsertC est une version « comptage » de la commande INSERT . Il insère un bloc spécifié et remplit automatiquement son premier attribut (resp. spécifié) avec un nombre croissant dans une série. Vous pouvez soit spécifier le bloc en sélectionnant une référence existante, soit en saisissant son nom.

La commande BlockC prend l'ensemble de sélection de blocs existants (ou de multileaders avec blocs) et remplit (renumérote) leurs premiers attributs (resp. spécifiés) avec une série de nombres incrémentiels. Vous pouvez trier les blocs (influencer l'ordre de numérotation) par leur ordre de sélection ou par leurs coordonnées X ou Y.

Les deux commandes de numérotation automatique permettent de spécifier la valeur de départ du compteur, le préfixe (vous pouvez également ajouter des zéros non significatifs) et le suffixe du nombre généré. Vous pouvez également utiliser la variable insertc:Inc LISP pour définir l'incrément (si différent de +1 ), insertc:Prec pour la précision décimale (pour les incréments décimaux) et insertc:AttNo pour spécifier le numéro d'attribut. Par exemple (setq insertc:AttNo 2)

L' utilitaire LISP InsertC est disponible en téléchargement sur Download . Chargez le fichier VLX avec APPLOAD et démarrez-le en tapant les commandes INSERTC ou BLOCKC .

Source https://www.cadforum.cz/en/tips.asp?

Formateur AutoCAD - Revit Architecture - SketchUp - V-Ray / Architecte d'intérieur

https://www.domicrea.fr/

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup pour vos retours 

@Luna Merci pour la correction ! Effectivement je veux aligner tes blocs en colonne sur un même axe vertical donc merci pour ton aide.

J'ai également du mal a fouiller dans les sujets existant pour trouver exactement quelque chose correspondant a mon besoin 😕 

@DOMI Merci beaucoup pour l'incrémentation, finalement j'ai opté pour une autre option dûe à un changement de nommage mais cela me sera utile prochainement !

Encore merci, 

Lucas

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é