Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Voici le code sur lequel je bute :

;	2. Choix du type de renseignement

(setq quid (getstring "\nConnaissez-vous la hauteur sous plafond ? Si oui, entrez-la ; si non, validez."))	;

(if (/= quid nil)


;	3. Saisie de la valeur de hauteur sous plafond

	(progn
	(setq dz quid)
	(setq dz (atof dz))		; COnversion de la chaine de caracteres en nombre
	(setq dz (rtos dz 2 2))		; Definit le nombre de decimales
	)


;	41. Extraction de l'altimetrie-plafond (z1) par selection du point 1 (pt1)

	(progn
	(setq pt1 (car (entsel "\nSélectionner l'altitude du plafond : ")))	; Selection de l'entite
	(setq z1 (cdr (assoc '1 (entget pt1))))		; Extraction de la valeur de texte initiale
	(setq zz1 (atof z1))		; Transformation de la chaine de caracteres en nombre reel


;	42. Extraction de l'altimetrie-plancher (z2) par selection du point 2 (pt2)

	(setq pt2 (car (entsel "\nSélectionner l'altitude du plancher :")))	; Selection de l'entite
	(setq z2 (cdr (assoc '1 (entget pt2))))		; Extraction de la valeur de texte initiale
	(setq zz2 (atof z2))		; Transformation de la chaine de caracteres en nombre reel


;	43. Soustraction entre les deux valeurs altimetriques

	(setq dz (- zz1 zz2))		; Calcul de la difference entre les deux altitudes
	(setq dz (rtos dz 2 2))		; Definit le nombre de decimales
	)
)

 

Comme vous l'avez compris, je souhaite lancer deux commandes distinctes selon la réponse à la question.

 

Avant j'utilisais deux réponses "Oui" et "Non".

Code précédent:

;	2. Choix du type de renseignement

(initget 128 "Oui")			;Liste de mot-cle valable pour la question suivante
(setq quid (getkword "\nConnaissez-vous la hauteur sous plafond ? [Oui/Non] <Non> "))	


;	3. Saisie de la valeur de hauteur sous plafond

(if (= quid "Oui")	
	(progn
	(setq dz (getstring "\nSaisissez la valeur de la HSP -en m- : "))
	(setq dz (atof dz))		; COnversion de la chaine de caracteres en nombre
	(setq dz (rtos dz 2 2))		; Definit le nombre de decimales
	)


;	41. Extraction de l'altimetrie-plafond (z1) par selection du point 1 (pt1)

	(progn
	(setq pt1 (car (entsel "\nSélectionner l'altitude du plafond : ")))	; Selection de l'entite
	(setq z1 (cdr (assoc '1 (entget pt1))))		; Extraction de la valeur de texte initiale
	(setq zz1 (atof z1))		; Transformation de la chaine de caracteres en nombre reel


;	42. Extraction de l'altimetrie-plancher (z2) par selection du point 2 (pt2)

	(setq pt2 (car (entsel "\nSélectionner l'altitude du plancher :")))	; Selection de l'entite
	(setq z2 (cdr (assoc '1 (entget pt2))))		; Extraction de la valeur de texte initiale
	(setq zz2 (atof z2))		; Transformation de la chaine de caracteres en nombre reel


;	43. Soustraction entre les deux valeurs altimetriques

	(setq dz (- zz1 zz2))		; Calcul de la difference entre les deux altitudes
	(setq dz (rtos dz 2 2))		; Definit le nombre de decimales
	)

)

 

Plutôt que de répondre "Oui" à la question "Connaissez-vous [...]", je souhaite rentrer la valeur connue et gagner une saisie.

Seulement, c'est là que je bloque.

J'ai essayé plusieurs variations (getkword, getstring, (if (= [...], (if (>= [...],, (if (/= [...], ...)

 

D'avance merci.

 

 

Et comme on dit, sur l'internet :

http://zusiddiqui.files.wordpress.com/2012/08/sorry.jpg?w=519

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Bonjour Bryce,

 

Et merci !

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Bonjour,

 

Un principe, à tester voir si cela te va..

(rtos (cond ((getreal "\nConnaissez-vous la hauteur sous plafond ? Si oui, entrez-la ; si non, validez."))
             ((- (atof (cdr (assoc 1 (entget (car (entsel "\nSélectionner l'altitude du plafond : "))))))
                 (atof (cdr (assoc 1 (entget (car (entsel "\nSélectionner l'altitude du plancher :"))))))
              )
             )
       )
       2
       2
 )

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Bonjour Bruno,

 

Ah ouais ...

Dans le principe, ça me convient : plus court, mieux structuré, plus mathématique.

Maintenant faudra être capable de le répéter.

 

Merci !

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Re,

 

Maintenant faudra être capable de le répéter.

Cela viendra petit à petit avec le temps et la pratique.

 

Dans le principe, ça me convient : plus court, mieux structuré, plus mathématique.

J’ai parlé de principe car la ligne suivante, n‘est pas du tout sécurisé (retourne une erreur si sélection vide, ou absence de code dxf 1 dans l’entité sélectionné).

(- (atof (cdr (assoc 1 (entget (car (entsel "\nSélectionner l'altitude du plafond : "))))))
               (atof (cdr (assoc 1 (entget (car (nentsel "\nSélectionner l'altitude du plancher :"))))))
            )

 

Si l’on veut sécuriser le code à minima, il est préférable de factorisé ce dernier, par la création d’une fonction de sélection spécialisé..

;; Sélection d'un texte (non formaté) et retourne sa valeur si numérique
(defun SelTxt2Real (invite / val)
 (while (not (numberp val))
   (if (and (setq val (nentsel invite)) (setq val (cdr (assoc 1 (entget (car val))))))
     (setq val (read val))
   )
 )
)

 

 

Le code ainsi modifié

(rtos (cond ((getreal "\nConnaissez-vous la hauteur sous plafond ? Si oui, entrez-la ; si non, validez. "))
           ((- (SelTxt2Real "\nSélectionner l'altitude du plafond : ")
               (SelTxt2Real "\nSélectionner l'altitude du plancher : ")
            )
           )
     )
     2
     2
)

 

 

Et dans le cas ou la hauteur peut-être obtenue par "mesure" à l'écran (cas d'une élévation), voir la fonction getdist pour une écriture encore plus concise.

(rtos (getdist "\nSaisissez la hauteur sous plafond, ou spécifiez la à l'écran : ") 2  2)

 

Cordialement

Apprendre => Prendre => Rendre

Posté(e) (modifié)

Bonjour Bruno,

 

Pourquoi privilégies-tu la fonction (nentsel à la fonction (entsel ?

 

La différence entre les deux est expliqué dans ce sujet mais visiblement dans mon cas, la fonction (entsel semble suffisant.

 

Je ne comprends pas l'argument invite.

Correspond-il à une question ?

Modifié par MrWoolf

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Re,

 

Pourquoi privilégies-tu la fonction (nentsel à la fonction (entsel ?

 

La différence entre les deux est expliqué dans ce sujet mais visiblement dans mons cas, la fonction (entsel semble suffisant.

Oui, dans ton cas «spécifique» la fonction entsel est suffisante, mais quitte à écrire une fonction spécialisé autant la faire la plus polyvalente possible, surtout si c’est à moindre frais (le remplacement de entsel par nentsel, ce n’est pas trop couteux ;) )

 

Dans ce cas ce n’est pas la matrice de transformation retourné qui nous intéresse mais le fait que nentsel nous retourne l’entité sélectionné qu’elle soit entité principale (cas des textes) ou sous-entités (cas des attributs ou texte dépendant d’une référence externe).

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Merci pour la précision.

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Je ne comprends pas l'argument invite.

Correspond-il à une question ?

 

Oui, dans cette appel à la fonction SelTxt2Real

(SelTxt2Real "\nSélectionner l'altitude du plafond : ")

invite correspond à Sélectionner l'altitude du plafond :

 

Et dans celui-ci

(SelTxt2Real "\nSélectionner l'altitude du plancher : ")

invite correspond à Sélectionner l'altitude du plancher :

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Cela correspond à ta manière de coder ?

Invite indique que l'argument est une question ?

Ou est-ce une façon générale de l'indiquer ?

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

Posté(e)

Cela correspond à ta manière de coder ?

Invite indique que l'argument est une question ?

Ou est-ce une façon générale de l'indiquer ?

Fait quelques test dans ta console VLisp, tu verras que tu peux utiliser le nom de symbol que tu souhaites, par convention on essaie d’en choisir un suffisamment explicite.

 

Un sujet qui peut certainement t’éclairer

http://cadxp.com/index.php?/topic/28642-arguments-et-variables/page__view__findpost__p__156096

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Merci.

=================================================================================

"Je sais bien que je plais pas à tout le monde ... Mais quand je vois à qui je ne plais pas : je me demande si ça me dérange vraiment." in Dikkenek.

Géomètre-Topographe @ Paris

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é