Aller au contenu

Aires automatiques d’un lot + Surfaces (ACAD 2024/25)


Messages recommandés

Posté(e)

Bonjour a tous 

existe-t-il un lisp qui calcule automatiquement des aires en lot et intègre les surfaces a l'intérieur des lots 

merci pour votre retour

Scout

Posté(e)

Bonjour @Scout

Je comprends qu'un "lot" est une polyligne close, est-ce bien le cas ?
Un exemple de dessin serait le bienvenu, dans ce dessin, vous préciserez ce que vous appelez un "lot", dans quel calque il faut interroger les entités.

Comme toujours, nous avons besoin d'aide pour vous aider.
En posant "simplement" la question comme si vous parliez à ChatGpt les humains que nous sommes ne sont pas certains de répondre correctement.
Grâce à ce dessin, nous connaitrons vos unités de dessin, l'échelle des textes à rendre, enfin… tout ce qui est nécessaire pour faire une réponse à propos.

Amicalement

PS : j'ai supprimé le message en double.

Posté(e)

Hello

Voici un autre VLisp "PolyArea" de Gilles fort pratique qui permet la selection de N Objets 2D 

POLYAREA traite: ARC,CIRCLE,ELLIPSE,POLYLINE 2D,ELLIPSE,SPLINE,MPOLYGON,REGION

et qui genere pour chacun un champ dynamique avec 1 decimale du genre : 23.4m² 

;; ------------------------------------------------------------------------------------- 
;; SVP changer la Variable System       TEXTSIZE  AVANT d'executer la Routine ! 
;; Car la routine utilise la valeur de  TEXTSIZE  comme Hauteur de MTEXT par defaut ... 
;; ------------------------------------------------------------------------------------- 

