Aller au contenu

Creer des conditions en partant d\'une zone de liste!!!


steelbe

Messages recommandés

Bonjour à tous,

J'ai eu l'idée de créer une boite de dialogue comprenant: une zone de liste, une image et un edit_box pour insérer un profil type IPE pour commencer.

La boite de dialogue fonctionne.

Le moment venue de créer le code Lisp pour le tester, le code ne fonctionne pas je me suis aidé du présentent sujet sur les condition et pourtant je n'y arrive pas.

A l'execution du code ce message apparait Error: sortie/ abandon

 

(defun C:insert_ipe (/ lst lgd base_point)
 (defun foo (key val /)
   (if	(distof val)
     (set (read key) (distof val))
     (progn
(alert "Nécessite un nombre valide")
(mode_tile key 2)
     )
   )
 )
 (setq id (load_dialog "IPE_dB.dcl"))
 (if (not (new_dialog "IPE_dB" id))
   (exit)
 )
 (start_list "lst")     ;Specify the name of the list box.
 (mapcar ' add_list lst)  ;Specify the AutoLISP list.
 (end_list)
(initget 9)
 (cond
   ((eq lst "IPE 80")
    ;;Get default values
    (setq lst 0)
    (setq lgd 1000)
    (set_tile "lst" (lst))
    (set_tile "lgd" (rtos lgd))
    (action_tile "lst" "(lst)")
    (action_tile "lgd" "(foo \"lgd\" $value)")
    (setq x (dimx_tile "cliche")
   y (dimy_tile "cliche")
    )
    (start_image "cliche")
    (slide_image 0 0 x y "")
    (end_image)

    (action_tile "accept" "(setq ok T) (done_dialog)")
    (action_tile "annuler" "(setq Cancel T) (unload_dialog id)")

    (start_dialog)
    (unload_dialog id)

    (if (= ok)
      (progn
 (setq base_point (getpoint "\nBase Point of hole: "))
 (setq b 46
       H 80
       tw 3.8
       tf 5.2
       r 5
       )
 (setq S1 (polar base_point Pi (/ b 2)))
        (setq S2 (polar S1 (/ Pi 2) tf))
        (setq S3 (polar S2 0 (- (/ (- b tw) 2) r)))
        (Setq PP1 (polar S3 0 r))
        (setq S4 (polar PP1 (/ Pi 2) r))
        (Setq S5 (polar S4 (/ Pi 2) (- H (* (+ tf r) 2))))
        (setq S6 (polar S3 (/ Pi 2) (- H (* tf 2))))
        (Setq S7 (list (car S1) (cadr S6)))
        (Setq S8 (list (car S1) (+ (cadr S1) H)))
        (setq S9 (polar S8 0 b))
        (Setq S10 (list (car S9) (cadr S7)))
        (Setq S11 (list (+ (car S6) (+ (* r 2) tw)) (cadr S10)))
        (Setq S12 (polar S5 0 tw))
        (Setq S13 (polar S4 0 tw))
        (Setq S14 (list (+ (car S3) (+ (* r 2) tw)) (cadr S2)))
        (Setq S15 (list (car S10) (cadr S14)))
        (setq S16 (list (car S15) (cadr S1)))
 ;;///////////////////////////////////////////////////////////////////
 ;;//Draw section shape//
 ;;//////////////////////
 (Command "_pline"    base_point     S1	   S2	 S3    "ARC" S4	   "LI"	 S5
   "ARC" S6    "LI"  S7	   S8	 S9    S10   S11   "ARC" S12
   "LI"	 S13   "ARC" S14   "LI"	 S15   S16   base_point	   ""
  )
 ;;Creation of a solid_3d
 (Command "_extrude" "D" "" lgd "")
      )
    )
    (if (= cancel)
      (setq annuler ((setq cancel T) (unload_dialog id))))
   )

 

 

Mon but est de me facilité la tache en sélectionnent un type de profil et en lui assignent une longueur cela serait plus facile à mon avis. Précédemment j'ai crée un code Lisp ou je devais moi même rentrer les valeur comme base hauteur épaisseur (ame, semelle) rayon giration ce code fonctionne mais commence à être un peut lourd.

 

Pourriez vous m'aider à résoudre se problème en m'expliquant si possible ou j'ai commis des erreurs.

 

Merci d'avance

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Tout d'abord, s'il te plait, quand tu postes du code, pour le rendre plus lisible utilisz les bbcodes :

 

[surligneur][[/surligneur][surligneur]code[/surligneur][surligneur]][/surligneur] ici le code [surligneur][[/surligneur][surligneur]/code[/surligneur][surligneur]][/surligneur]

 

donne :

 ici  le code 

 

Accessible via l'icône [#] :

http://img94.imageshack.us/img94/8380/bbcode.png

 

Le message d'erreur que tu as est certainement provoqué par l'expression :

 (if (not (new_dialog "IPE_dB" id))
   (exit) 
)

qui fait quitter le programme si le fichier "IPE_dB.dcl" n'est pas trouvé (il n'est pas dans les chemins de recherche) ou s'il ne contient pas de contrôle :dialog nommé "IPE_dB".

 

Ensuite en survolant le code,

- il manque des parenthèses fermantes.

- l'expression (= ok) retourne toujours T (même si ok est nil)

- l'expression :

(if (= cancel)
 (setq annuler ((setq cancel T) (unload_dialog id)))
)

n'est pas valide

- les variables ok et cancel ne sont pas déclarées ce qui peut poser des problèmes si la boites est ouverte plusieurs fois.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour gile

 

1) Effectivement le chemin d'accès n'était pas correct car le sous dossier dans lequel se trouve le DCL n'était pas spécifié; problème pour cela le problème est réglé.

 

2) Aussi j'ai légèrement modifier le code en créant directement la liste dans le fichier Lisp

 

(setq llist '(""IPE 80" "IPE 100" etc............))

(start_list " lst ")

(mapcar 'add_list llist)

(end_list)

La boite de dialogue apparait, je peu sélectionner une valeur et donner une valeur concernant l'edit_box.

 

3) Maintenant, un autre problème survient; lorsque je clic OK le code se poursuit en me demandant le point d'origine de la section. Je place une valeur ex: 0,0,0 puis il y a une interruption du code avec le message suivant

 

;erreur:fonction incorrect: ( 0.0 0.0 0.0 ) cela intervient pour n'importe coordonnée que j'attribue au point de base pour l'insertion de la section.

 

D'ou peut provenir l'erreur???

 

4) Concernant la ligne de code (if (=cancel) (setq annuler .................)

Je peu laisser se code si et seulement si je declare ok et cancel par:

 

(setq ok accepter)

(setq annuler cancel)

 

Merci de m'éclaircir sur ces deux point

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

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é