Aller au contenu

LISP pour récupérer dans un texte la surface d'une polyligne


Messages recommandés

Posté(e)
1 minute ago, DenisHen said:

Ben moi non plus ... Dans la Console, c'est OK, dans AutoCAD, rien...

Rien, si tu fais la même chose à la ligne de commande ? (dans tous les cas, j'ai toujours recommandé d'utiliser l'éditeur pour développer en LISP).

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

  • Réponses 55
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Posté(e)

Bonjour,

 

La fonction 

(vlax-ename-> vla-object ename)

s'écrit sans l'espace entre le signe > et le mot vla-object

Donc ton code fonctionne très bien une fois l'espace enlevé

  (setq ename (car (entsel "\nSelectionner un contour : ")))
  (setq aire (vlax-get-property (vlax-ename->vla-object ename) 'area))
  (princ "\nAire=")
  (princ aire)

 

Olivier

Posté(e)

Bonsoir à tous.

Bien vu Olivier, c'était bien là que résidait le problème, maintenant, ça fonctionne parfaitement...

Merci à vous deux pour votre aide...

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)

Posté(e)
propriété 
.Area en VBA ;-)
Dim returnObj As AcadEntity
ThisDrawing.Utility.GetEntity returnObj, basePnt, "Selectionné un objet"
Msgbox "Surface de la polyligne : " & returnObj.Area

 

Posté(e)

Je n'ai pas eu ce message, c'est bien là qu'est le problème...
Comme tu peux le voir dans mes messages...

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)

Posté(e)

Salut didier.

Je trouve que c'est une super idée. J'ai hâte de voir ces pages...

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)

Posté(e)

Dans le screencast de @Olivier Eckmann , on peut voir l'erreur dès que le code est collé dans la fenêtre de l'éditeur grâce à la coloration syntaxique. Les fonctions natives doivent apparaître en bleu, si ce n'est pas le cas, c'est qu'il y a une faute d'orthographe dans le nom de la fonction.

PS : je pense que ton message ci-dessus n'est pas dans le bon sujet...

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

Posté(e)
On 30/04/2021 at 22:58, DenisHen said:

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...

Je réalise un truc tout à coup. C'est bien le même @DenisHenqui a répondu à ce message ?

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

Posté(e)
Quote

Je me permet de "dévier" un peu le post d'origine pour demander à @bonuscad, suite à cette réponse si il n'avait pas fait non plus la même routine pour les périmètres en champ ? Il me semble bien que si, que j'avais même testé mais impossible de retrouver le post en question...

Merci d'avance,

lili2006, je ne sais pas à quelle routine tu fais allusion, j'en ai publié tant et plus...

Celle que je pense serait celle-ci, bien qu'elle fasse le cumul (en aire ou longueur), elle peut être utilisée pour un objet unique.

 

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

Posté(e)
On 02/05/2021 at 20:55, (gile) said:

Je réalise un truc tout à coup. C'est bien le même @DenisHenqui a répondu à ce message ?

Salut (gile), oui, c'est bien moi, mais je fais tellement de petits bouts de codes pour tellement de gens que je ne me souvenais pas de celui-ci.
Par contre, j'applaudis ta mémoire, franchement, j'aimerais avoir la même...

Le principal "problème" est : pourquoi je n'ai pas retrouvé ce poste avant ma question...?

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)

Posté(e)

Sauf erreur ou incompréhension de ma part, TotalArea ne prend pas en compte les cloisons compris dans la PO, du coup, cela devient pbtique quand on a différent type de surface à calculer.

Posté(e)

TotalArea prend en compte l'aire de l'objet sélectionné (polyligne, région, hachure, mpolygon, ...). Le LISP ne sait pas ce qu'est "une cloison".

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

Posté(e)

Bonjour @drault

Ce n'est pas la première fois que je lis PO dans vos messages sans savoir de quoi il est question.
Ce serait bien d'expliciter ou d'utiliser le vocabulaire AutoCAD commun à tous.
J'ai cru comprendre qu'il s'agissait de sélection d'un point pour tracer un contour, mais les lettres utilisées P et O me font douter.

Amicalement

Posté(e)
14 hours ago, (gile) said:

TotalArea prend en compte l'aire de l'objet sélectionné (polyligne, région, hachure, mpolygon, ...). Le LISP ne sait pas ce qu'est "une cloison".

Effectivement, merci.

Peu utilisateur de région, je reconnaissais pas cette commande.

Je vais voir ce qu'elle permet.

13 hours ago, didier said:

Bonjour @drault

Ce n'est pas la première fois que je lis PO dans vos messages sans savoir de quoi il est question.
Ce serait bien d'expliciter ou d'utiliser le vocabulaire AutoCAD commun à tous.
J'ai cru comprendre qu'il s'agissait de sélection d'un point pour tracer un contour, mais les lettres utilisées P et O me font douter.

Amicalement

PO pour le raccourci natif d'Autocad, tout du moins, tous ceux que j'ai utilisé jusqu'à maintenant mais peut-être faudrait-il, effectivement, que je revienne à un langage plus usité de tous.

Posté(e)

Bonjour @drault

Ah ! D'accord une polyligne, franchement j'y étais pas.
Ok le raccourci est bel et bien PO, mais là dans les discussions j'avais pas capté du tout qu'on parlait de l'entité polyligne.
Ce post est assez confus maintenant, ce serait bien d'en ouvrir un neuf avec une pièce jointe pour qu'on reparte dur de bonnes bases.

Amicalement

 

Posté(e)

Bonjour à toutes et tous,

 

Salut @bonuscad,

 

Quote

Celle que je pense serait celle-ci, bien qu'elle fasse le cumul (en aire ou longueur), elle peut être utilisée pour un objet unique.

