Aller au contenu

Longueur cumulée de polyligne


Messages recommandés

Posté(e)

Bonjour,

 

Quelqu'un connait t-il une commande (covadis ou autocad) permettant de donner d'un coup la longueur cumulée de toutes les polylignes constituants un calque ?

Pour moi il s'agit d'un calque représentant le linéaire de bordures A2 sur un projet.

 

Tout ca pour éviter d'additionner chaque longueur...

 

Merci

Posté(e)

Salut,

 

Si cela peut t'aider.

 

 ;;;=================================================================
;;;
;;; MES.LSP V1.00
;;;
;;; Mesurer en continu et avec cumul
;;;
;;; Copyright (C) Patrick_35
;;;
;;;=================================================================

(defun c:mes(/ di pt1 pt2)
 (setq pt1 (getpoint "\nPremier Point : ") di 0.0)
 (while pt1
   (if (setq pt2 (getpoint pt1 "\nPoint suivant : "))
     (progn
(setq di (+ di (distance pt1 pt2)))
(princ (strcat "\nDistance mesurée: " (rtos (distance pt1 pt2)) " -- Distance cumulée : " (rtos di)))
     )
   )
   (setq pt1 pt2)
 )
 (princ)
)

(setq nom_lisp "MES")
(if (/= app nil)
 (if (= (strcase (substr app (1+ (- (strlen app) (strlen nom_lisp))) (strlen nom_lisp))) nom_lisp)
   (princ (strcat "..." nom_lisp " chargé."))
   (princ (strcat "\n" nom_lisp ".LSP Chargé.....Tapez " nom_lisp " pour l'éxecuter.")))
 (princ (strcat "\n" nom_lisp ".LSP Chargé......Tapez " nom_lisp " pour l'éxecuter.")))
(setq nom_lisp nil)
(princ)

 

(Merci Patrick).

 

@+

 

Posté(e)

Merci à tous les deux, je vais me contenter de la commande covadis, je l'ai trouvé dans :

covadis2d/listings/listings de polylignes

 

Il y a également la commande Autocad "extractdonnées", mais elle est plus longue que celle de covadis, et il faut faire l'addition globale dans un tableur....

 

 

Posté(e)

Bonjour William,

 

 

Il y a aussi la commande :

 

Covadis vrd/metres simplifies et quantitatifs/quantitatif lineaire,

 

Qui va pas mal pour cet usage

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Posté(e)

Ou encore ceci, plus générique

 

(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] : ") "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]  : "))
     (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)
)

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

Posté(e)

pompé de (gile) et un poil retouché.... lgl

 

ça somme les lignes ou polyligne sélectionnées et regroupé par calque

 

je préfère isoler les calques et faire les sélection à la main car il y a souvant des bouts de lignes qui traine dans un détail ou simplement la légende ou encore pour sortir des phases... bref balancer un métré de tout un calques brut et sans controle de visu je trouve ça un peu trop sujet à boulette...

 

 

 

 

 

;; totalise les longueurs par calque dans une séléction

 

