Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

Je souhaite créer un code Lisp me permettant de déplacer une polyligne en indiquant une profondeur et une épaisseur de canalisation, je souhaite également que l'utilisateur puisse sélectionner le calque dans lequel la polyligne sera grâce à un menu déroulant. Pour ce faire j'ai écrit un programme Lisp fonctionnant de paire avec un programme DCL . Cependant je suis encore débutant avec ce langage de programmation et je n'arrive pas à corriger mon erreur :

erreur: type d'argument incorrect: stringp TRAITER-VALEURS

Voici mon code DCL :

dialog {
  label = "DeplacerPolyligne";
  : edit_box {
    label = "Profondeur (m) :";
    key = "profondeur";
  }
  : edit_box {
    label = "Diametre (mm) :";
    key = "diametre";
  }
  : popup_list {
    label = "Calque :";
    key = "calque";
    width = 30;
    allow_accept = true;
    is_cancel = true;
    fixed_width = true;
  }
  : row {
    : button {
      label = "Traiter";
      key = "maj";
    }
  }
}

Et voici mon code Lisp

;; Définition de la fonction pour traiter les valeurs saisies
(defun traiter-valeurs (ctl)
  (prompt (strcat "\nContrôle déclenchant l'action : " (type ctl)))
  (if (= ctl "maj")
      (progn
        (prompt "\nBouton Traiter cliqué")
        ;; Traitement des valeurs saisies
        (setq pline (car (entsel "\nSélectionnez une polyligne : ")))
        (prompt (strcat "\nSélectionné polyligne : " (itoa pline)))
        (setq profondeurMM (atoi (get_tile "profondeur"))) ; Récupérer la valeur de la profondeur en mm
        (prompt (strcat "\nProfondeur : " (rtos profondeurMM 2 3)))
        (setq profondeur (/ profondeurMM 1000.0)) ; Convertir en mètres
        (prompt (strcat "\nProfondeur : " (rtos profondeur 2 3)))
        (setq diametreMM (atoi (get_tile "diametre"))) ; Récupérer la valeur du diamètre en mm
        (prompt (strcat "\nDiamètre : " (rtos diametreMM 2 3)))
        (setq diametreM (/ diametreMM 1000.0)) ; Convertir en mètres
        (prompt (strcat "\nDiamètre : " (rtos diametreM 2 3)))
        (setq calque (get_tile "calque")) ; Récupérer le calque sélectionné
        (prompt (strcat "\nCalque : " calque))

        ;; Vérification des valeurs saisies
        (if (and pline profondeur diametreM calque)
            (progn
              ;; Calculs pour le déplacement
              (setq currentElevation (cadddr (assoc 10 (entget pline))))
              (setq filEau (- currentElevation profondeur))
              (setq centreReseau (+ filEau (/ diametreM 2)))

              ;; Déplacement de la polyligne
              (setq vertice (getvar 'VIEWSIZE))
              (command "_.UCS" "_N" "_Z" vertice)
              (command "_.MOVE" pline "" "" (list 0.0 0.0 centreReseau))
              (command "_.UCS" "_P")

              ;; Affichage d'un message de débogage pour indiquer le succès du traitement
              (prompt "\nDéplacement terminé avec succès.")
            )
            (prompt "\nErreur: Sélection, profondeur, diamètre ou calque invalide.")
        )
        ;; Fermeture de la boîte de dialogue
        (unload_dialog diag)
      )
  )
)

;; Définition de la fonction principale pour afficher la boîte de dialogue et traiter les valeurs
(defun c:DeplacerPolyligne ()
  (prompt "\nDébut de la fonction DeplacerPolyligne")

  ;; Chargement de la boîte de dialogue
  (setq diag (load_dialog "Boite_de_dialogue.dcl"))
  (prompt "\nBoîte de dialogue chargée")

  ;; Affichage de la boîte de dialogue
  (if (not (new_dialog "Boite_de_dialogue" diag))
      (exit)
  )
  (prompt "\nBoîte de dialogue affichée")

  ;; Définition de l'action pour le bouton "Traiter" dans la boîte de dialogue
  (action_tile "maj" 'traiter-valeurs)
  
  ;; Démarrage de la boîte de dialogue
  (if (= 1 (start_dialog))
      (progn
        (prompt "\nBoîte de dialogue fermée avec succès.")
      )
      (prompt "\nÉchec de la fermeture de la boîte de dialogue.")
  )

  (prompt "\nFin de la fonction DeplacerPolyligne")
)

Mon code n'est peut être pas très optimisé mais comme je disais je débute, j'ai essayé d'ajouter des commentaires pour que le code soit parfaitement compréhensible. J'ai essayé de placer des messages de débogages pour savoir d'où l'erreur venait mais même avec cela j'ai du mal à corriger mon erreur.

Merci d'avance pour tout indice ou piste pour me débloquer.

Clément.

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é