Changer toutes les hachures du type SOLID en hachures du type USER

Suite à une question posée sur le forum AutoCAD Autodesk un petit Lisp ci-dessous pour changer toutes les hachures du type SOLID en hachures du type USER.

SolidToUser.lsp (1,9 Ko)

(defun c:SolidToUser ( / ss i ent obj hSpace hAngle count)
  (vl-load-com)
  
  ;; Astuce : on utilise un filtre de sélection pour ne prendre que les Hachures ET qui sont "SOLID"
  (prompt "\nSélectionnez les hachures SOLID à remplacer <Entrée pour traiter tout le dessin> : ")
  (if (not (setq ss (ssget '((0 . "HATCH") (2 . "SOLID")))))
    (setq ss (ssget "_X" '((0 . "HATCH") (2 . "SOLID")))) ; Sélection globale si l'utilisateur fait Entrée
  )

  (if ss
    (progn
      ;; On demande à l'utilisateur l'espacement et l'angle pour la nouvelle hachure
      (setq hSpace (getdist "\nSpécifiez l'espacement des lignes pour la hachure USER <1.0>: "))
      (if (not hSpace) (setq hSpace 1.0))
      
      (setq hAngle (getangle "\nSpécifiez l'angle (en degrés) pour la hachure USER <0>: "))
      (if (not hAngle) (setq hAngle 0.0))

      (setq count 0)
      ;; Boucle à travers la sélection
      (repeat (setq i (sslength ss))
        (setq ent (ssname ss (setq i (1- i))))
        (setq obj (vlax-ename->vla-object ent))

        ;; La méthode magique : vla-SetPattern (Objet TypeDeMotif "NomDuMotif")
        ;; Type 1 = acHatchPatternTypeUserDefined (Défini par l'utilisateur)
        ;; Le nom importe peu pour le type 1, on met conventionnellement "_USER"
        (vla-SetPattern obj 1 "_USER")
        
        ;; On applique le nouvel espacement et l'angle
        (vla-put-PatternSpace obj hSpace)
        (vla-put-PatternAngle obj hAngle)
        
        ;; On recalcule la géométrie et on met à jour l'affichage
        (vla-Evaluate obj)
        (vla-Update obj)
        
        (setq count (1+ count))
      )
      (princ (strcat "\nTerminé ! " (itoa count) " hachure(s) SOLID modifiée(s) en USER."))
    )
    (princ "\nAucune hachure SOLID n'a été trouvée ou sélectionnée.")
  )
  (princ)
)

(princ "\nCommande chargée. Tapez SOLIDTOUSER pour l'exécuter.")
(princ)

Pour modifier le motif d’une hachure en Visual LISP, AutoCAD oblige à utiliser la méthode vla-SetPattern. Cette méthode recalcule la géométrie interne de la hachure, ce qu’un simple changement de nom ne pourrait pas faire.

De plus, il y a un petit « piège » à anticiper : une hachure SOLID n’a pas besoin d’échelle, d’espacement ou d’angle. En revanche, une hachure USER (qui trace des lignes) exige un espacement sous peine de générer une erreur ou de s’afficher de manière invisible