irw123 Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Bonjour a tous ! Je reviens vers vous avec un nouveau problème que je n'arrive pas à résoudre, c'est le fais de changer le calques avant de dessiner dans mon programme ci dessous. Le programme sert a sélectionner un type de réseau (elec, tel, eau), une fois le réseau choisit le calque ne se change pas donc le tracer derrière ne suis pas le style de ligne du calque demander. Voici mon programme : (defun c:resoo() (terpri)(setq rep "O") ;Affecter la lettre "O" à rep (while (or (= rep "O")(= rep "OUI")) ;Tant que nous avous une réponse positive (setq x (getstring "Tapez E=Eau El=Elec T=Tel :")) ;Quelle type de reseau sont à dessiner ? (cond ((or (= x "E")(= x "EAU")) ; Conditions pour effectuer le changement de calque (ici, x doit etre egale à "E"ou à "EAU") (progn (command "-calque" "ch" "Reseau EAU" ""))) ; Changer le calque actif par celui utile pour la réalisation du réseaux demandé ((or (= x "El")(= x "ELEC")) (progn (command "-calque" "ch" "Reseau ELEC" ""))) ((or (= x "T")(= x "TEL")) (progn (command "-calque" "ch" "Reseau TEL" ""))) ) ; Fin de la condition (Prompt "\nTracer votre réseau :") (terpri) (setq pt (getpoint "\nPoint d'origine: ")) (command "polylign" pt "la" 0 0) (while pt ;Tant qu'on ne fait pas entrer on continue à dessiner la polyligne (setq pt (getpoint "\nPoint suivant(Return pour FIN): ")) (command pt) ) (setq xg 0) (setq yg 0) (setq nc 0) (setq n 0) (setq nom (entlast)) (setq lt (entget nom)) (setq len (length lt)) ; recuperation de la longueur de la polyligne (repeat len (setq e1 (car (nth n lt))) (if (= e1 10) (progn (setq x (cadr(nth n lt))) (setq y (caddr(nth n lt))) ) ) (setq n (1+ n)) ) (setq p1 (list x y)) ; Coordonnées du texte (command "aire" "O" (entlast)) (setq long (getvar "PERIMETER")) (command "texte" "mg" p1 2 0 (strcat (rtos long 2 2) " m")) ; Affichage de la longeur de la polylign (command "redess") (setq rep (strcase(getstring "\nVoulez vous dessiner de nouveaux reseaux (o/n): ")))) ) Je ne comprend pas pourquoi il ne me change pas mes calques (j'ai bien sur bien vérifier que j'avais des noms identique)Merci d'avance à tous :) Citer
Patrick_35 Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Salut Remplace l'option ch (pour choisir) par e (pour établir)L'avantage est que si le calque n'existe pas, il est créé. @+ Citer Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
irw123 Posté(e) le 8 février 2017 Auteur Posté(e) le 8 février 2017 merci de ta réponse rapide pour commencer :) Je viens de tester avec l'option établir mais sa ne marche pas, je reste dans le calque 0 de base ^^' Citer
Patrick_35 Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Cela veut dire que les conditions ne fonctionnent pas. Tu tapes peut-être les réponses en minuscules alors que tes tests de réponses sont en majuscules. Regarde aussi les fonctions initget et getkword qui devraient mieux répondre à ton besoin. @+ Citer Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Salut, Quelques remarques en plus de celle de Patrick_35 concernant initget et getkword :- prends l'habitude de déclarer localement tes variables ;- tu peux utiliser getvar pour modifier la variable système "CLAYER" qui gère le calque courant ;- tu peux utiliser le dernier point cliqué comme premier argument de getpoint pour avoir la 'ligne élastique' ;- tu peux calculer la longueur au fur et à mesure que l'utilisateur spécifie le point suivant en utilisant deux variables pour les points ;- tu peux utiliser directement la dernière valeur de la variable du dernier point cliqué pour l'insertion du texte. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
irw123 Posté(e) le 8 février 2017 Auteur Posté(e) le 8 février 2017 Tu as raison c'etais tout bête, je rentrais mal mes valeurs, Merci beaucoup en tout cas, j'ai foncer trop vite dans la modif de mon lisp ^^' Cordialement,Irwin Citer
(gile) Posté(e) le 8 février 2017 Posté(e) le 8 février 2017 Re, Petite explication sur initget et getkword. initget permet d'initialiser la validité des valeurs pour l'appel suivant d'une fonction de saisie getXXX (ici getkword pour la saisie d'une option).Voir l'aide complète en anglais ou le chapitre 7.1 de Introduction à AutoLISP. ;; Initialisation de la saisie (initget 1 "Eau eLec Tel")1 : empèche l'utilisateur de faire juste Entrée (autrement dit, le force à saisir une option)."Eau eLec Tel" : définit les entrées valides et leurs alias (la lettre en majuscule). ;; Saisie de l'option (setq rep (getkword "\nChoisissez un réseau [Eau/eLec/Tel]: "))[Eau/eLec/Tel] : les options apparaitront dans le menu contextuel ou la saisie dynamique de la commande.Que l'utilisateur saisisse le mot entier ou uniquement son alias et quelle que soit la casse, getkword retourne toujours le mot entier tel que définit dans initget.Exemple : saisir l ou L ou eLec ou elec retourne "eLec". Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
irw123 Posté(e) le 8 février 2017 Auteur Posté(e) le 8 février 2017 Je ne connaissais pas ces fonctions, mais en effet elle peuvent être vraiment utile et améliorer mon programme :) Je vais regarder ce que je peux faire avec, merci de m'avoir m'y sur cette piste :) Citer
Messages recommandés