Aller au contenu

Calcul de surfaces


CADastrophe

Messages recommandés

Bonjour,

 

Je recherche un lisp ou un vba pour calculer des surfaces depuis 1 polyligne.

J'en ai trouvé plusieurs mais il ne sont pas satisfaisant.

En sachant que je suis déssinateur bâtiment et que mon unitée et principalement le cm je voudrais pouvoir placer le résultat sur un de mes blocs avec att.

Et aussi (désolé d'etre éxigent) que si je viens a transformer ma plolyligne le résultat suit.

Je crois qu'il éxiste un truc dans ce genre avec architectural desktop..

Merci de vos réponses et bonnes fêtes............ ;)

Lien vers le commentaire
Partager sur d’autres sites

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

Meilleurs contributeurs dans ce sujet

 

Bonsoir

 

Pour réaliser ce que tu demandes, il faudrait un réacteur qui mettrait à jour en temps réel le texte de la surface de la polyligne, si tu déformes / étires la polyligne.

 

C'est tout à fait possible en AutoCAD 2000 (ou plus).

 

Peut être que l'un des "cadors" en développement qui intervient sur ce forum, dispose de ce genre de routine en stock !

 

Sinon avec AutoCAD 2005, on peut utiliser la nouvelle fonctionnalités "champs".

Cependant il est impératif de dessiner en métres car malheureusement

on ne peut pas appliquer un facteur de multiplication / division.

 

Soyons patients ...

 

Bye

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Dadirlidada et mouds le kawa...... :)

 

Ca s'appelle des champs et c'est à disposition dans la 2005.

 

Bon, ils n'y sont pas formatable et en peuvent donc pas tranformer une surface centimétrique en m2... mais ils existent.

 

Laurent CAMPEDEL

Dans l'usage des raccourcis clavier repensés tu trouveras la voie.

Lien vers le commentaire
Partager sur d’autres sites

Pour la petite histoire, j'avais eu l'occasion d'utiliser une version modifiée de cette routine pour un développement que j'avais réalisé pour un client, ce devait être en 2000 ou 2001. Sur autorisation de l'éditeur de Areautil et après paiement d'une licence, j'avais incorporé ce composant logiciel dans mon propre développement. Les modifications que j'avais demandées consistaient de faire en sorte qu'AREAUTIL puisse fonctionner en mode "silencieux" sans boite de dialogue.

Areautil est devenu ensuite gratuit puisque l'éditeur l'a amélioré et le logiciel payant s'appelle désormais Livelabel.

Lien vers le commentaire
Partager sur d’autres sites

Salut tout le monde

merci de vos réponses

En ce qui concerne la routine Areautil (message pour Le Crabe), je la connaissait, il y a un gros probleme avec cette routine effectivement une fois que tu as fait tes calculs et que tu enregistres éssaye de réouvrir ton fichier et modifie tes polylignes !!!!! Grosse surprise les surfaces ne suivent plus........................................................ Aye!!!

Lien vers le commentaire
Partager sur d’autres sites

 

Bonsoir Mr CAD'strophe

 

Attention, si tu as chargé la version de DEMO de "AreaUtil",

