(gile) Posté(e) le 6 juillet 2008 Partager Posté(e) le 6 juillet 2008 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 More sharing options...
lecrabe Posté(e) le 6 juillet 2008 Partager Posté(e) le 6 juillet 2008 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 More sharing options...
lili2006 Posté(e) le 6 juillet 2008 Partager Posté(e) le 6 juillet 2008 Bonsoir à toutes et tous, En effet, tourne bien ! (y compris celle des ilots à soustraire ou ajouter). Et comment fais t-on ? (lw ou 2d) J'ai déjà posé la question, désolé ;) ,Quelle est la différence entre les deux ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
lili2006 Posté(e) le 6 juillet 2008 Partager Posté(e) le 6 juillet 2008 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 More sharing options...
(gile) Posté(e) le 6 juillet 2008 Auteur Partager Posté(e) le 6 juillet 2008 (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 More sharing options...
lili2006 Posté(e) le 7 juillet 2008 Partager Posté(e) le 7 juillet 2008 Bonjour à toutes et tous, Justement je n'ai pas le courage de le faire. Désolé, en relisant le post je me suis rendu compte que c'est que tu disais,.... ;) Merci encore pour tes compléments d'information. Cette fois ci, je me le note,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 18 juillet 2008 Partager Posté(e) le 18 juillet 2008 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 More sharing options...
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant