Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Un collègue a créé un lisp (avec l'aide de l'"IA") pour dessiner les courbes de charge d'une grue.

Mais je souhaiterait améliorer ce lisp.

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;XXXXXXXXXX  MDT219   XXXXXXXXXXX
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

(defun c:GRUE_DIAG219 ()
  (setq choix-fleche (getstring "\nEntrez la longueur de flèche installée (ex: 30m, 35m, ...): "))
  
  ;; Définition des capacités de levage selon la longueur de flèche et le rayon de travail
  (setq capacites '(

("25" (20 20) (25 8.4))
("30" (20 10) (25 8.6) (30 7))
("35" (21 10) (25 8.5) (30 6.9) (35 5.8))
("40" (20 10) (25 8.4) (30 6.9) (35 5.8) (40 5))
("45" (20 10) (25 8.3) (30 6.8) (35 5.7) (40 4.9) (45 4.3))
("50" (20 10) (25 8.3) (30 6.7) (35 5.6) (40 4.7) (45 4) (50 3.5))
("55" (20 10) (25 7.9) (30 6.4) (35 5.4) (40 4.5) (45 3.9) (50 3.3) (55 2.95))
("60" (20 9.4) (25 7.3) (30 6) (35 4.6) (40 4.2) (45 3.6) (50 3.1) (55 2.6) (60 2.2))
("65" (20 8.88) (25 6.9) (30 5.6) (35 4.6) (40 3.9) (45 3.3) (50 2.85) (55 2.4) (60 1.95) (65 1.6))
  ))
  
  ;; Récupération des valeurs disponibles pour la flèche choisie
  (setq valeurs (cdr (assoc choix-fleche capacites)))
  
  (if valeurs
    (progn
      (foreach item valeurs
        (setq rayon (car item)
              charge (cadr item))
        ;; Dessiner un cercle pour chaque rayon de travail
	;; la partie (command "_circle" '(x x) défini le centre des cercles
        (command "_circle" '(0 0) (rtos rayon 2 2))
        ;; Ajouter un texte avec la charge au bon emplacement
	;; (list rayon x) défini la coordonnée y du texte de charge noté
    ;;    (command "_text" (list rayon 0) "1" "90" (strcat (rtos charge 2 2) "t ")))
        (command "_text" (list rayon 0) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t")))
      (princ "\nDiagramme de levage cree avec toutes les charges affichees."))
    (princ "\nFleche non disponible."))
  (princ))

Je souhaiterai que
- Le lisp interroge et demande le lieu où les courbes de charge soient insérées
- Les courbes de charge soient crée dans un bloc

Dans un deuxième temps, ce lisp comporte les courbes de charge de plusieurs grues
(defun c:GRUE_DIAG219 ()
(defun c:GRUE_DIAG218 ()
(defun c:GRUE_DIAG178 ()

Comment faire pour que le lisp nous interroge sur la grue à installer

Quelles sont les modification à apporter au lisp.

D'avance, je vous remercie

***********************

Rien ne sert de courrir, il faut partir à point.

Posté(e)

Coucou,
Tu parles d'avoir les courbes de charge de plusieurs grues sous forme de commandes séparées, or je doute que le fond du code change drastiquement. Je suppose que les seules informations qui changent réellement sont celles que l'on trouve dans la variable 'capacites' ?
Au vu du programme, il y a de nombreuses choses que l'on peut vraiment améliorer pour un rendu plus professionnel, mais pour cela il faudrait l'ensemble du LISP et quelques infos supplémentaires (notamment qu'entends-tu par "les courbes de charge soient crées dans un bloc" ?).
Si en revanche tu souhaites effectuer ces modifications de ton côté :

Le 27/03/2025 à 14:09, barbichette a dit :

- Le lisp interroge et demande le lieu où les courbes de charge soient insérées

Il faut ajouter :

(setq
  point (getpoint "\nSpécifier le point d'insertion : ")
  x (car point)
  y (cadr point)
)

juste après la ligne

(setq valeur ...

et modifier les 2 lignes comme suit :

;; remplacer '(0 0) par point
(command "_circle" point (rtos rayon 2 2))
;; remplacer (list rayon 0) par (list (+ x rayon) y) afin d'ajouter les coordonnées du point d'origine au calcul des coordonnées du texte
(command "_text" (list (+ x rayon) y) "1" "90" (strcat (rtos rayon 2 2) "m - " (rtos charge 2 2) "t"))

 

Le 27/03/2025 à 14:09, barbichette a dit :

- Les courbes de charge soient crée dans un bloc

Pour cela, j'aurais besoin d'un peu plus de détail et en fonction des réponses, cela changera la nature du code.
Souhaite tu créer des définitions de blocs ou souhaites-tu insérer des références de blocs ? Dans le premier cas, ne serait-il pas plus simple de créer les définitions de blocs à la main (puisqu'il ne me semble pas que cela représente de nombreuses heures de travail) et cela permettrait en plus de créer des blocs dynamiques. Dans le second cas, cela suppose que les définitions de blocs existent déjà. Ou bien est-ce un programme qui se veut "intelligent" c'est-à-dire qu'il insère des références de blocs, et si la définition de bloc n'existe pas encore dans le dessin, alors il faut dans un premier temps créer cette définition de bloc pour ensuite insérer une référence de bloc ?

 

Le 27/03/2025 à 14:09, barbichette a dit :

Comment faire pour que le lisp nous interroge sur la grue à installer

Pour poser une question à un utilisateur (et dans ton cas je te suggère de n'autoriser que certaines valeurs), tu peux utiliser (getkword) avec la fonction (initget). Voir un exemple ci dessous (pas le plus opti) :

(initget 1 "219 218 178")
(setq grueNum (getkword "\nVeuillez choisir le type de grue [219/218/178] : "))
(cond
  ((grueNum = "218") (c:GRUE_DIAG218))
  ((grueNum = "219") (c:GRUE_DIAG219))
  ((grueNum = "178") (c:GRUE_DIAG178))
)

Bisous,
Luna

Posté(e)

Coucou,
Juste à titre d'exemple (désolée, la passion à pris le dessus ^^') j'ai retravaillé ton code dans sa globalité pour qu'il soit un peu plus poussé (sans intégrer la partie concernant les blocs) et plus facilement modifiable (les paramètres développeurs notamment, car je reconnais que pour le reste c'est peut-être plus difficile à comprendre désormais). Il s'agit du fichier GRUE.lsp (mais il est dépendant des fonctions (getkdh), (lst2str) et (str2lst) d'où leur présence également mais rien ne t'empêche de tout regrouper dans le même fichier) et le nom de la commande est GRUE.

Bisous (et désolée pour le dérangement),
Luna

UtDac . lst2str.lsp UtDac . str2lst.lsp UtUse . getkdh.lsp

GRUE.lsp

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é