Bye, lecrabe 

 

 
;; 
;; PolyArea par GC - 03/03/2018 
;; 
;; Micro-Modif par Patrice B. 
;; 
;; ------------------------------------------------------------------------------------- 
;; SVP changer la Variable System       TEXTSIZE  AVANT d'executer la Routine ! 
;; Car la routine utilise la valeur de  TEXTSIZE  comme Hauteur de MTEXT par defaut ... 
;; ------------------------------------------------------------------------------------- 
;; 
;; J'ai revu les codes, le probleme venait de la methode utilisee pour placer le texte/champ sur le barycentre de la polyligne. 
;; Cette methode ne fonctionnait qu'avec des polylignes.
;; 
;; J'ai change cela. Le texte est desormais place au centre de la boundingbox de l'entite. 
;; J'ai aussi revu les filtres de selection qui ne devraient pas etre tout à fait les memes pour l'aire et la longueur. 
;; 
;; Pour l'aire, je te laisse choisir entre uniquement les objets fermes, ou pas.
;; 
;; Pour les longueurs, les champs sont differents pour les cercles (Circumference), les regions et mpolygons (Perimeter) 
;; et n'existent pas pour les ELLIPSEs et SPLINEs, j'ai donc remplace le champ par un MTEXT simple qui affiche la longueur.
;; 
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Area \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Length \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Perimeter \f "%lu2">%
;; %<\AcObjProp Object(%<\_ObjId 1181647088>%).Circumference \f "%lu2">%
;; 
;; Liste sur ELLIPSE --> Aire & Circonference ?? 
;; Liste sur SPLINE  --> Aire & Circonference ??
;; 
;; --- Interrogation Entite/Objet en Lisp ---
;; (entget (car (entsel)) '("*"))
;; 

(defun c:PolyArea (/ *error* filter ss acSpace minPt maxPt pt id str txt)
  (vl-load-com)
  (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))))
  (or *util* (setq *util* (vla-get-Utility *acdoc*)))
  (defun *error* (msg)
    (and msg
	 (/= msg "Fonction annulée")
	 (/= msg "Function cancelled")
	 (princ (strcat "Erreur: " msg))
    )
    (vla-EndUndomark *acdoc*)
    (princ)
  )

  ;; entités fermées
  ;|
  (setq	filter (list
		 '(-4 . "<OR")
		 '(0 . "CIRCLE,MPOLYGON,REGION")
		 '(-4 . "<AND")
		 '(0 . "ELLIPSE")
		 '(41 . 0.0)
		 (cons 42 (* 2 pi))
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "LWPOLYLINE")
		 '(-4 . "&")
		 '(70 . 1)
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "POLYLINE")
		 '(-4 . "&")
		 '(70 . 1)
		 '(-4 . "<NOT")
		 '(-4 . "&")
		 '(70 . 120)
		 '(-4 . "NOT>")
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "SPLINE")
		 '(-4 . "&")
		 '(70 . 9)
		 '(-4 . "AND>")
		 '(-4 . "OR>")
	       )
  )
  |;

  ;; entités fermées ou ouvertes
  (setq	filter (list
		 '(-4 . "<OR")
		 '(0 . "ARC,CIRCLE,LWPOLYLINE,MPOLYGON,REGION,ELLIPSE")
		 '(-4 . "<AND")
		 '(0 . "POLYLINE")
		 '(-4 . "<NOT")
		 '(-4 . "&")
		 '(70 . 120)
		 '(-4 . "NOT>")
		 '(-4 . "AND>")
		 '(-4 . "<AND")
		 '(0 . "SPLINE")
		 '(-4 . "&")
		 '(70 . 8)
		 '(-4 . "AND>")
		 '(-4 . "OR>"))
  ) 
 

  (prompt "Hauteur courante de MTEXT - Voir la Variable System TEXTSIZE ... \n"  ) 

  (prompt "\nPOLYAREA traite: ARC,CIRCLE,ELLIPSE,POLYLINE 2D,ELLIPSE,SPLINE,MPOLYGON,REGION \nSelectionnez les objets ou Entree pour tous ") 

  (if (or (ssget filter)
	  (ssget "_X" (cons (cons 410 (getvar 'ctab)) filter))
      )
    (progn
      (vla-StartUndomark *acdoc*)
      (setq acSpace (vla-get-Block (vla-get-ActiveLayout *acdoc*)))
      (vlax-for	obj (setq ss (vla-get-ActiveSelectionSet *acdoc*))
	(vla-GetBoundingBox obj 'minPt 'maxPt)
	(setq pt  (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.))
			  (vlax-safearray->list minPt)
			  (vlax-safearray->list maxPt)
		  )
	      id  (vla-GetObjectIdString *util* obj :vlax-false)
	      str (strcat
		    "%<\\AcObjProp Object(%<\\_ObjId "
		    id
		    ">%).Area \\f \"%lu2%pr1%ps[,m²]%\">%"
		  )
	      txt (vla-addMText acSpace (vlax-3d-point pt) 0. str)
	)
	(vla-put-AttachmentPoint txt acAttachmentPointMiddleCenter)
	(vla-put-insertionPoint txt (vlax-3d-point pt))
      )
      (vla-Delete ss)
    )
  )
  (*error* nil)
)

 

Autodesk Expert Elite Team

Posté(e)

@didier

un "lot" en terme de géomètre c'est un découpage de parcelle en vue de détacher 2 ou plusieurs surfaces (lotissement)

il est bon en effet en terme de dessin de créer des poly fermées, mais chacun sa méthode de travail... 

Utilisateur mécontent de mensura 😡

Posté(e)

Bonjour @Flower0f

Merci pour cette clarification, mais comme il se trouve que je suis (un peu) géomètre, je sais aussi que si on parle de copropriété horizontale, un lot peut être une addition de pièces d'appartement ou de locaux et il est rare que dans ce cas ce sot une polyligne close, mais un cumul de polylignes.
Ce que je voulais dire, c'est que lorsqu'on pose une question, il faut être le plus explicatif possible et ne pas utiliser des termes propres à chacun pouvant avoir un sens ambigu chez les autres.


Autre chose, quand on pose une question, il faut revenir sur le forum, trois personnes sont intervenues dont deux propositions de Lisp

et @Scout ne vient même pas les lire et encore moins les remercier.

Amicalement tout de même !

Posté(e)

Merci bien pour le Lisp lecrabe

Par contre quand je sélectionne tout il me met un A entre le M et le ² provient t'il du champ

voir pièce jointe

Capture d'écran 2024-12-20 160242.png

Posté(e)

Je pense qu'il s'agit d'un problème d'encodage. Depuis la version 2021 d'AutoCAD, AutoLISP supporte les caractère UNICODE (j'en avais parlé ici).

Il faut donc faire attention quand on copie/colle un LISP de bien l'enregistrer avec le bon encodage ASCII ou UNICODE ou (de convertir l'encodage).

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

Posté(e)

Bonjour,

Je confirme, enregistré sous ANSI, UTF..., pas de A !

Une remarque, le LISP ne tient pas compte des UNITES du dessin (variable INSUNITS :   4  =  mm / 5 = cm / 6 = m) ! Il donne la valeur BRUTE indiquée dans les PROPRIETES !

J'utilise souvent mes outils de surface avec une version AutoCAD LT et j'utilise la MACRO DIESEL suivante :

     $m=$(rtos,$(/,$(getvar,area),$(getvar,USERR2)),2,2);

La valeur de USERR2 correspond au nombre diviseur suivant les unités du dessin      mm = 1 000 000 / cm = 10 000 / m = 1

Très facile à transposer en LISP...

Ce qui donnera toujours un résultat affiché en M² quelque soit l'unité du dessin !

Christian

  • Like 1

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 @)

Posté(e)

Bonjour a tous

un Grand merci pour votre aide 

effectivement (Gil) j'ai rectifie la variable système LISPSYS à 0 

et cela fonctionne parfaitement

De très bonnes fête a vous tous

Scout

Posté(e)

j'avais oublier dans le Lisp pouvons nous avoir 2 chiffres après la virgule

je ne suis pas très calé dans les Lisps

merci, Scout

 

Posté(e)

Fausse joie le A revient même en modifiant la variable ou l'enregistrer sous ANSI, UTF

je vais réessayer un peu plus tard

Scout

Posté(e)

Hello

1) Pour 2 décimales : tu changes  %pr1

en

%pr2

 

2) Pourrais tu essayer avec un Style de texte COURANT qui utilise ARIAL ?

Bye, lecrabe

 

Autodesk Expert Elite Team

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é