Aller au contenu

Cumul_Measure


Messages recommandés

Posté(e)

Bonjour,

 

J'utilise souvent le lisp "cumul measure" ( qui vient de quelqu'un du forum dont je n'ai pas retrouvé le nom sur site, et comme le lisp n'est pas signé :( ).

 

(vl-load-com)
(defun c:cumul_measure ( / js n ename d_cumul count k_mod)
 (or
   (setq js (ssget "_I"))
   (setq js (ssget "_P"))
 )
 (cond
   (js
     (sssetfirst nil js)
     (initget "Existant Nouveau _Existent New")
     (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
       (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
     )
   )
   (T (setq js (ssget)))
 )
 (cond
   (js
     (setq d_cumul 0.0 count 0)
     (initget "Longueur Aire _Length Area")
     (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : "))
     (if (not k_mod) (setq k_mod "Length"))
     (repeat (setq n (sslength js))
       (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
       (if (eq k_mod "Length")
         (if (member (vlax-get ename 'ObjectName) '("AcDbEllipse" "AcDbSpline" "AcDbHelix"))
           (setq d_cumul (+ (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename)) d_cumul) count (1+ count))
           (foreach typ_measure '("Length" "ArcLength" "Circumference" "Perimeter")
             (if (vlax-property-available-p ename (read typ_measure))
               (setq d_cumul (+ (vlax-get ename (read typ_measure)) d_cumul) count (1+ count))
             )
           )
         )
         (if (vlax-property-available-p ename "Area")
           (setq d_cumul (+ (vlax-get ename 'Area) d_cumul) count (1+ count))
         )
       )
     )
     (princ (strcat "\nCumul des " (if (eq k_mod "Area") "Aire" "Longueur") " de " (itoa count) " objet(s) sur " (itoa (sslength js)) " sélectionné(s): " (rtos d_cumul)))
   )
 )
 (prin1)
)

 

J'utilise aussi souvent un lisp qui permet de tout mettre en couleur "ducalque" dans un dessin, puis en une couleur choisie.

 

J'ai essayé de combiner les deux mais pfiou, ça marche pas, puis ça devient trop compliqué pour moi :)

 

En fait je cherchais à faire un truc particulier, à savoir : une fois une entité sélectionnée par cumul measure, et fonction validée ( donc j'ai la longueur des éléments sélectionnés ) les entités sélectionnées passent en une couleur donnée, genre rouge. Je fais souvent des sélections un peu bizarre, et des fois je ne sais plus si j'ai sélectionné une entité précédemment ou pas, alors je refais pour vérifier. Si elle passe dans une couleur forcée, je saurais forcément si j'ai déjà compté ou pas :)

 

Si quelqu'un se sent l'ame charitable :) Sinon tant pis, sans on arrive aussi :)

 

Arnaud

Posté(e)

Salut,

 

Pour l'auteur du LISP, je parierais bonuscad (il y a des styles qui se reconnaissent et il a donné tant de LISP sur ce site et ailleurs que les probabilités jouent en ma faveur).

 

Pour la modif demandée, je te propose ça :

 

(defun c:cumul_measure ( / js n ename d_cumul count k_mod color)
 (or
   (setq js (ssget "_I"))
   (setq js (ssget "_P"))
 )
 (cond
   (js
     (sssetfirst nil js)
     (initget "Existant Nouveau _Existent New")
     (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
       (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
     )
   )
   (T (setq js (ssget)))
 )
 (cond
   (js
     (setq d_cumul 0.0 count 0)
     (initget "Longueur Aire _Length Area")
     (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : "))
     (if (not k_mod) (setq k_mod "Length"))
     (repeat (setq n (sslength js))
       (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))) color nil)
       (if (eq k_mod "Length")
         (if (member (vlax-get ename 'ObjectName) '("AcDbEllipse" "AcDbSpline" "AcDbHelix"))
           (setq d_cumul (+ (vlax-curve-getDistAtParam ename (vlax-curve-getEndParam ename)) d_cumul) count (1+ count) color T)
           (foreach typ_measure '("Length" "ArcLength" "Circumference" "Perimeter")
             (if (vlax-property-available-p ename (read typ_measure))
               (setq d_cumul (+ (vlax-get ename (read typ_measure)) d_cumul) count (1+ count) color T)
             )
           )
         )
         (if (vlax-property-available-p ename "Area")
           (setq d_cumul (+ (vlax-get ename 'Area) d_cumul) count (1+ count) color T)
         )
       )
(if color
  (vla-put-Color ename 1)
)
     )
     (princ (strcat "\nCumul des " (if (eq k_mod "Area") "Aire" "Longueur") " de " (itoa count) " objet(s) sur " (itoa (sslength js)) " sélectionné(s): " (rtos d_cumul)))
   )
 )
 (prin1)
)

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

Posté(e)

Yes, merci (gile) c'est parfait !

 

Pour changer de couleur j'ai juste à changer le chiffre dans la ligne : (vla-put-Color ename 1).

 

Ce qui m'épate c'est que la modification était en fait minime ><

 

En tout cas merci à toi !

 

Arnaud

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é