Aller au contenu

Surfaces et périmètres cumulés


(gile)

Messages recommandés

Salut,

 

Le Décapode (lecrabe) m'a demandé si je pouvais modifier une routine de calcul de surface et périmètres cumulés pour y ajouter les entités MPOLYGON non accessible avec la commande AIRE (_AREA).

 

J'ai utilisé Visual LISP parce que je n'ai pas le courage d'éplucher la liste DXF d'un MPOLYGON pour en calculer la surface et le périmètre (y compris celle des ilots à soustraire ou ajouter).

J'en ai profité pour rajouter les régions (même propriétés que MPOLYGON) et peaufiner le filtre de sélection.

 

La routine fonctionne donc avec les cercles, ellipses fermées, polylignes (lw ou 2d) fermées, mpolygons, régions et spline palnes fermées.

 

;;;    AIRE_OBJ.LSP for AUTOCAD R13, R14, R15 (OUPS ! 2000) - 04/2000
;;;    ZTOTM ou ZTOTCM.LSP  -  Copyright (C) 2000 by H LORIOT
;;;    ZTOTM.LSP et Fonction ZTOTM (Because DWG en METRE)
;;;
;;;    H LORIOT PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
;;;    H LORIOT SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
;;;    MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. H LORIOT.
;;;    DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
;;;    UNINTERRUPTED OR ERROR FREE.
;;;___________________________________________________________________
;;;
;;; Modification par Patrice BRAUD
;;; +SPLINE, +ELLIPSE
;;;
;;; Modification par Gilles Chanteau (gile)
;;; Visual LISP, +MPOLYGON, + REGION.

(defun c:ztotm (/ ss cnt area len)
 (vl-load-com)
 (setq    cnt  0
   area 0.0
   len  0.0
 )
 (if (ssget
   (list
     '(-4 . "[b]      '(0 . "CIRCLE")
     '(-4 . "[b]      '(0 . "ELLIPSE")
     '(41 . 0.0)
     (cons 42 (* 2 pi))
     '(-4 . "AND>")
     '(-4 . "[b]      '(0 . "LWPOLYLINE")
     '(-4 . "&")
     '(70 . 1)
     '(-4 . "AND>")
     '(0 . "MPOLYGON")
     '(-4 . "[b]      '(0 . "POLYLINE")
     '(-4 . "&")
     '(70 . 1)
     '(-4 . "[b]      '(70 . 8)
     '(-4 . "AND>")
     '(0 . "REGION")
     '(-4 . "[b]      '(0 . "SPLINE")
     '(-4 . "&")
     '(70 . 9)
     '(-4 . "AND>")
     '(-4 . "OR>")
   )
     )
   (progn
     (vlax-for    obj (setq ss (vla-get-ActiveSelectionSet
                  (vla-get-ActiveDocument
                (vlax-get-acad-object)
                  )
                )
           )
   (setq cnt  (1+ cnt)
         area (+ area (vla-get-area obj))
         len  (+ len
             (if (member (vla-get-ObjectName obj)
                 '("AcDbMPolygon" "AcDbRegion")
             )
           (vla-get-Perimeter obj)
           (vlax-curve-getDistAtParam
             obj
             (vlax-curve-getEndParam obj)
           )
             )
          )
   )
     )
     (princ (strcat "\n"
            "TOTAUX -Surface: "
            (rtos area)
            " -Périmètre: "
            (rtos len)
            " -Objets: "
            (itoa cnt)
        )
     )
     (vla-delete ss)
   )
   (prompt "\n*** Rien de Valable ")
 )
 (princ)
)

(princ "\n==> ZTOTM ")
(princ)

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

Lien vers le commentaire
Partager sur d’autres sites

 

Hello Gilles

 

Comme d'hab, c PARFAIT ! :)

 

Je te remercie pour cette amélioration de ma "bonne vieille" routine préférée ZTOTM.lsp

qui va maintenant traiter non seulement les fameux MPOLYGONs de AutoCAD MAP (ou CIVIL) mais aussi les Régions

 