en effet elle ne fonctionne que dans la session en cours :(

 

As tu utilisée la version payante, sinon voir aussi ci-après...

 

Par contre comme l'a si bien dit notre maître à tous

(Patrick: The WebMaster of this fabulous Site),

il existe une autre version nommée "LiveLabel" qui semble encore meilleure :cool:

 

Par contre, il faut payer pour ces routines :casstet:

(Normal, y a du boulot)

 

Bye

 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Voilà un sujet qui m’a intéressé à plus d’un titre. Associer un texte avec une polyligne avec une interactivité (dans le cas présent, indiquer les surfaces)

Cette routine est à mettre en startup pour qu’à chaque ouverture de dessin, les réacteurs soient toujours actifs

Et comme c’est la première fois que je fais ce type d’exercice, toute critique est bienvenue

 

Pour faire une liaison, lancer la commande rea

 

@+

 

(defun modif_poly(obj rea arg-list)
 (if (and (vlax-read-enabled-p obj)(vlax-read-enabled-p (vlr-data rea)))
[b];    (vla-put-textstring (vlr-data rea) (rtos (vla-get-area obj)))
   (vla-put-textstring (vlr-data rea) (strcat (rtos (vla-get-area obj) 2 2) "M2"))[/b]
   (vlr-remove rea)
 )
)

(defun effacer_pt(obj rea arg-list)
 (vlax-ldata-delete obj "Patrick_35" (vlr-data rea))
 (vlax-ldata-delete (vlr-data rea) "Patrick_35" obj)
 (vlr-remove rea)
)

(defun c:rea(/ n sel_poly sel_text)
 (while (not sel_poly)
   (setq sel_poly (car (entsel "\nSélection de la polyligne/spline/cercle : ")))
   (if sel_poly
     (if (or (= (cdr (assoc 0 (entget sel_poly))) "POLYLINE")
             (= (cdr (assoc 0 (entget sel_poly))) "LWPOLYLINE")
             (= (cdr (assoc 0 (entget sel_poly))) "SPLINE")
             (= (cdr (assoc 0 (entget sel_poly))) "CIRCLE"))
       (progn
         (setq sel_poly (vlax-ename->vla-object sel_poly))
         (if (/= (vla-get-objectname sel_poly) "AcDbCircle")
           (if (= :vlax-false (vla-get-closed sel_poly))
             (progn
               (alert "Cette Polyligne/Spline n'est pas fermée")
               (setq sel_poly nil)
             )
           )
         )
         (if sel_poly
           (if (vlax-ldata-get sel_poly "Patrick_35")
             (progn
               (alert "Polyligne/Spline/Cercle déjà associé à un texte")
               (setq sel_poly nil)
             )
           )
         )
       )
       (progn
         (alert "Ce n'est pas une Polyligne/Spline/Cercle")
         (setq sel_poly nil)
       )
     )
   )
 )
 (if sel_poly
   (progn
     (while (not sel_text)
       (setq sel_text (car (entsel "\nSélection du texte : ")))
       (if sel_text
         (if (or (= (cdr (assoc 0 (entget sel_text))) "TEXT")
                 (= (cdr (assoc 0 (entget sel_text))) "MTEXT"))
           (progn
             (setq sel_text (vlax-ename->vla-object sel_text))
             (if (vlax-ldata-get sel_text "Patrick_35")
               (progn
                 (alert "Texte déjà associé à une Polyligne/Spline/Cercle")
                 (setq sel_text nil)
               )
             )
           )
           (progn
             (setq sel_text nil)
             (alert "Ce n'est pas un texte")
           )
         )
       )
     )
     (if sel_text
       (progn
         (vlr-object-reactor (list sel_poly) sel_text '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt)))
         (vlr-object-reactor (list sel_text) sel_poly '((:vlr-erased . effacer_pt)))
         (vlax-ldata-put sel_poly "Patrick_35" sel_text)
         (vlax-ldata-put sel_text "Patrick_35" sel_poly)
       )
     )
   )
 )
 (princ)
)

(defun refaire_reacteurs(/ entp entt n)
 (vl-load-com)
 (if (not appli_patrick_35)
   (progn
     (setq appli_patrick_35 (ssget "x" (list (cons 102 "{ACAD_XDICTIONARY"))))
     (if appli_patrick_35
       (progn
         (setq n 0)
         (while (setq entp (ssname appli_patrick_35 n))
           (setq entp (vlax-ename->vla-object entp))
           (setq entt (vlax-ldata-get entp "Patrick_35"))            
[b]            (vla-put-textstring entt (strcat (rtos (vla-get-area entp) 2 2) "M2"))[/b]
           (vlr-object-reactor (list entp) entt '((:vlr-modified . modif_poly)(:vlr-erased . effacer_pt)))
           (vlr-object-reactor (list entt) entp '((:vlr-erased . effacer_pt)))
           (setq n (1+ n))
         )
       )
     )
   )
 )
 (princ)
)

(refaire_reacteurs)

[Edité le 24/12/2004 par Patrick_35]

 

[Edité le 30/5/2006 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Salut Didier

Sans aucun problème, tu peux en faire ce que tu veux

Il me reste juste une chose que je n’arrive pas pour l’instant à faire, c’est lors de l’effacement d’une entité liée à un réacteur, c’est d’effacer le réacteur. Mais si on réouvre le dessin, je reconstruis les réacteurs et du coup, cela n’a plus beaucoup d’importance, mais quand même.

 

Et je vous souhaite à tous de bonnes fêtes

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Patrick, tu es un dieu !

 

Ta routine me sauve la vie, merci. Il ne me reste plus qu'à comprendre comment ça marche et à essayer de la modifier pour que le texte soit du format "XX.XX M2", donc 2 chiffres après la virgule (toujours) et le suffixe M2.

 

Je vais tenter cette plongée.

 

Mais encore MERCI

Lien vers le commentaire
Partager sur d’autres sites

Etre un dieu est un peu excessif ;)

Ca se passe ici

(vla-put-textstring (vlr-data rea) (strcat (rtos (vla-get-area obj) 2 2) "M2"))

au lieu de

(vla-put-textstring (vlr-data rea) (rtos (vla-get-area obj)))

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 4 semaines après...

Salut,

Je suis totalement novice en ce qui concerne VLisp... (désolé) J'ai fait un bête copier-coller dans acad2004.lsp (avec defun s::startup () ... et la routine de Patrick) mais hélas après avoir sélectionné l'entité de dessin, puis le texte j'ai une erreur du type erreur: type d'argument incorrect: VLReactor: nil Ou est l'erreur?

 

 

Lien vers le commentaire
Partager sur d’autres sites

Fait plutôt un copier-coller dans le bloc notes et tu sauvegardes par exemple en rea.lsp

Ensuite, avec _appload, tu charges le lisp et si l'erreur persiste, tu nous le dis

 

(ps : avec _appload, il est possible de faire des chargements automatique)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...

salut

 

alors c'est qu'il y a qqch qui cloche chez moi car je l'avais déja remplacé mais ca ne marche pas, en faite si ca marche lorsqu'il y a des des chiffres apres la virgule mais pas quand ca tombe sur un nombre entier. c'est a dire pour 7,32 M2 c'est bon mais pas pour 7,00 M2 ou il n'écrit que 7 M2.

 

merci de ta reponse.

 

Lien vers le commentaire
Partager sur d’autres sites

 

Bonjour

 

Je suis NUL en programmation mais je sais que la variable DIMZIN

a des effets "de bord" SUBTILs ... :)

 

Elle influe notamment la conversion des réels en chaînes (RTOS, ANGTOS)

 

Donc quelle est la valeur actuelle de ton DIMZIN ?

 

Essayes avec ZERO ou avec HUIT :cool:

 

Le Decapode "DIMZINant"

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Salut

Il suffit de remplacer

(vla-put-textstring (vlr-data rea) (strcat (rtos (vla-get-area obj) 2 2) "M2"))

par

(vla-put-textstring (vlr-data rea) (strcat (rtos (/ (vla-get-area obj) 100) 2 2) "M2"))

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

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é