Aller au contenu

Sauvegarde d\'une constante dans DWG


Messages recommandés

Posté(e)

Bonjour à tous,

 

Quelqu'un pourrait m'indiquer s'il est possible de sauvegarder quelquepart dans un DWG une constante (comme l'échelle : 200 pour du 1/200, 1250 pour du 1/1250....) qui pourra être utilisable à partir des routines Lisp...

 

Avec VBA, je l'écrivais dans un fichier TXT dans le répertoir courant du DWG... Mais en Lisp, je ne sais pas comment faire...

 

Si cette constante n'existe pas dans un DWG, il faut la demander au premier appel de cette Cste... Et la sauvegarder...

 

Merci...

 

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)

Tu peux utiliser les variables système USERR1, USERR2, USERR3, USERR4, USERR5 pour stocker des nombres réels (USERI1, USERI2,... pour des entiers).

 

Ou encore, si tu crains que les variables ci dessus soient modifiées, tu peux créer un bloc "Constante_Echelle" ne contenant qu'un attribut constant dont la valeur serait la constante à conserver.

 

Pour créer le bloc en LISP (const contient la vleur de la constante) :

 

(setvar "AFLAGS" 18)
(command "_.-attdef" "" "constante" const '(0 0) "" "")
(command "_.-block" "Constante_Echelle" '(0 0) (entlast) "") 

 

Pour récupérer la valeur de la constante :

 

(read (cdr (assoc 1 (entget (entnext (tblobjname "block" "Constante_Echelle")))))) 

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

Posté(e)

Merci (gile)

 

Je vais essayer les USERs mais j'ai paur que d'autre routines Lisp ne les utilisent. Je vais voir,

Mais si j'opte pour le block, faut-t'il l'insérer dans le dessin ou juste le laisser dans la base du DWG (et ne jamais le purger ;) )

 

Dans tous les cas, je te remerci 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)

Il n'est pas nécessaire d'insérer le bloc.

 

Essaye de décortiquer la ligne

(read (cdr (assoc 1 (entget (entnext (tblobjname "block" "Constante_Echelle"))))))

avec l'aide, c'est un bon exercice.

 

La valeur attribuée à la variable const peut être indifféremment un entier, un réel, ou une chaine (200, 200.00 ou "200").

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

Posté(e)

Un bloc avec seulement des attributs invisibles peut être une bonne solution (comme ça il sera plus difficile de le supprimer par inavertance et de pouvoir le purger)

 

On peut aussi se tourner vers les XDATA attachés un point (par exemple) mis sur le calque defpoint (comme ça, il n'est pas imprimé).

 

Ceci pour conserver les infos (elles suivent le DWG durant sa vie).

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Merci Bonuscad...

 

Pour les Xdata d'un point, ça me plait, mais ou insérer ce point, au milieu des moyennes des X et Y des entités du dessin ? Et geler ce calque ?

 

L'aide AutoCAD est super light sur les Xdata en Lisp (en anglais !)

 

Quelqu'un aurait un bon exemple ou une bonne adresse qui explique comment les utiliser ?

 

Ne serait-ce pas plus simple le coup du block ?

 

Merci....

 

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)

Salut

Si c'es pour conserver une valeur dans un dessin sans passer par les blocs, il est possible de se servir des vlax-ldata

Donc pour conserver la valeur 200, je peux faire

(vlax-ldata-put "Mon_appli" "Ma_cle" 200)

Pour lire ma valeur

(vlax-ldata-get "Mon_appli" "Ma_cle")

Pour l'effacer

(vlax-ldata-delete "Mon_appli" "Ma_cle")

Et encoe pour voir la liste de toutes mes valeurs avec leurs ckes

(vlax-ldata-list "Mon_appli")

 

@+

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)

Encore une fois, je dois m'incliner devant la "simplicité" d'utilisation des fonctions vlax, et les connaissances de Patrick_35. :D

 

