brunomu Posté(e) le 21 décembre 2019 Posté(e) le 21 décembre 2019 Bonjour, Mes tribulations professionnelles m'ont tenu éloigné d'AutoCad. J'y reviens en ce moment, avec plaisir, mais j'ai un peu perdu la main et le logiciel a continué à évoluer.J'ai besoin d'obtenir dans un attribut la surface d'une polyligne déjà dessinée.Ou plutôt, j'ai besoin de faire cette opération un grand nombre de fois, car il s'agit d'obtenir les surfaces de chaque logement dans un plan (et à terme, la surface de chaque pièce de chaque logement), et ceci pour plusieurs plans de niveau.J'ai ressorti mes vieux LISP qui faisaient ça, mais ils ne fonctionnent plus dans les versions que j'utilise (ACAD 2015 et 2020 selon les postes de travail).J'ai cherché sur le site mais je ne trouve pas exactement ce que je cherche, càd juste un LISP que je lance pour chaque polyligne pour lui associer un attribut où figurera la surface, sans avoir à redessiner chaque polyligne, ou à régler à chaque fois les paramètres d'un champ (je dessine en cm et je veux afficher les surfaces en m²). Quelqu'un pourrait-il m'aider ? Merci !!!
Steven Posté(e) le 21 décembre 2019 Posté(e) le 21 décembre 2019 Salut,Lel isp TotalArea de Gile devrait faire ton bonheur. Il fonctionne sur les versions 2015 et 2020. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
didier Posté(e) le 21 décembre 2019 Posté(e) le 21 décembre 2019 Coucou Si on parle de superficie de logement il va falloir gérer des "trous" à soustraire de l'aire de la polyligne extérieureDans ce cas de figure comment faire ? Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
bonuscad Posté(e) le 22 décembre 2019 Posté(e) le 22 décembre 2019 juste un LISP que je lance pour chaque polyligne pour lui associer un attribut où figurera la surface, sans avoir à redessiner chaque polyligne, ou à régler à chaque fois les paramètres d'un champ (je dessine en cm et je veux afficher les surfaces en m²). Ce que je peux te proposer écrit automatiquement un champ dynamique (lié à la polyligne ou autre objet fermé)(vl-load-com) (defun c:surf_curve-closed ( / AcDoc Space js nw_obj ename ent_text dxf_ent key) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (princ "\nSélectionnez un objet fermé") (while (setq js (ssget "_+.:E:S" '( (-4 . "<OR") (-4 . "<AND") (0 . "*POLYLINE") (-4 . "<AND") (-4 . "<NOT") (-4 . "&") (70 . 120) (-4 . "NOT>") (-4 . "&") (70 . 1) (-4 . "AND>") (-4 . "AND>") (0 . "CIRCLE") (-4 . "<AND") (0 . "SPLINE") (-4 . "&") (70 . 1) (-4 . "AND>") (-4 . "<AND") (0 . "ELLIPSE") (41 . 0.0) (42 . 6.283185307179586) (-4 . "AND>") (-4 . "OR>") ) ) ) (if (zerop (getvar "USERR1")) (setvar "USERR1" (/ (getvar "VIEWSIZE") 75.0))) (setq nw_obj (vla-addMtext Space (vlax-3d-point (trans (getvar "VIEWCTR") 1 0)) 0.0 (strcat "S="(rtos (vlax-get-property (setq ename (vlax-ename->vla-object (ssname js 0))) "Area") 2 2) "m²") ) ) (mapcar '(lambda (pr val) (vlax-put nw_obj pr val) ) (list 'AttachmentPoint 'Height 'DrawingDirection 'StyleName 'Layer 'Rotation 'BackgroundFill 'Color) (list 1 (getvar "USERR1") 5 (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 -1 250) ) (setq ent_text (entlast) dxf_ent (entget ent_text) dxf_ent (subst (cons 90 1) (assoc 90 dxf_ent) dxf_ent) dxf_ent (subst (cons 63 255) (assoc 63 dxf_ent) dxf_ent) ) (entmod dxf_ent) (while (and (setq key (grread T 4 0)) (/= (car key) 3)) (cond ((eq (car key) 5) (setq dxf_ent (subst (cons 10 (trans (cadr key) 1 0)) (assoc 10 dxf_ent) dxf_ent)) (entmod dxf_ent) ) ) ) (vlax-put (vlax-ename->vla-object (entlast)) 'TextString (strcat "{\\fArial|b0|i0|c0|p34;" "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (itoa (vla-get-ObjectID ename)) ">%).Area \\f \"%lu2%pr2%ps[s=," "m²]\">%" ) ) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
brunomu Posté(e) le 28 décembre 2019 Auteur Posté(e) le 28 décembre 2019 Coucou Si on parle de superficie de logement il va falloir gérer des "trous" à soustraire de l'aire de la polyligne extérieureDans ce cas de figure comment faire ? Amicalement Bonjour, Merci pour ta réponse, Pour l'instant, mes plans en sont à l'esquisse : une polyligne me suffit.Au pire, si je dois vraiment gérer des "trous" (par exemple pour une trémie d'escalier au niveau haut d'un duplex), je peux faire le contour de la trémie et le rattacher au contour principal par un petit "couloir" d'1 ou 2 cm de large) – technique éprouvée et sans incidence sur le résultat final.
brunomu Posté(e) le 28 décembre 2019 Auteur Posté(e) le 28 décembre 2019 Salut,Lel isp TotalArea de Gile devrait faire ton bonheur. Il fonctionne sur les versions 2015 et 2020. Bonjour, Merci pour le tuyau. Effectivement, ça fait très bien le job (moyennant un petit temps de prise en main). J'ai juste un souci d'implémentation.Habituellement, lorsque je veux utiliser un nouveau LISP, je le colle à la fin d'un fichier unique qui les rassemble tous, pour éviter d'avoir une multitude de petits fichiers LISP à charger.Mais avec celui-là, ça ne marche pas. Je dois le charger à part.Tu aurais une explication ? Merci en tous cas.
brunomu Posté(e) le 28 décembre 2019 Auteur Posté(e) le 28 décembre 2019 Ce que je peux te proposer écrit automatiquement un champ dynamique (lié à la polyligne ou autre objet fermé) Bonjour, Merci pour ta réponse et l'effort que tu as fait pour écrire le LISP.En fait, le LISP de Gile indiqué par Steven me convient bien.J'ai quand même testé le tien. Pour une raison que j'ignore (limitation d'AutoCad ou paramètrage inconnu de moi) le champ ne se met pas à jour dès qu'on modifie la polyligne, je dois faire un REGEN.De même, il faut bidouiller le format du champ et j'ai un peu oublié avec les années...Donc pour l'instant j'en reste au LISP de Gile.Mais merci encore.
(gile) Posté(e) le 28 décembre 2019 Posté(e) le 28 décembre 2019 J'ai juste un souci d'implémentation.Habituellement, lorsque je veux utiliser un nouveau LISP, je le colle à la fin d'un fichier unique qui les rassemble tous, pour éviter d'avoir une multitude de petits fichiers LISP à charger.Mais avec celui-là, ça ne marche pas. Je dois le charger à part.Tu aurais une explication ?Si tu colles bien tout le contenu du fichier (qui contient plusieurs routines), tu ne devrais pas avoir de souci. Pour une raison que j'ignore (limitation d'AutoCad ou paramètrage inconnu de moi) le champ ne se met pas à jour dès qu'on modifie la polyligne, je dois faire un REGEN.C'est le fonctionnement normal des champs avec AutoCAD. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
rebcao Posté(e) le 29 décembre 2019 Posté(e) le 29 décembre 2019 Bonjour, Pour les "trous" les poteaux, etc. Rien de plus simple, il suffit de travailler avec des REGIONS au lieu de polylignes ! Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
rebcao Posté(e) le 29 décembre 2019 Posté(e) le 29 décembre 2019 Comme les REGIONS sont des objets trop complexes à analyser, j'avais écrit ce Ch'Ti programme : (setvar "CMDECHO" 1)(defun c:surf() (cond ( (= (getvar "INSUNITS") 4) (setq unite 1000000 ) ) ( (= (getvar "INSUNITS") 5) (setq unite 10000 ) ) ( (= (getvar "INSUNITS") 6) (setq unite 1 ) ) ( (= (getvar "INSUNITS") 0) (prompt "\nDessin SANS UNITES !!! Il faut corriger les unités...") (exit) ) );cond (command "_VIEW" "_SA" "VUE_ORG_SURF") (prompt "\Sélectionner les objets pour le calcul de surface...") (setq ENT (ssget) NUM 0 );setq (if ENT (setq OBJ (ssname ENT NUM) ) );if (while OBJ (command "_zoom" "_OB" OBJ "") (command "_AREA" "_OB" OBJ) (setq SURF (/ (getvar "AREA") UNITE) CENTRE (getvar "VIEWCTR") );setq (command "_-TEXT" "_J" "_C" CENTRE 0.0 (strcat (rtos SURF 2 2) " m²") ) (setq NUM (+ NUM 1) OBJ (ssname ENT NUM) );setq );while (command "_VIEW" "_RE" "VUE_ORG_SURF")(princ));defun;;; ----------------------------(defun *error*(err) (princ));defun;;; --------------------- fin prog -------------------------------------------(prompt "\nTaper SURF pour inscrire la surface au centre des OBJETS sélectionnés...")(princ) Il suffira d'adapter la création du texte par l'insertion d'un bloc + ATTRIBUTS... Voici le fichier source... Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
Steven Posté(e) le 29 décembre 2019 Posté(e) le 29 décembre 2019 Pas mail, ton lisp, Christian Il fait comme TotalArea mais sous forme de texte.Le soucis avec les régions, c'est qu'elles sont figées et on ne peut pas les modifier en cas de modification de superficie Il faudrait une région modifiable comme les espaces sur AutoCAD Architecture quand ils sont fait en polygone. Steven________________________________________ Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD. Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD. En rêve; AutoCAD sous Linux.
lecrabe Posté(e) le 29 décembre 2019 Posté(e) le 29 décembre 2019 Hello Ou les MPolygons de MAP/CIVIL !? LA SANTE, Bye, lecrabe "triste"Que La Force soit avec Vous ! Autodesk Expert Elite Team
rebcao Posté(e) le 29 décembre 2019 Posté(e) le 29 décembre 2019 Steven, j'utilise très souvent les REGIONS... La méthode de travail est différente ! Jamais on ne décomposera une REGION, il faut utiliser les commandes UNION et SOUSTRACTION... et plus rarement INTERSECTION... Christian Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)
DenisHen Posté(e) le 30 avril 2021 Posté(e) le 30 avril 2021 Bonjour à la communauté. Je cherche à faire un peu la même chose. Mais juste cliquer une polyligne pour n'avoir que sa surface... J'ai vu le super truc qu'à fait (gile) avec TotalArea, mais je n'ai pas besoin de tant. Je ne sélectionne qu'une et unique polyligne à la fois et n'ai pas besoin de bloc, juste un texte unique. J'ai commencé un code que je ne posterais pas, car encore à l'état de brouillon... Si quelqu'un à la solution de récupérer l'aire d'une polyligne après sa sélection, je suis preneur. Bonne soirée à toutes et à tous. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Salut, En vla, tu fais un vlax-dump-object et tu regardes si une des propriétés correspond à ce que tu cherches, tu utilises ensuite cette propriété avec : (vlax-get vla-obj "NomDeLaPropriete") ou (vla-get-NomDeLaPropriete vla-obj). En "our AutoLISP", tu fais un dumpallproperties et tu regardes si une des propriétés correspond à ce que tu cherches, tu utilises ensuite cette propriété avec : (getpropertyvalue ename "NomDeLaPropriete"). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Bonjour (gile) et merci pour ton aide. J'ai essayé plusieurs trucs mais je n'obtient rien. Je te mets le détail de mes essais, je ne vois pas où je me trompe : (setq ename (car (entsel "\nSelectionner un contour : "))) (princ "\nAire=") (princ (vla-get-area ename)) (princ (vlax-get ename "area")) (princ (getpropertyvalue ename "area")) Je n'ai aucune réponse, même pas un nil... Je vais chercher une autre solution si je n'y arrive pas. Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 L'argument pour les fonctions vla ou vlax doit-être de type vla-object et pas de type ename. Les noms des propriétés sont sensibles à la casse "area" est différent de "Area". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 J'ai donc essayé de faire de ma sélection un objet vla, mais je ne sais pas si j'ai bien compris le truc : (setq ename (car (entsel "\nSelectionner un contour : "))) (setq aire (vlax-get-property (vlax-ename-> vla-object ename) 'area)) (princ "\nAire=") (princ aire) Mais j'ai le même résultat, rien... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 J'ai dit une bêtise, les noms des propriétés ne sont pas sensibles à la casse. 10 minutes ago, DenisHen said: (setq ename (car (entsel "\nSelectionner un contour : "))) (setq aire (vlax-get-property (vlax-ename-> vla-object ename) 'area)) (princ "\nAire=") (princ aire) Mais j'ai le même résultat, rien... Comment fais-tu tes essais, en ligne commande ou dans la console de l'éditeur Visual LISP ? Que vois-tu quand tu fais : (setq ename (car (entsel "\nSélectionner un coutour : "))) ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Je fais mes testes généralement après le chargement du Lisp dans AutoCAD, de cette façon, la Console me dit immédiatement si le code est chargé, donc correcte. Mais pour les codes courts, je le fais à la Console, là, j'ai ça : _$(setq ename (car (entsel "\nSélectionner un coutour : "))) nil <Nom d'entité: 255e093c900> _$ Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 J'ai oublié de précisé que j'ai bien (vl-load-com) de "chargé"... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Et si ensuite, toujours dans la console, tu fais : (getpropertyvalue ename "Area") ? Ou (setq vla-obj (vlax-ename->vla-object ename)) ? puis (vla-get-Area vla-obj) ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Effectivement, dans la Console, ça à l'air de fonctionner : _$(setq ename (car (entsel "\nSélectionner un coutour : "))) nil <Nom d'entité: 255e093c900> _$ _$ (getpropertyvalue ename "Area") 4909.63 _$ Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Ça marche alors... Je ne comprends pas où est le problème. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 1 mai 2021 Posté(e) le 1 mai 2021 Just now, (gile) said: Ça marche alors... Je ne comprends pas où est le problème. Ben moi non plus ... Dans la Console, c'est OK, dans AutoCAD, rien... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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