Aller au contenu

\"Echelle personnalisée\" dans une fenêtre


Messages recommandés

Posté(e)

Bonsoir à tous...

 

Beaucoup de mes calques se terminent par l'échelle des entité qu'ils contiennent :

"Poteaux EDF 200"

"Poteaux EDF 500"

"Cadastre adresse 200"

"Cadastre adresse 500"

"...... .... ...1250"

".... ... .. .. .. 25000"

"... ........ ...."

 

Mais j'ai aussi des calques où les entités n'on pas d'échelle :

"Cadastre limite"

"Bâtiment contour"

"Bordure de trottoir"

"....."

 

Pour, biensur, les geler ou les libérer dans une fenêtre de l'espace papier qui elle a une échelle... Mais voilà, je ne sais pas comment, une fois "dans" la fenêtre, savoir quelle est sont "échelle personnalisée"...

 

Si quelqu'un peut me sortir une variable ou une astuce...

 

J'ai déjà fais ça :

(defun c:LayerEchP ( / x_plan)
 (setq x_plan (tblnext "layer" T))
 (while (/= x_plan nil)
   ;(princ "\nPlan en cours :")
   ;(princ (cdr (assoc 2 x_plan)))
   (if (= (numberp (read (FinChaine (cdr (assoc 2 x_plan))))) T)
     ;(gèle ou libère le calque selon échelle)
     ;(ne touche à rien)
   ) ;_ Fin de if
   (setq x_plan (tblnext "layer"))
 ) ;_ Fin de while
)

 

(defun FinChaine (chaine / pos)
 (setq pos (strlen chaine))
 (while (and (not (equal (substr chaine pos 1) " ")) (> pos 1))
   (setq pos (- pos 1))
 ) ;_ Fin de while
 (setq chaine (substr chaine (+ pos 1) (- (strlen chaine) pos)))
) ;_ Fin de defun

 

Je sais, j'ai encore beaucoup de boulo... Mais j'y arriverais...

 

Merci,

 

Denis... ( qui est fatigué mais qui arrive à faire plein de truc...)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Merci à toi Tramber,

 

Très intéressant, je croix que j'utiliserais :

(setq Ech (* (last (trans '(0 0 1) 3 2)) 1000))

 

puisque je suis à l'intérieur de la fenêtre... J'ai

(* (last (trans '(0 0 1) 3 2)) 1000)

Qui me renvoi bien 200.0 (pour du 200ème). Mais j'ai

(fix (* (last (trans '(0 0 1) 3 2)) 1000))

qui me renvoi 199 ? ? ?

 

D'où qu'il est passé où le 1 ? ?

 

Merci encore,

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Je pense qu'il s'agit d'un problème d'arrondi.

 

la fonction fix retourne la "troncature" du nombre (le nombre troqué de ces décimales) :

 

(setq num 4.9999999999999) retourne 5.0

(fix num) retourne 4

 

tu peux utiliser la fonction arrondi :

 

(defun	arrondi	(num)
  (if (	  (abs (- num (1+ (fix num))))
      )
    (fix num)
    (1+ (fix num))
  )
) 

 

(arrondi num) retourne 5

(arrondi 4.49999999) retourne 4

(arrondi 4.5) retourne 5

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

Posté(e)

Merci encore à toi (gile)

 

Mais là, je ne saisi pas...

 

Dans mon cas, (* (last (trans '(0 0 1) 3 2)) 1000) est bien égale à 200.00000.....

 

Mais je note ta routine "arrondi" forte utile...

 

Merci encore,

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Dans mon cas, (* (last (trans '(0 0 1) 3 2)) 1000) est bien égale à 200.00000.....

 

Que te retourne l'expression suivante, T ou nil ?

 

(= 200 (* (last (trans '(0 0 1) 3 2)) 1000))

 

Et celle-ci ?

 

(equal 200 (* (last (trans '(0 0 1) 3 2)) 1000) 1e-9)

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

Posté(e)
(= 200 (* (last (trans '(0 0 1) 3 2)) 1000))

 

nil

 

(equal 200 (* (last (trans '(0 0 1) 3 2)) 1000) 1e-9)

 

T

 

 

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Si la première expression retourne nil, c'est bien que (* (last (trans '(0 0 1) 3 2)) 1000) n'est pas exactement égal à 200.

 

Néanmoins, la seconde expression retourne T parceque, à 0.000000001 (ou 1e-9) près, c'est bien égal à 200.

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

Posté(e)

Ok, donc AutoCAD m'affiche 200.000. Mais en fait, il a 199.999..... Raison pour laquelle, fix "coupe" la partie décimale et me renvoi 199...

 

Mais j'au trouvé un super truc vachement plus simple... (non, ne te moque pas ;) )

 

Ech = "200"

 

(setq Ech (rtos (arrondi (atoi Ech)) 2 0))

 

Mais en l'écrivant, je m'aperçois que c'est nul (puisque Ech est une saisi au clavier), et donc ça ne sert à rien ! !

 

Pfffff, et comme un âne, j'ai déjà posté ma routine... PFFFFFF.... :casstet:

 

Faut que j'aille corriger ça...

 

Bon, tu peut te moquer ! ! ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

(setq Ech (rtos (arrondi (atoi Ech)) 2 0))

 

Ne sert effectivement absolument à rien du tout :

 

si la valeur de Ech est : "200"

 

(atoi Ech) transforme la chaine en entier -> 200

(arrondi (atoi Ech)) arrondi un nombre entier au nombre entier le plus proche !!! -> 200

(rtos (arrondi (atoi Ech)) 2 0) transforme en chaine un nombre réel (en fait un entier) sans afficher de décimale -> "200"

(setq Ech (rtos (arrondi (atoi Ech)) 2 0)) attribue sa "nouvelle valeur" à Ech !!!

 

Eh, Denis arrête Pink Floyd ;)

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

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é