((defun c:lgl (/ ss tot nb n long obj lst lay l_lay)

(vl-load-com)

 

(if (setq ss (ssget (list '(-4 . ""))))

(progn

(setq nb (sslength ss)

n 0

tot 0.0)

(princ

(strcat "\n\nLa sélection contient : " (itoa nb) " lignes ou polylignes")

)

(repeat nb

(setq obj (vlax-ename->vla-object (ssname ss n))

long (vlax-curve-getDistAtParam

obj

(vlax-curve-getEndParam obj)

)

tot (+ tot long)

lay (vla-get-Layer obj)

)

(setq n (1+ n))

 

(if (setq l_lay (assoc lay lst))

(setq lst (subst (cons lay (+ long (cdr l_lay))) l_lay lst))

(setq lst (cons (cons lay long) lst))

)

)

(mapcar '(lambda (x)

(princ (strcat "\nLongueur totale sur le calque "

(car x)

" : "

(rtos (cdr x))

)

)

)

lst

)

(princ (strcat "\nLongueur totale dans le dessin = " (rtos tot)))

(textscr)

)

(princ "\nLe dessin ne contient pas de polylignes.")

)

(princ)

)

)

Posté(e)

J'ai un truc super mais un peu bourrin qui donne un listing csv par calque des quantités, surfaces cumulées, longueurs cumulées des objets d'un dessin.

Je l'ai posté je ne sais où, je ne sais quand sur cadxp, et je m'étais fait enguirlander (gentiment)parce que j'avais balancé le code brut (sans le papier derrière) et que le code n'était pas rédigé dans les règles de l'art (sur la forme, parce que sinon ça marche super bien).

Tant pis, je rebalance le truc tel que:

 

 

; DEFINITION FONCTIONS

 

(defun mtrlines ()

(setq lbeg (cdr (assoc '10 ent)))

(setq lend (cdr (assoc '11 ent)))

(setq llen (distance lbeg lend))

(setq long (+ long llen))

(ssdel sn ss1)

)

 

(defun mtrlarcs ()

(setq cen (cdr (assoc '10 ent)))

(setq rad (cdr (assoc '40 ent)))

(setq dia (* rad 2.0))

(setq circ (* (* rad pi) 2.0))

(setq sang (cdr (assoc '50 ent)))

(setq eang (cdr (assoc '51 ent)))

(if (< eang sang)

(setq eang (+ eang (* pi 2.0)))

)

(setq tang (- eang sang))

(setq tang2 (* (/ tang pi) 180.0))

(setq circ2 (/ tang2 360.0))

(setq alen (* circ2 circ))

(setq long (+ long alen))

(princ)

(ssdel sn ss1)

)

 

(defun mtrplines ()

(command "_area" "e" sn)

(setq long (+ long (getvar "perimeter")))

(setq surf (+ surf (getvar "area")))

(ssdel sn ss1)

)

 

(defun mtrsplines ()

(command "_area" "e" sn)

(setq long (+ long (getvar "perimeter")))

(setq surf (+ surf (getvar "area")))

(ssdel sn ss1)

)

 

(defun mtrcircles ()

(command "_area" "e" sn)

(setq long (+ long (getvar "perimeter")))

(setq surf (+ surf (getvar "area")))

(ssdel sn ss1)

)

 

(defun mtrellipses ()

(command "_area" "e" sn)

(setq long (+ long (getvar "perimeter")))

(setq surf (+ surf (getvar "area")))

(ssdel sn ss1)

)

 

COMMANDE

 

 

(DEFUN C:metre (/ long ss1 sn sn2 et)

(setq cmdecho (getvar "cmdecho"))

 

 

(setq file "D:\\metre.csv")

(print file)

(setvar "cmdecho" 0)

(setq ow (open file "w"))

(write-line (strcat "CALQUE"";""SURFACE"";""LONGUEUR"";""NOMBRE") ow)

 

 

(setq layinfo (tblnext "layer" T))

(while(setq layinfo (tblnext "layer"))

(setq layname (cdr (assoc '2 layinfo)))

 

(if (setq ss1 (ssget "X" (list (cons 8 layname))))

(progn

(setq nobj (sslength ss1))

 

(setq long 0)

(setq surf 0)

 

 

(while (> (sslength ss1) 0)

(setq sn (ssname ss1 0))

(setq ent (entget sn))

(setq et (cdr (assoc '0 ent)))

(cond

((= et "LINE") (mtrlines))

((= et "ARC") (mtrlarcs))

((= et "LWPOLYLINE") (mtrplines))

((= et "POLYLINE") (mtrplines))

((= et "SPLINE") (mtrsplines))

((= et "CIRCLE") (mtrcircles))

((= et "ELLIPSE") (mtrellipses))

((or

(/= et "LINE")

(/= et "ARC")

(/= et "LWPOLYLINE")

(/= et "POLYLINE")

(/= et "SPLINE")

(/= et "CIRCLE")

(/= et "ELLIPSE")

)

(ssdel sn ss1)

)

)

)

 

 

(write-line (strcat layname";"(rtos surf 2 2)";"(rtos long 2 2)";"(rtos nobj 2 2)) ow)

)

)

)

(close ow)

(setvar "cmdecho" cmdecho)

(princ)

)

 

YO!

 

Et AutoCAD se tourna vers le dessinateur à bout de nerfs, et lui dit:

"ERREUR FATALE: Unhandled Access Violation Reading 0x5e43dff0 Exception at 5e43dff0h"

Ce à quoi le dessinateur répondit:

"Ca tombe bien je vais en profiter pour écouter un peu de rock qui décrasse les esgourdes"

http://www.facebook.com/pages/Ex-Voto/206836112741129?sk=wall

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é