C'est sur, tu en a  publié tellement,..

Je me rappelle avoir échangé sur le post de la routine en question,..

Je viens de tester "cumul_measure2field", pas mal du tout !

Elle semble ne pas fonctionner sur les blocs dyns après étirement mais pour moi ce n'est pas un pb,..

Merci de ta réponse Bonuscad,🙃

 

 

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)
Quote

En réponse en mp faite par @drault

J'ai donc amélioré le lisp proposé dans ce fil.

Il permet dorénavant de choisir son unité de départ supposé du dessin, de faire une conversion du résultat dans une autre unité et de choisir la précision du résultat.

Par exemple on a réalisé un dessin en mm mais on souhaite avoir le résultat de la surface en cm² (sans changer l'unité de départ) avec une précision de 6 chiffres après la virgule.

Ces paramètres restent valables tant qu'on reste dans la boucle du choix d'un objet fermé, si on relance la procédure il faudra redéfinir les options.

Je suis resté dans le système métrique uniquement.

(vl-load-com)
(defun c:surf_curve-closed ( / AcDoc Space unite u_source u_target factor prec 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)
    )
  )
  (initget "KM M CM MM")
  (setq unite (getkword "\nChoisir l'unité source utilisé dans le dessin [KM/M/CM/MM] <M>: "))
  (if (not unite) (setq unite "M"))
  (setq u_source
    (cond
      ((eq unite "KM") "sq_km")
      ((eq unite "M") "sq_m")
      ((eq unite "CM") "sq_cm")
      ((eq unite "MM") "sq_mm")
    )
  )
  (initget "KM M CM MM")
  (setq unite (getkword "\nChoisir l'unité cible à utiliser pour le résultat [KM/M/CM/MM] <M>: "))
  (if (not unite) (setq unite "M"))
  (setq u_target
    (cond
      ((eq unite "KM") "sq_km")
      ((eq unite "M") "sq_m")
      ((eq unite "CM") "sq_cm")
      ((eq unite "MM") "sq_mm")
    )
  )
  (setq factor (cvunit 1 u_source u_target))
  (initget "0 1 2 3 4 5 6 7 8")
  (setq prec (getkword "\nPrécision du résultat [0/1/2/3/4/5/6/7/8] <2>: "))
  (if (not prec) (setq prec "2"))
  (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 (* factor (vlax-get-property (setq ename (vlax-ename->vla-object (ssname js 0))) "Area")) 2 (atoi prec)) (strcase unite T) "²")
      )
    )
    (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%pr"
        prec
        "%ps[S=,"
        (strcase unite T)
        "²]\%ct8["
        (rtos factor 2 12)
        "]\">%"
      )
    )
  )
  (prin1)
)

 

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

Posté(e)
On 08/05/2021 at 18:30, drault said:

Sauf erreur ou incompréhension de ma part, TotalArea ne prend pas en compte les cloisons compris dans la PO, du coup, cela devient pbtique quand on a différent type de surface à calculer.

Il semblerait que tu souhaites déduire la surface des cloisons qui seraient à l'intérieur d'un local. C'est bien çà ?

AutoCAD est un logiciel de dessin technique (DAO) et non un logiciel de conception (CAO).

Sur AutoCAD, lorsqu'on dessine des lignes ou des polylignes pour "symboliser" des cloisons ou murs, ou n'importe quoi d'autre, AutoCAD ne sait pas que ce que représentent les lignes ou les poylignes. Pour lui, ce sont des additions de lignes ou de polylignes.

Si tu souhaites avoir des objets reconnus en tant que murs, cloisons ou autre, il faut te diriger vers un logiciel de CAO.

Si tu préfères rester dans un environnement Autocadien, alors AutoCAD Architecture te conviendrait plus mais il faudra que tu penses à travailler un peu différemment que sur AutoCAD car même si dans AutoCAD Architecture, il y a AutoCAD, il n'en reste pas moins que si tu souhaites travailler avec les objets AEC d'AutoCAD Architecture, il ne faudra pas essayer de ne faire que de l'AutoCAD, sinon, tu ne pourras pas utiliser le logiciel en tant que tel.

Aussi, tu n'auras plus besoins de Totalarea du fait qu'AutoCAD Architecture pourra indiquer les surfaces, et les modifier dynamiquement.

CACULE-ESPACE.gif

Si le fait de changer d'environnement de travail et de travailler différemment que sur AutoCAD ne te dérange pas, alors peut-être devrais-tu de diriger vers Revit.

 

CALCUL-PIECE.gif

Si tu as déjà une licence AutoCAD, tu peux t'installer et essayer AutoCAD Architecure sans surcoût du fait que qu'AutoCAD Architecure fait partie des Toolset.

Si tu n'as qu'une licence AutoCAD et que tu souhaiterais passer à Revit, alors il y a aura un surcoût pout éccéder la Collection AEC.

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.

Posté(e)

Steven,

 

merci pour le point, très utile pour recadrer le regard porté sur la portée de mon travail.

Je travaille principalement pour des cabinets qui utilisent autocad. J'ai suivi une formation REVIT mais pas utile pour le moment

Actuellement autocad map 3d, donc j'essaie toujours de garder en tête un usage entre les différents logiciels autocadien.

Du coup, je modifie ma question précédente, car j'ai vu que total area reconnait les hachures, donc ça me va, du moment où je marche par type de surface (carrez etc...) selon des calques.

 

 

Posté(e)

Si tu préfères rester dans un univers Autocadien, j'avais fait une vidéo pour montrer un exemple de ce qu'on peut faire avec AutoCAD Architecure et le calcul de surfaces.

Peut-être que ça pourrait t'intéresser.

 

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.

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é