Je poste quand même une autre façon de faire, avec une donnée étendue dans un point comme le suggérait aussi Bonuscad, en pur AutoLISP (ce qui n'est pas forcément le plus simple pour "Débuter en LISP") :cool:

 

pour stocker la valeur de const dans un point créé sur le calque Defpoint :

 

(regapp "CONSTANTE_ECHELLE")
(entmake
 (list	'(0 . "point")
'(10 0.0 0.0 0.0)
'(8 . "defpoint")
(list -3 (list "CONSTANTE_ECHELLE" (cons 1042 const)))
 )
)

 

et pour récupérer la valeur :

 

(cdr
 (assoc
   1042
   (cdadr
     (assoc
-3
(entget	(ssname	(ssget "_X"
		       '((-3 ("CONSTANTE_ECHELLE")))
		)
		0
	)
	'("CONSTANTE_ECHELLE")
)
     )
   )
 )
)

 

PS : j'ai choisis le code 1042 parcequ'il m'a semblé comprendre qu'il s'agissait d'un facteur d'échelle, mais tu peux choisir 1040 pour un réél ou un autre (CF Référence DXF -> Format DXF -> Codes de groupe par ordre numérique dans l'aide aux développeurs)

 

Sinon, avec un bloc, si tu veux éviter le risque d'une purge du bloc, tu peux, comme le suggère Bonuscad, rendre l'attribut invisible en ajoutant le bit 1 à la variable AFLAGS (setvar "AFLAGS" 19) et l'insérer sur le calque de ton choix.

 

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

Posté(e)

Merci à tous... Vos posts sont super ciblé, exactement ce que je cherchais...

 

- Pour (gile), je continu de réfléchir sur

 
(read (cdr (assoc 1 (entget (entnext (tblobjname "block" "Constante_Echelle"))))))

 

(si j'ai compris, mais je n'ai pas encore appronfondi la question, 1 serait la variable contenant l'échelle ?)

 

Mais j'ai une question, pourrais-je accéder à cette donnée si le block est dans un calque gelé ?

 

Je le gèle pour qu'il n'interfère pas lors d'un zoom étendu, surtout s'il est en 0,0,0...

 

Et j'ai une remarque, grace au block, on peut aussi ajouter d'autre s entrées... Client, Ville...Nombre de lot....

 

Même question pour Bonuscad au sujet des Xdata...

 

- Pour Patrick_35, C'est super interessant, mais y-a t'il d'autre info sur les (vlax-ldata.........)

 

- pour ma modifier(vlax-ldata-put "Mon_appli" "Ma_cle" 200)Comme :

- comment la modifier, delete, puis put ?

- combien de clé sont possibles ?

- est-ce que c'est immuable dans le fichier DWG ?

 

Mais ce coup là, est tous bonnement génial...

 

Rien qu'avec tous cà, j'ai de quoi faire...

 

Au fait, ceux qui ont connus mes débuts (qui durent encore), constatent-ils une progression ?

 

Merci à vous tous, vous m'avez été d'une aide sans pareille ! !

 

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)

Pour la modifier, rien de plus simple, il suffit de la réecrire

Le nom de clés doit être illimitées. Je n'ai jamais testé. Je fais des listes avec des objets vla (environ 100 vla par liste) sur une dizaine de listes et ça fonctionne bien

Et justement ce qui est intérressant, c'est que c'est inscrit dans le dwg pour pouvoir les réutiliser ensuite. Je m'en sert surtout pour mes réacteurs, de manière à ce que ce q'ils soient toujours actifs quand on ouvre son dessin

 

@+

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)

Merci 1000 fois Patrick_35...

 

Comme tes conseils, j'ai écris çà, qu'en dis-tu ?

 

(defun PhEch  ()
 (setvar "cmdecho" 0)
 (setq Ech (vlax-ldata-get "Phalene" "Echel1"))
 (if (= Ech nil)
   (progn
     (setq Ech (getreal "Échelle du dessin (1/"))
     (vlax-ldata-put "Phalene" "Echel1" Ech)
     (princ (strcat "Echelle = 1/" (vlax-ldata-get "Phalene" "Echel1")))
     )
   )
(cond
 (= Ech 50) (setq HTxt .2)
 (= Ech 100) (setq HTxt .5)
 (= Ech 150) (setq HTxt .8)
 (= Ech 200) (setq HTxt 1.2)
 (= Ech 250) (setq HTxt 1.5)
 (= Ech 500) (setq HTxt 2)
 (= Ech 650) (setq HTxt 2.2)
 (...............)
 (............)
)
)

 

Htxt est la hauteur du text moyen pour cette échelle

 

les textes plus petit seront (* Htxt 0.9)

