srault Posté(e) le 17 décembre 2021 Posté(e) le 17 décembre 2021 Bonjour à toutes et à tous Je me permets de solliciter votre aide sur un problème que que je rencontre. Sur un de mes blocs dynamiques, j'ai un attribut avec une valeur calculée. Et je souhaiterais que cette valeur ne s'affiche pas en valeur décimal mais en valeur fractionnaire sur la base du quart. (exemple 3.5 => 3+1/2 ; 2.25 =>2+1/4) Je choisi donc le format fractionnaire et la précision de 0 1/4 mais il manque le signe "+" dans la syntaxe du format. (voir pièce jointe) Du coup savez vous comment modifier ou bien rajouter le signe "+" entre le nombre entier et la partie fractionnaire. Merci beaucoup d'avance si vous pouvez me trouver une solution à mon problème. Bonne journée. Sylvain R. Citer
Luna Posté(e) le 17 décembre 2021 Posté(e) le 17 décembre 2021 Coucou, Ce '+' est-il nécessaire pour la compréhension du résultat ou bien est-ce pour une autre raison ? Car d'un point de vu compréhension, l'écriture fractionnaire s'écrit forcément sous forme d'addition, autrement dit il n'est pas possible d'avoir une écriture avec une soustraction. Donc l'écriture est simplifiée car le '+' est implicite. La méthode des Préfixe/Suffixe ne peut pas fonctionner car la part fractionnée est indivisible de la part entière. Il existe cependant un moyen d'arrondir un nombre à un multiple mais le souci c'est que l'on ne peut pas forcer l'arrondi d'un nombre via le format...La solution que je t'aurais proposé était : Champn°1 : m x a Avec m = 0.25 (le multiple) et a un second champ tel que : a = n/m + 0.5 Cependant pour que cela fonctionne il faut que 'a' utilisé dans le champ n°1 corresponde à sa partie entière et non un nombre décimal. Or même si l'on utilise la précision de 0 (donc partie entière), le calcul considère tout de même la partie décimale... Donc cela ne fonctionne pas, désolée.. Bisous, Luna Citer
srault Posté(e) le 17 décembre 2021 Auteur Posté(e) le 17 décembre 2021 Bonjour Luna Tout d'abord merci beaucoup pour ta réponse rapide. Il s'agit d'un bloc de treillis soudés en répartition de nappe, et pour une meilleure compréhension sur chantier je pense que le "+" est justement un plus. J'avais pensé à l'incrément 0.5 tel que tu le dis dans ton message mais ça foire au niveau des arrondis. Il faudrait avoir plus de connaissance dans les fichiers sources d'autocad pour pourvoir modifier cette syntaxe directement. Le mieux sera d'intégrer à Autocad la fonction nombre entier comme sur excel. Bonne soirée à toi En espérant avoir d'autre retour. Citer
JPhil Posté(e) le 17 décembre 2021 Posté(e) le 17 décembre 2021 Tu peux essayer de tromper le résultat en le transformant en texte puis avec wcmatch afin de chercher "l'espace" pour le transformer en "+" en utilisant vl-string-subst. (if (wcmatch Test "* *") (setq Test (vl-string-subst "+" " " Test)) ) Citer
Luna Posté(e) le 18 décembre 2021 Posté(e) le 18 décembre 2021 @JPhil, En programmation c'est simple, puisqu'il suffirait d'utiliser la fonction (LM:roundm) ci-dessous : ;; Round Multiple - Lee Mac ;; Rounds 'n' to the nearest multiple of 'm' (defun LM:roundm ( n m ) (* m (fix ((if (minusp n) - +) (/ n (float m)) 0.5))) ) Cependant s'il faut agir hors programmation, le jeu se complexifie car comme le suppose @srault, il faudrait que AutoCAD puisse faire la différence entre un nombre entier et un nombre décimal... Ou tout simplement que la précision que l'on choisi ne soit pas un simple format d'affichage mais un réel arrondi de la valeur réelle. J'avais également pensé à une formule DIESEL mais cela ne fonctionne pas non plus malheureusement (ou bien je n'ai pas trouvé une solution en DIESEL)... Cependant, on peut éventuellement trouver une solution via la commande RECHERCHER. Bon j'ai testé, et cela ne fonctionne pas, évidemment... Désolée... Bisous, Luna Citer
srault Posté(e) le 20 décembre 2021 Auteur Posté(e) le 20 décembre 2021 Merci à vous deux pour vos retour Malheureusement je n'y connais rien en programmation sur Autocad. Je ne suis pas du tout calé dans ce domaine. Comment peut on intégrer de la programmation dans un bloc dynamique? Si besoin je peux vous fournir une fichier dwg avec ce bloc si ça peut vous aider. Merci Citer
Luna Posté(e) le 20 décembre 2021 Posté(e) le 20 décembre 2021 On ne peut pas justement, on peut faire agir un programme à un instant T mais on ne peux pas l'utiliser directement dans les valeurs d'un attribut en permanence. Comme je disais, il est possible de voir avec le langage DIESEL vu que l'on peut entrer une expression DIESEL comme valeur de champ dynamique mais en effet un .dwg permettrait de mieux s'adapter au problème et trouver une solution viable. Bisous, Luna Citer
JPhil Posté(e) le 20 décembre 2021 Posté(e) le 20 décembre 2021 Le langage ESSENCE, pardon, DIESEL, c'est bien mais ça a une limite. Si ton fichier sera ouvert avec Autodesk Trueview, faut éviter d'utiliser le DIESEL car Trueview ne sait pas le lire. Donc reste la programmation Lisp. Sinon, pour en revenir au formule champ, tu peux inclure deux champs plutôt qu'un seul dans ton texte, du style : "round(740/(240-28))" (afin d'obtenir la partie entier) suivi du "+" suivi du champ "740/(240-28)-round(740/(240-28))" (afin d'obtenir la partie fraction) Le "+" peut aussi provenir du format supplémentaire, suffixe pour le champ entier ou préfixe pour le champ fraction. Simple idée 😉 Source des Fonctions utilisables dans les formules de champ par (gile) >>> ici <<< Citer
srault Posté(e) le 22 décembre 2021 Auteur Posté(e) le 22 décembre 2021 Bonjour JPhil Merci beaucoup pour ta proposition 😄 je vais mettre cela en place sur mon bloc dynamique et je vous tiens au courant. En parlant des formules possibles dans les champs dynamiques, est ce qu'il existe une liste de toutes les formules que l'on peut utiliser dedans? Peux être existe-t-il une liste quelque part? En tout cas merci à vous deux et passez de bonne fêtes 😊 Citer
Luna Posté(e) le 22 décembre 2021 Posté(e) le 22 décembre 2021 Et bien voilà, je me disais bien que j'avais oublié un élément important !!!! Merci @JPhil pour m'avoir rappelé l'existence de cette liste de fonctions éditée par (gile) ! 🙂 Du coup @srault voici ce que je te propose : -> Insérer un champ "Formule" dans ton objet texte, attribut, cotation, ... Valeur : 0.25*trunc(i) Format : Décimal (0.00) -> Insérer un champ "Formule" au niveau du i de la formule ci-dessus Valeur : i/0.25+0.5 Format : Décimal -> Insérer un champ quelqu'il soit correspondant à ta formule de base au niveau du i de la formule ci-dessus Valeur d'exemple : 740/(240-28) Format : Décimal Tu peux également limiter le nombre de champ en intégrant le calcul directement dans la formule mais c'est plus pour un soucis de lisibilité ^^" Mais tu peux en effet n'avoir que 2 champs par exemple en mergeant le 1er avec le second comme ceci : 0.25*trunc(i/0.25+0.5) Avec i le champ correspondant à ton calcul, ou directement ta formule ! J'ai testé vite fait, et j'obtiens bien des valeurs qui ne sont que des multiples de 0.25 et elles sont arrondi au multiple supérieur ;3 Le 20/12/2021 à 18:40, JPhil a dit : Le "+" peut aussi provenir du format supplémentaire, suffixe pour le champ entier ou préfixe pour le champ fraction. J'avais essayé mais la partie fractionnaire fait partie intégrante de la partie entière justement donc les suffixes et préfixes ne peuvent pas s'insérer entre les deux parties... Bisous, Luna Citer
srault Posté(e) le 22 décembre 2021 Auteur Posté(e) le 22 décembre 2021 Bonjour Luna Je viens de tester la méthode de JPhil à l'instant et pour certaines longueurs j'avais des résultats erronés (résultats négatifs du au round(). Je vais tester du coup ta méthode. Je vous tiens au courant. 😊 Citer
srault Posté(e) le 22 décembre 2021 Auteur Posté(e) le 22 décembre 2021 @Luna Ton idée m'a l'air très bonne par contre j'ai du mal à la mettre en place et à obtenir les résultats / affichages souhaités. Pour la partie entière, il y a pas de soucis j'arrive à l'obtenir. Par contre pour la partie décimale restante je sèche sur la syntaxe. Si je suis ton résonnement j'obtiens cela (voir extrait ci joint). Avec cette formule j'obtient 5.25 au lieu 0.25. J'ai encore besoin d'aide pour bien appréhender cette formule trunc() Merci Sylvain R Citer
Luna Posté(e) le 22 décembre 2021 Posté(e) le 22 décembre 2021 Nan je crois que tu n'as pas compris la démarche. Le but est simplement de ne pas utiliser l'écriture fractionnaire mais décimale. Le but de l'écriture fractionnaire c'est uniquement de pouvoir gérer les arrondis à 0.5, 0.25, 0.125, ... près. Donc Au lieu d'avoir le résultat 5+1/4, je trouve que c'est plus compréhensible d'écrire 5.25 🙂 Et c'est tout... Voici un exemple d'écriture avec un seul champ : 0.25*trunc((740/(240-28))/0.25+0.5) Ce qui me donne le résultat 3,50 Et si tu prends 0.25*trunc(5.27/0.25+0.5) Cela va renvoyer 5.25 Bisous, Luna Citer
JPhil Posté(e) le 22 décembre 2021 Posté(e) le 22 décembre 2021 @srault, tout est indiqué mais bon vu l'heure tardive du message je peux entendre que l'explication n'était pas claire. C'est le problème d'avoir plusieurs idées qui arrivent en même temps 🙂 @Luna, en effet avec un seul champ il n'est pas possible d'avoir le "+" au milieu, il faut donc décomposer le champ en deux. Insérer un premier champ "Formule" dans ton objet texte, attribut, cotation, ... : Valeur : trunc(740/(240-28)) Format : Fractionnaire (0 1/4) Insérer un deuxième champ "Formule" à la suite du premier champ : Valeur : 740/(240-28)-trunc(740/(240-28)) Format : Fractionnaire (0 1/4) Format supplémentaires : mettre "+" comme préfixe Donne le résultat suivant : "3+1/2" Par contre si tu mets "740/(240)-trunc(740/(240))" comme valeur, ça va donner au final "3+0" 😶 Citer
Messages recommandés