Aller au contenu

RECHERCHE UN LISP DE CALCUL DE SURFACE


abricot

Messages recommandés

Bonjour à tous je suis nouveau venu.

 

Je cherche un LISP de calcul de surfaces qui afficherait la surface d'une polyligne fermée séléctionné du style on la sélectionne puis on choisit le centre et après ça inscrit la surface dans cette polyligne.

 

Est ce possible?

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

1) Comme d'habitude une excellente routine de notre Grand Maitre Gilles fera l'affaire !

 

2) Je suppose que tu travailles en Metres et que tu desires le resultat avec 1 decimale et le suffixe M2 !?

Cela peut se changer facilement ...

 

LA SANTE (Stay Safe), Bye, lecrabe "triste"

Automne 2020, la retraite

 

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

Lien vers le commentaire
Partager sur d’autres sites

bonjour.

j'ai exactement ce qu'il te faux .un lisp qui en sélectionnant une poly ligne te donne la surface de la pièce tu remplis le nom de la pièces via une boite dcl

ce lisp est a l'origine de Gille Chanteau il s'appelle Pline_bloc la boite dcl Getname a c'est deux fichier il faux un blocs que moi j'ai renommé SF comme surface j'ai aussi renommé le lips.mais je suis en confinement et je te retourne tout ça le plus vite possible

 

ou recherche sur le net gille chanteau ou interroge Gille chanteau sur ce site dans la rubrique LISP

 

 

Nous vivons tous dans le ventre d'un chien géant

Tout le monde le sait mais personne ne dit rien du tout

 

ultra Vomit

Lien vers le commentaire
Partager sur d’autres sites

  • 2 ans après...

Bonjour Gile,

J'ai juste modifié le m² par m2, sinon, avec mon style de texte, j'ai m² .

Si je peux me permettre, serait-il possible de demander à l'utilisateur, la densité du matériau et son épaisseur pour afficher le poids de la pièce ?

Le poids = la surface en m2 x la densité x par l'épaisseur en mm.

Sur l'affichage, nous aurions :

Surface => 1.29 m2

Densité => 8

Épaisseur => 4 mm

Poids => 80 kg

Merci pour votre aide.

Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...
Invité Rremolo

Bonjour,

Merci pour ce lisp. Je souhaiterais savoir s'il était possible d'avoir le même lisp, mais qui modifie le texte (la surface) en même temps qu'on modifie la polyligne ? Car, je travail sur des plans qui pourrait être mis à jour.

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Invité Rremolo
Il y a 2 heures, (gile) a dit :

Le "texte" est un champ dynamique, il suffit de régénérer (ou METTREAJOURCHAMP) pour que le texte reflète le changement.

Merci beaucoup.
Est-il possible d'enlever l'arrière plan du texte (gris) ?

 

 


 

Lien vers le commentaire
Partager sur d’autres sites

Invité Rremolo
Il y a 5 heures, (gile) a dit :

Le "texte" est un champ dynamique, il suffit de régénérer (ou METTREAJOURCHAMP) pour que le texte reflète le changement.

Merci beaucoup.
 

Dernière question. Je cherche un Lisp qui calcule et qui affiche tout comme ce Lisp la surface d'une pièce qui peut être dessinée par plusieurs lignes différentes. Exemple, une pièce dont il y a des cloisons, des murs, etc. Je ne sais pas si je m'exprime bien. Mais en claire, un Lisp qui peut calculer et afficher en texte des surfaces sur des plan d'archis.

Cordialement, Rremolo

 

 


 

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é