les plus grand donneront ((*Htxt 1.1)

 

Mais je suis devant une colle au moment d'écrire ces ligne... Si on a une drôle d'échelle comme 1/33 ? Ma (cond est inopérante...

 

Merci encore à tous ! ! Je suis un homme comblé ! ! (ce soir... ;P )

 

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)

J'auroi plutôt écrit cette partie comme ceci

(if (not (setq Ech (vlax-ldata-get "Phalene" "Echel1")))
 (if (setq Ech (getreal "Échelle du dessin (1/"))
   (vlax-ldata-put "Phalene" "Echel1" Ech)
 )
)
(if Ech
 (princ (strcat "Echelle = 1/" (rtos Ech)))
)
(princ)

au lieu de

(setq Ech (vlax-ldata-get "Phalene" "Echel1"))
(if (= Ech nil)
 (progn
   (setq Ech (getreal "Échelle du dessin (1/"))
   (vlax-ldata-put "Phalene" "Echel1" Ech)
   (princ (strcat "Echelle = 1/" (vlax-ldata-get "Phalene" "Echel1")))
 )
)

 

[Edité le 22/5/2006 par Patrick_35]

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,

 

Tout d'abord, bien sûr que tu as fais des progrès !

 

Je décortique de manière succinte la ligne de code en partant de la paranthèse la plus "à l'intérieur"

 

(tblobjname "block" "Constante_Echelle") retourne le nom d'entité de la définition de bloc du bloc "Constante_Echelle" récupérée dans la collection/table des blocs du dessin courant.

Donc l'insertion d'une référence du bloc n'influe en rien sur la possibilité d'accéder à l'attribut, elle permet juste d'éviter que cette définition de bloc ne soit purgée du dessin.

 

(entnext ename) retourne le nom d'entité de l'entité créée juste après ename ou, si ename est une entité complexe (polyligne, bloc avec attributs), la première "sous-entité" de ename (vertex ou attribut). Dans le cas qui nous occupe (entnext ... retourne le nom d'entité de l'unique attribut du bloc "Constante_Echelle". Donc si le bloc contient plusieurs attributs il faut faire une boucle avec (entnext ...) pour les récupérer tous.

 

(entget ename) Retourne une liste associative des données de définition de l'entité ename, autrement dit la liste des valeurs DXF de l'entité. Chaque valeur est associée à un code de groupe.

Exemple (tronqué, la liste est plus longue) :

((-1 . ) (0 . "ATTDEF") ... (8 . "Calque1") (100 . "AcDbText") (10 0.0 0.0 0.0) ... (1 . "250") ... (2 . "CONSTANTE") ...)

Où -1 est le code de groupe nom_d'entité, 0 celui du type d'entité, 1 celui de la valeur de l'attribut.

 

(assoc n liste_entget) retourne l'élément de la liste dont n est est le code, cet élément est une liste, le plus souvent une "paire pointée" (dotted pair), dans notre cas (1 . "250")

 

(cdr liste) retourne la liste privée de son premier élément, dans notre cas "250"

 

(read "250") retourne 250.

 

[Edité le 22/5/2006 par (gile)]

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

Posté(e)

Mais je suis devant une colle au moment d'écrire ces ligne... Si on a une drôle d'échelle comme 1/33 ? Ma (cond est inopérante...

 

Pourquoi ne pas utiliser un rapport constant entre l'échelle et la hauteur de texte ?

 

(setq Htxt (/ Ech 250))

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

Posté(e)

Je n'utilise pas un coeficient d'échelle pour les textes car au 50, les textes ne sont pas 10 fois plus petits qu'au 500 et pas 1000 fois qu'au 5000

 

Entre le 200 et le 500, c'est du pareil au même, mais du 200 au 1500, les textes n'ont pas la mêmes importances

 

C'est surtout une question d'estétique... Le rotring est pour les trairts... le Leroy est pour le dessinateur ;)

 

Question de gout...Je trouve ça plus beau Peut-être pour montrer aussi une échelle dans les textes...

 

Si tous les textes ont tous la même taille quelquesoit l'échelle, on moins, je trouve, le'impression de l'échelle...

 

Mais j'y ai longuement réfléchis... Depuis que je dessine sous AutoCAD... Une quinzaine d'années....

 

J'espère avoir répondu...

 

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)

Waow...

Merci Patrick_35, j'ai compris ton code, mais de là à le créer ! ! J'ai encore le temps... Mais c'est remarquable de voir un code aussi réduit à l'essenciel... Aussi consit....

 

Je me l'imprime et l'encadre ;)

 

