Le jour du poisson 🐟

:sparkles: Bonjour Patrick,

Joyeux 1er avril ! :fish:

Puisque vous ĂȘtes sur AutoCAD 2027, voici une petite routine AutoLISP sur mesure pour l’occasion. Ce code va dessiner un poisson gĂ©omĂ©trique simple en utilisant une POLYLIGN pour le corps et la queue, et un CERCLE pour l’Ɠil.

Il prend Ă©galement soin de dĂ©sactiver temporairement la variable systĂšme OSMODE (l’accrochage aux objets) pour Ă©viter que votre poisson ne se dĂ©forme en s’accrochant Ă  d’autres Ă©lĂ©ments de votre dessin.

Voici le code Ă  copier :

(defun c:POISSON ( / p1 p2 p3 p4 p5 p6 eye old_osmode)
  (setq p1 (getpoint "\nOĂč voulez-vous placer le bout du nez du poisson ? "))
  (if p1
    (progn
      ;; Sauvegarde de l'accrochage aux objets actuel
      (setq old_osmode (getvar "OSMODE"))
      (setvar "OSMODE" 0) ; Désactivation temporaire
      
      ;; Calcul des points du poisson
      (setq p2 (list (+ (car p1) 4) (+ (cadr p1) 2)))
      (setq p3 (list (+ (car p1) 8) (cadr p1)))
      (setq p4 (list (+ (car p1) 11) (+ (cadr p1) 2.5)))
      (setq p5 (list (+ (car p1) 11) (- (cadr p1) 2.5)))
      (setq p6 (list (+ (car p1) 4) (- (cadr p1) 2)))
      (setq eye (list (+ (car p1) 2) (+ (cadr p1) 0.5)))

      ;; Dessin avec les commandes AutoCAD
      (command "_.PLINE" p1 p2 p3 p4 p5 p3 p6 "_C")
      (command "_.CIRCLE" eye 0.3)
      
      ;; Restauration de l'accrochage aux objets
      (setvar "OSMODE" old_osmode)
      (princ "\nJoyeux 1er avril ! Poisson dessinĂ© avec succĂšs. 🐟")
    )
  )
  (princ)
)

Comment l’utiliser :

Tapez la commande VLISP pour ouvrir l’éditeur (ou copiez simplement ce code dans un fichier texte que vous nommerez poisson.lsp).
Chargez la routine dans votre dessin avec la commande APPLOAD.
Tapez POISSON dans la ligne de commande et cliquez n’importe oĂč sur votre Ă©cran !
Amusez-vous bien ! Avez-vous un « vrai Â» projet AutoLISP sur lequel vous aimeriez qu’on se penche ensuite ?

Je te remercie pour le poisson. Peux-tu me faire un poisson un peu plus évolué, avec une forme plus arrondie et des écailles ?

Bonjour Patrick,

C’est parti pour une version « Premium Â» de notre poisson d’avril ! :tropical_fish:

Pour lui donner une forme plus organique et arrondie, nous allons utiliser la commande POLYLIGN en exploitant son option d’arc pour le corps, et des segments droits pour la queue. Pour les Ă©cailles, nous allons gĂ©nĂ©rer plusieurs fois la commande ARC, et nous ajouterons un double CERCLE pour lui faire un Ɠil plus expressif.

Voici le nouveau code AutoLISP Ă  tester :

(defun c:SUPERPOISSON ( / pt p_top_mid p_tail p_tail_top p_tail_bot p_bot_mid p_eye old_osmode draw-scale)
  (setq pt (getpoint "\nCliquez pour placer le bout du nez du super poisson : "))
  (if pt
    (progn
      ;; Sauvegarde et désactivation de l'accrochage
      (setq old_osmode (getvar "OSMODE"))
      (setvar "OSMODE" 0)

      ;; Calcul des points principaux du corps
      (setq p_top_mid (list (+ (car pt) 5.0) (+ (cadr pt) 3.0)))
      (setq p_tail (list (+ (car pt) 10.0) (cadr pt)))
      (setq p_tail_top (list (+ (car pt) 13.0) (+ (cadr pt) 3.0)))
      (setq p_tail_bot (list (+ (car pt) 13.0) (- (cadr pt) 3.0)))
      (setq p_bot_mid (list (+ (car pt) 5.0) (- (cadr pt) 3.0)))
      (setq p_eye (list (+ (car pt) 2.0) (+ (cadr pt) 1.0)))

      ;; Dessin du corps et de la queue avec POLYLIGN (alternance Arc / Ligne)
      (command "_.PLINE" pt "_A" "_S" p_top_mid p_tail "_L" p_tail_top p_tail_bot p_tail "_A" "_S" p_bot_mid pt "")

      ;; Dessin de l'oeil et de la pupille
      (command "_.CIRCLE" p_eye 0.4)
      (command "_.CIRCLE" (list (+ (car p_eye) 0.1) (cadr p_eye)) 0.15)

      ;; Sous-fonction locale pour dessiner une écaille avec la commande ARC
      (defun draw-scale (dx dy)
        (command "_.ARC"
                 (list (+ (car pt) dx) (+ (cadr pt) dy))
                 (list (+ (car pt) dx 0.5) (+ (cadr pt) dy -0.5))
                 (list (+ (car pt) dx) (+ (cadr pt) dy -1.0))
        )
      )

      ;; Dessin des rangées d'écailles
      ;; PremiÚre rangée
      (draw-scale 4.0 1.5)
      (draw-scale 4.0 0.5)
      (draw-scale 4.0 -0.5)

      ;; DeuxiÚme rangée
      (draw-scale 6.0 2.0)
      (draw-scale 6.0 1.0)
      (draw-scale 6.0 0.0)
      (draw-scale 6.0 -1.0)

      ;; TroisiÚme rangée
      (draw-scale 8.0 1.5)
      (draw-scale 8.0 0.5)
      (draw-scale 8.0 -0.5)

      ;; Restauration de l'accrochage
      (setvar "OSMODE" old_osmode)
      (princ "\nEt voilĂ , un poisson tout en rondeur avec des Ă©cailles ! 🐠")
    )
  )
  (princ)
)

Pour l’utiliser :

Remplacez l’ancien code par celui-ci dans votre fichier .lsp.
Rechargez-le avec la commande APPLOAD.
Tapez SUPERPOISSON dans la ligne de commande.
J’ai inclus une petite sous-fonction draw-scale dans le code pour Ă©viter de rĂ©pĂ©ter les calculs de la commande ARC Ă  chaque Ă©caille.

Le rĂ©sultat vous plaĂźt-il ? Si vous souhaitez que nous passions Ă  un outil de production plus sĂ©rieux pour votre travail quotidien, n’hĂ©sitez pas Ă  m’en faire part !