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)