Merci 1000 fois, Cà marche super ! !

 

Tu parlais de réacteur ? :o C'est quoi ?

 

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)

Merci Patrick_35, j'ai compris ton code, mais de là à le créer

Si tu l'as compris, maintenant tu es capable de le créer ;)

Tu parlais de réacteur ? C'est quoi ?

C'est ce qui permet de détourner une commande ou d'avoir des liaisons dynamiques dans le dessin. Par exemple, j'associe un texte à une polyligne fermé pour avoir sa surface. dès que je modifie ma poly avec les grips, le texte se met à jour automatiquement; Un exemple ici

Pour ce qui est de commandes, tu as un exemple ici

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)

je me suis amusé un Jour ! à mettre en équation le rapport de hauteur des textes en fonction de l'échelle et de l'unité ! ça donne ça !

 

[ 250 * ( 1 / ( 100 / ECH ) ) ] / unité

 

250 = hauteur de référence pour un dessin en mm au 100e si je veux 2,5 sur le papier...

 

ECH = échelle souhaité

 

unité = 1 si millimètres / 10 si Centimètres / 1000 si Mètres

 

Christian

 

[Edité le 22/5/2006 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Posté(e)

Tu n'est pas obligé d'utiliser systématiquement un le rapport entre échelle et hauteur de texte.

 

Je proposais çà pour que la routine n'échoue pas, tu fais tes (cond et à la fin, pour les échelles non spécifiées tu appliques ce rapport (entre paranthèses le cond comme tu l'as écrit est faux, chaque groupe condition/action(s) doit être inclus dans un groupe de paranthèses et pour 0.5 il faut écrire le 0) :

 

(cond

((= Ech 50) (setq HTxt 0.2))

((= Ech 100) (setq HTxt 0.5))

((= Ech 150) (setq HTxt 0.8))

((= Ech 200) (setq HTxt 1.2))

((= Ech 250) (setq HTxt 1.5))

((= Ech 500) (setq HTxt 2))

((= Ech 650) (setq HTxt 2.2))

(. . . . . . . . . . . . . . .)

(. . . . . . . . . . . .)

(T (setq HTxt (/ Ech 250)))

)

 

Tu pourrais même, dans le même esprit appliquer un rapport pour les échelles entre 1 et 200, un autre entre 201 et 500 etc...

 

PS : 1/33 est, pour moi beaucoup mois bizarre que 1/650, c'est une échelle courament utilisée dans mon domaine (la contruction de décors) c'est plus grand que le 1/50 et au 1/20 les maquettes des décorateurs ne passent plus dans les portes.

 

PPS : Je suis un "novice" d'AutoCAD comparé à toi, je ne pratique que depuis 3ans.

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

Posté(e)

Merci RebCao, c'est très astucieux... Je suis sûr de m'en servir... Notament pour des flèches...

 

Ce site est réellement une réunion d'idées, et des bonnes ! !

 

Ca aide, c'est pas croyable ! !

 

Merci encore à tous ! ! ! !

 

;)

 

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)

Pffffffff ! ! !

 

J'ai encore un petit problème.... J'ai écris ça pour changer d'échelle et ça ne fonctionne pas... (je n'ai pas encore fini, mais je fais ce post pendant mon déjeuné, vite fait au cas ou quelqu'un à déjà fait un truc là-dessus...)

 

 
(defun c:_PhChEch  ()
 (setvar "cmdecho" 0)
 (setq Ech (vlax-ldata-get "Phalene" "Echel1"))
 (if (= Ech nil)
   (progn
     (setq Ech (getreal "Échelle du dessin (1/"))
     (vlax-ldata-put "Phalene" "Echel1" Ech)
     (princ (strcat "Echelle = 1/" (vlax-ldata-get "Phalene" "Echel1")))
     )
   )
 (if (/ Ech nil)
   (progn
     (setq Ech (getreal (strcat "Ancienne échelle (1/" (fix Ech) ")  -  Nouvelle échelle (1/")))
     (vlax-ldata-put "Phalene" "Echel1" Ech)
     (princ (strcat "Echelle = 1/" (vlax-ldata-get "Phalene" "Echel1")))
     )
 )
)

 

