Créer une ligne de repère dynamique avec le nom du bloc sélectionné

Comment créer une ligne de repère (leader) qui affiche automatiquement le nom d’un bloc sélectionné, en permettant de choisir le point de départ de la flèche sur le bloc, plutôt que l’origine du bloc ?

Pour créer une ligne de repère (leader) qui affiche dynamiquement le nom d’un bloc AutoCAD et dont le point de départ peut être choisi précisément sur le bloc, vous pouvez utiliser un programme AutoLISP. Cette solution combine la détection du nom du bloc avec la flexibilité de la commande LEADER.

Comprendre le besoin initial

Initialement, l’objectif était de récupérer le nom d’un bloc et de l’associer à une ligne de repère. La première version du LISP proposée par bonuscad permettait de le faire, mais le point de départ de la flèche du leader était fixé à l’origine du bloc.

Amélioration : Point de départ personnalisable

La demande d’amélioration visait à permettre à l’utilisateur de cliquer n’importe où sur le bloc et que la flèche du leader parte de ce point précis, offrant ainsi plus de contrôle sur le positionnement du repère.

Solution AutoLISP Optimisée

Voici la version améliorée du code AutoLISP qui répond à ce besoin :

;;Lisp proposé par Bonuscad
(defun c:lead_block-name ( / ent dxf_ent typ_ent blk_name pt_lst pt)
  ;; Boucle pour s'assurer qu'une entité est sélectionnée
  (while (null (setq ent (entsel "\nChoix de l'entité: "))))

  ;; Récupération des données DXF de l'entité sélectionnée
  (setq
    dxf_ent (entget (car ent))
    typ_ent (cdr (assoc 0 dxf_ent))
  )

  ;; Vérifie si l'entité sélectionnée est un bloc (INSERT)
  (if (eq typ_ent "INSERT")
    (progn
      ;; Récupère le nom du bloc (code DXF 2)
      (setq
        blk_name (cdr (assoc 2 dxf_ent))
        ;; Calcule le point de départ du leader en utilisant le point de clic de l'utilisateur
        ;; (cadr ent) est le point de clic, (car ent) est le nom de l'entité
        ;; (trans ... 0) convertit le point de clic en coordonnées de l'entité
        ;; (_near) tente de snapper au point le plus proche sur l'entité
        pt_lst (osnap (trans (cadr ent) (car ent) 0) "_near")
      )
      ;; Si _near ne trouve pas de point (ex: clic dans le vide du bloc), tente _ins (point d'insertion)
      (if (not pt_lst)
        (setq pt_lst (list (osnap (trans (cadr ent) (car ent) 0) "_ins")))
        (setq pt_lst (list pt_lst))
      )

      ;; Demande à l'utilisateur les points suivants de la ligne de repère
      (while (setq pt (getpoint (car pt_lst) "\nIndiquez le point suivant: "))
        (setq pt_lst (cons pt pt_lst))
      )

      ;; Lance la commande LEADER
      (command "_.leader")
      ;; Ajoute les points de la ligne de repère en ordre inverse (pour le leader)
      ;; Utilise "_none" pour éviter les accrochages involontaires
      (foreach n (reverse pt_lst) (command "_none" n))
      ;; Termine la saisie des points et insère le nom du bloc comme texte du leader
      (command "" blk_name "")
    )
    ;; Message d'erreur si l'entité n'est pas un bloc
    (princ "\nEntité n'est pas une insertion de bloc!")
  )
  (prin1)
)

Instructions d’utilisation

  1. Copier le code : Copiez l’intégralité du code LISP ci-dessus.
  2. Ouvrir l’éditeur Visual LISP : Dans AutoCAD, tapez VLIDE et appuyez sur Entrée.
  3. Créer un nouveau fichier : Dans l’éditeur Visual LISP, allez dans File > New File.
  4. Coller le code : Collez le code copié dans la nouvelle fenêtre de l’éditeur.
  5. Enregistrer le fichier : Enregistrez le fichier avec une extension .lsp (par exemple, lead_block_name.lsp) dans un dossier accessible par AutoCAD (par exemple, votre dossier de support).
  6. Charger le LISP : Dans AutoCAD, tapez APPLOAD et appuyez sur Entrée. Naviguez jusqu’à l’emplacement où vous avez enregistré le fichier .lsp, sélectionnez-le et cliquez sur Charger. Pour un chargement automatique à chaque démarrage d’AutoCAD, ajoutez-le à la Trousse de démarrage.
  7. Exécuter la commande : Une fois le LISP chargé, tapez LEAD_BLOCK-NAME (le nom de la fonction précédé de c:) dans la ligne de commande d’AutoCAD et appuyez sur Entrée.
  8. Utilisation :
    • Le programme vous demandera de Choix de l'entité:. Cliquez sur le bloc dont vous souhaitez récupérer le nom.
    • Ensuite, il vous demandera d’Indiquez le point suivant:. Cliquez sur les points successifs pour dessiner votre ligne de repère. Le premier point sera celui où vous avez cliqué sur le bloc.
    • Appuyez sur Entrée deux fois pour terminer la ligne de repère et insérer le nom du bloc comme texte.

Cette routine LISP est un excellent exemple de personnalisation avancée d’AutoCAD pour automatiser des tâches répétitives et améliorer la productivité.