Aller au contenu

Arrondir cotes à la valeur supérieur


litelsousa

Messages recommandés

Bonjour,

 

J'aurais besoin d'arrondir mes cotes à la vingtaine supérieure.

Par exemple, de 0 à 20, ma cote serait de 20.

de 20.1 à 40, elle serait de 40 et ainsi de suite.

 

après de longues recherches J'ai trouvé différents sujets sur l'arrondi, mais pas pour faire ça à la valeur supérieur.

Y a t-il une propriété de cote pour le faire?

 

Merci pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

Bonjour

Visiblement ce post ne remporte pas un franc succès, je vais tenter une réponse rapide.

J'aurais besoin d'arrondir mes cotes à la vingtaine supérieure.

Par exemple, de 0 à 20, ma cote serait de 20.

de 20.1 à 40, elle serait de 40 et ainsi de suite.

 

Je te propose 2 codes, le premier répond à ta demande en forçant le texte de cotation…

(defun c:dimVingtaine (/ ss i e)
 
 (setq	ss
 (cond
   ((ssget "_I" '((0 . "DIMENSION"))))
   (T (princ "\nSélectionnez les cotations arrondir à la vingtaine supérieur...") (ssget '((0 . "DIMENSION"))))
 )
 )

 (repeat (setq	i (if ss (sslength ss) 0))
   (setq e (entget (ssname ss (setq i (1- i)))))
   (entmod
     (subst
(cons
  1
  (rtos	(* 20.0
	   (1+ (fix (/ (- (cdr (assoc 42 e)) 0.00000001) 20.0)))
	)
	2
	3
  )
)
(assoc 1 e)
e
     )
   )
 )

 (princ)
) 

 

Le second fait la même chose avec une valeur de champ, dans Autocad (du moins sur ma veille version) il n’est pas possible de créer ce type de champ en manuel, car normalement en mode édition les propriétés de l’entité ne sont pas accessible aux valeurs de champ.

Mais c’est réalisable par programmation, c’est un assemblage rapide de plusieurs lignes de code que j’ai sous la main donc certainement optimisable, sans tester en profondeur ça doit tout de même faire le travail…

 

;; VDH-Bruno
(defun c:dimVingtaine (/ ss i obj id)

 ;; gc:GetObjectIdString (gile)
 ;; Retourne l'ObjectId de 'obj' sous forme de chaîne représentant un entier 32 ou 64 bits
 ;;
 ;; Argument
 ;; obj : l'objet dont on cherche l'ObjectId (vla-object)

 (defun gc:GetObjectIdString (obj)
   (or	*util*
(setq *util* (vla-get-Utility
	       (vla-get-ActiveDocument (vlax-get-acad-object))
	     )
)
   )
   (if	(vlax-method-applicable-p *util* 'GetObjectIdString)
     (vla-GetObjectIdString *util* obj :vlax-false)
     (itoa (vla-get-ObjectId obj))
   )
 )


 (setq	ss
 (cond
   ((ssget "_I" '((0 . "DIMENSION"))))
   (T (princ "\nSélectionnez les cotations arrondir à la vingtaine supérieur...") (ssget '((0 . "DIMENSION"))))
 )
 )


 (repeat (setq	i (if ss (sslength ss) 0))
   (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i))))
  id  (gc:GetObjectIdString obj)
   )
   (vla-put-TextOverride
     obj
     (strcat
"%<\\AcExpr ((20.0 * (1 + (trunc ( (  %<\\AcObjProp Object(%<\\_ObjId "
id
">%).Measurement>%  -  0.00000001) / 20.0 ))))) \\f \"%lu2%pr0\">%"
     )
   )
 )
 (command "_REGEN")
 (princ)
)

 

A tester ce qui te convient le mieux

Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

La deuxième marche nickel aux premiers abords et surtout se met à jour directement.

 

Un grand merci

 

Je me permets une petite question, si je veux modifier l'arrondi, disons à 40, j'ai essayé de modifier les deux endroits du lisp ou il y a un “20” mais ça continue à l’arrondir à 20.

Comment faut-il faire?

Lien vers le commentaire
Partager sur d’autres sites

Je me permets une petite question, si je veux modifier l'arrondi, disons à 40, j'ai essayé de modifier les deux endroits du lisp ou il y a un “20”

Oui c'est ca, c'est bien les 2 valeurs a modifié ou a mettre dans une variable pour généraliser le fonctionnement du lisp

 

mais ça continue à l’arrondir à 20.

Comment faut-il faire?

 

Vérifie avec une cotation comme 95 par exemple:

  • arrondi a 40 ça doit te donner 120
  • arrondi a 20 ça doit te donner 100

 

Tu as certainement du tester sur une valeur multiple de 20 et de 40, par exemple 75

  • arrondi a 40 ça doit te donner 80
  • arrondi a 20 ça doit te donner 80

D'où une impression de continuer à arrondir à la vingtaine alors que a bien un arrondie à la quarantaine supérieur.

 

Cdt Bruno

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

C'est plus simple que je retouche le lisp si il y a beaucoup de cotes.

 

Oui évidemment sinon il y a mieux en suivant la suggestion de Patrice

Je pense qu il te faut une Routine LSP avec une question relative à la valeur d arrondi (5/10/20/25/50/etc) ?!

 

Mais pour cela je laisse un peu chercher c'est pas bien compliqué à faire :rolleyes:

 

Sinon le procédé du champ sur une dimension est intéressant dans certain cas (autre que faire un arrondi supérieur), quant on veut indiquer des nombres d'espacements, par exemple dans le cas du béton armé ou sur une certaine longueur on doit spécifier un nombre d'intervalle pour un écartement de cadres donné...

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

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é