Aller au contenu

Lisp Changement calques


Messages recommandés

Posté(e)

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 :)

Posté(e)

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.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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.

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

Posté(e)

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

Posté(e)

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".

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

Posté(e)

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 :)

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é