Nota, j'ai mis un "_" devant la commande, sinon, çà fait çà :

(defun c:PhChEch ()

 

 

Merci encore à tous ! !

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)

Salut,

 

Il n'est pas nécessaire de mettre CMDECHO à 0 si tu n'utilise pas la fonction (command ...)

 

Il n'est pas necessaire de faire (if (condition_1) ...) (if (pas_condition_1) ... ), il suffit de faire :

(if (condition_1)

(action_si_condition_remplie)

(action_si_condition_pas_remplie)

)

 

((if (/ Ech nil) ... ) est incorrect, je suppose que tu voulais écrire (if (/= ech nil) ... ) qui peut s'écrire plus simplement (if Ech ...)

 

(strcat ... ) n'accepte comme argument que des chaines (ou des variables dont la valeur est une chaine),or la valeur de Ech est un réel (getreal) il faut donc écrire (rtos Ech) pour transformer Ech en chaine ou (itoa (fix Ech)) si tu veux un entier.

 

J'ai rajouté un (if ...) à l'intérieur du (progn ... ) si Ech est déjà défini de façon à ce que si l'utilisateur ne veuille pas redéfinir Ech il puisse simplement taperENTER ou faire clic droit et un (princ) à la fin de la routine pour que la dernière interprétation ne se répète 2 fois sur la ligne de command.

 

(defun c:xPhChEch (/ Ech)
 
 (setq Ech (vlax-ldata-get "Phalene" "Echel1"))
 
 (if Ech
   
   ;; si Ech est déjà défini
   (progn
     (if (setq	Ech (getreal (strcat "Ancienne échelle (1/"
			     (rtos Ech)
			     ") - Nouvelle échelle: 1/"
		     )
	    )
  )
;; Si Ech est re-défini
(vlax-ldata-put "Phalene" "Echel1" Ech)
     ) ;_ Fin de if
     (princ
(strcat	"\nEchelle = 1/" (rtos (vlax-ldata-get "Phalene" "Echel1")))
     )
   ) ;_ Fin de progn
   
   ;; si Ech n'est pas encore défini
   (progn
     (setq Ech (getreal "Échelle du dessin 1/"))
     (vlax-ldata-put "Phalene" "Echel1" Ech)
     (princ
(strcat "\nEchelle = 1/" (rtos (vlax-ldata-get "Phalene" "Echel1")))
     )
   )
 )
 (princ)
) 

 

[Edité le 24/5/2006 par (gile)]

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

Posté(e)

Des miliards de mercis à toi, (gile), :D c'est EXACTEMENT ce que je cherchais ! !

 

Encore merci....

 

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)

  • 2 semaines après...
Posté(e)

Bon, maintenant, c'est au tour de RebCao...

 

Ta formule : [ 250 * ( 1 / ( 100 / ECH ) ) ] / unité

 

En Lisp, ça donne ça ?

Je vais improviser, je ne retrouve pas mon lisp ( il a dut rester au boulo...)

 

(/ (*250 (/ 1 (/ 100 Ech))) unité)

 

Le vache, on peut me dire tout ce qu'on veut.... Le lLisp, c'est pas évidant...

 

Je suis SÛR d'avoir faut...

 

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 suis SÛR d'avoir faut...

 

Non, c'est preque çà, il manque un espace entre * et 250, il vaut mieux éviter les accents dans les noms de variables et, il y a une subtilité avec la division en LISP : si tu divises un entier par entier le résultat sera un entier d'où :

 

(/ 10 3) retourne 3 ou (/ 1 10) retourne 0

 

Il est donc impératif qu'au moins un des arguments de la fonction / soit un réel pour que le résultat soit un réel :

 

(/ 10.0 3) retourne 3.33333 et (/ 100.0 10) retourne 10.0

 

Je dois avouer avoir fait cette faute encore récemment, il est donc prudent d'écrire :

 

(/ (* 250 (/ 1 (/ 100.0 Ech))) unite)

 

Sinon, on peut simplifier la formule de Rebcao (çà, c'est des maths basiques) :

 

(2.5 * Ech) / unité

 

Ce qui en LISP(avec float pour s'assurer que unite est un réel) donnerait :

 

(/ (* 2.5 Ech) (float unite))

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é