Cette routine ne traite pas les ARCs et les LIGNEs, c fait EXPRES !! :P

 

Les résultats sont donnés en Unités Graphiques ce qui est parfait si le dessin est en METRE !

 

Pour un dessin en CM, il faut diviser la surface totale par 10000 pour obtenir un résultat en M²

et par 100 le périmètre pour obtenir un résultat en M :exclam:

 

Encore Merci Gilles, Le Decapode

 

PS: C'est FAB qui va être content et bien d'autres ...

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Avec la V2009, on a la possibilité d' avoir l'info dans l'éditeur de propriété flottant (je ne sais pas encore si c'est le vrai nom !) =>

 

http://images4.hiboox.com/images/2708/b24e8ec57c2992539106fa29dde18bea.jpg

 

Ce qui donne =>

 

http://images4.hiboox.com/images/2708/cbdff94beeb8877489658905cae7e59f.jpg

 

Idem pour les polylignes, Spline (aire uniquement),ligne (longueur uniquement), hachures (avec une option aire cumulée), arc & cercle !

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

(y compris celle des ilots à soustraire ou ajouter).

 

Et comment fais t-on ?

 

Justement je n'ai pas le courage de le faire.

Les données DXF des mpolygons sont assez semblable à celle des hachures : liste de sommets du ou des contours si la hachure est faite par spécification d'un point et/ou données spécifiques aux entités sélectionnées si la hachure est faite à partir d'une sélection d'entité. Calculer la surface et le périmètre supposerait de traiter toutes ces données de soustraire les surfaces des ilots et de rajouter celles des ilots qui peuvent se trouver à l'intérieur d'autres ilots.

C'est ce qu'il aurait fallu faire pour calculer la surface d'un mpolygon en AutoLISP (la commande aire ne fonction pas sur ce type d'entité avec AutoCAD de base.

Comme Visual LISP fait tout ça très bien, j'ai écrit le code en Visual LISP (lecrabe aurait préféré AutoLISP "pur")

 

Par exemple à la surface du rectangle il faut ajouter ou soustraire les surfaces des ilots pour obtenir la surface du mpolygon (ou de la hachure).

http://img90.imageshack.us/img90/9514/airejf6.png

 

(lw ou 2d)

 

J'ai déjà posé la question, désolé ;) ,

Quelle est la différence entre les deux ?

 

Les polylignes 2d sont du type POLYLINE comme les polylignes 3d ou les maillages. Ce sont des entités complexes (comme les blocs) à savoir des entités composées de sous-entités (VERTEX et SEQEND).

Les polyliggnes optimisées : LWPOLYLINE (LW pour Light Weight) sont les "nouvelles" polylignes (apparues avant que je ne découvre AutoCAD). Ce sont des entités simples, elles nécessitent moins de mémoire et sont plus facile à traiter en programmation.

 

La création de polylignes 2d ou lw avec la commande POLYLIGN (_PLINE) dépend de la valeur de la variable PLINETYPE.

On peut convertir les polylignes d'un type à l'autre avec les commande CONVERT et CONVERTPOLY.

Quand on "spline" ou qu'on "lisse" une lwpolyline avec la commande PEDIT elle est transformée en polyligne 2d.

 

 

 

[Edité le 7/7/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

 

Hello

 

Attention: Gilles a légèrement modifié ma routine Lisp d'origine pour améliorer les filtres :)

 

MAIS MAIS il a rajouté un test sur le flag (Polyligne close 70) et donc maintenant

la routine ne traite pas les polylignes ouvertes !!

(Dommage pour cumuler la longueur des polylignes de Réseaux par exemple)

 

Si vous voulez traiter AUSSI les polylignes ouvertes, il faut COMMENTER

les 2 lignes suivantes (à 2 endroits) dans la nouvelle routine proposée par Gilles !

 

;;; '(-4 . "&")

;;; '(70 . 1)

 

Qu'on se le dise, le Decapode

 

PS: Encore merci à Gilles pour cette version améliorée qui traite les MPOLYGONs :cool:

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

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é