Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

Dessin en cm² et aires en m²?

11 RÉPONSES 11
RÉSOLU
Répondre
Message 1 sur 12
dossearchitecte
4294 Visites, 11 Réponses

Dessin en cm² et aires en m²?

Bonjour,

 

Je dessine en cm (plus précis pour moi) mais calcule les surfaces en m² (plus intelligible pour les clients)...

 

Existe-t-il un réglage simple pour que lorsque je sélectionne une polyligne de 300cm par 300cm, l'aire affichée dans les propriétés soit 9m² (et non 90000cm²)?

J'ai bien essayé le paramétrage des unités du dessin, mais que je choississe m² ou cm² pour définir l'aire, l'affichage des propriétés reste éternellement en cm² dans l'affichage des propriétés...

 

Outre une lisibilité plus rapide pour moi (plus besoin de diviser mentalement les aires par 1000) cela rendrait pratique l'insertion et la mise à jour automatique de champs "Aire" liés à mes polylignes (sans avoir à passer par un facteur d'échelle)...

 

Si l'un d'entre vous a une piste...

11 RÉPONSES 11
Message 2 sur 12

Bonjour,

 

En faisant une modif à une routine que j'avais déjà écrite, ce qui donne:

 

(vl-load-com)
(defun c:cumul_measure2field ( / js htx AcDoc Space str k_mod n ename nw_obj pt key)
  (or
    (setq js (ssget "_I"))
    (setq js (ssget "_P"))
  )
  (cond
    (js
      (sssetfirst nil js)
      (initget "Existant Nouveau _Existent New")
      (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
        (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
      )
    )
    (T (setq js (ssget)))
  )
  (cond
    (js
      (initget 6)
      (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: ")))
      (if htx (setvar "TEXTSIZE" htx))
      (setq
        AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
        Space
        (if (= 1 (getvar "CVPORT"))
          (vla-get-PaperSpace AcDoc)
          (vla-get-ModelSpace AcDoc)
        )
        str ""
      )
      (cond
        ((null (tblsearch "LAYER" "Mesures cumulees"))
          (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96)
        )
      )
      (initget "Longueur Aire _Length Area")
      (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : "))
      (if (not k_mod) (setq k_mod "Length"))
      (repeat (setq n (sslength js))
        (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
        (if (eq k_mod "Length")
          (foreach typ_measure '("Length" "ArcLength" "Circumference" "Perimeter")
            (if (vlax-property-available-p ename (read typ_measure))
              (setq str
                (strcat str
                  "%<\\AcObjProp Object(%<\\_ObjId "
                  (itoa (vla-get-ObjectID ename))
                  ">%)." typ_measure " \\f \"%lu2%pr2\">%"
                  "+"
                )
              )
            )
          )
          (if (vlax-property-available-p ename "Area")
            (setq str
              (strcat str
                "%<\\AcObjProp Object(%<\\_ObjId "
                (itoa (vla-get-ObjectID ename))
                ">%).Area \\f \"%lu2%pr2\">%"
                "+"
              )
            )
          )
        )
      )
      (cond
        ((/= str "")
          (setq nw_obj
            (vla-addMtext Space
              (vlax-3d-point (setq pt (polar (getvar "VIEWCTR") (* pi 0.5) (getvar "TEXTSIZE"))))
              0.0
              (strcat
                "{\\fArial|b0|i0|c0|p34;"
                "%<\\AcExpr ("
                (substr str 1 (1- (strlen str)))
                ") \\f \"%lu2%pr0%ps[, m"
                (if (eq k_mod "Area") "²" "")
                "]%ct8[0.001]\">%"
              )
            )
          )
          (mapcar
            '(lambda (pr val)
              (vlax-put nw_obj pr val)
            )
            (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill)
            (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 0.0 0)
          )
          (while (and (setq key (grread T 4 0)) (/= (car key) 3))
            (cond
              ((eq (car key) 5)
                (vlax-put nw_obj 'InsertionPoint (trans (cadr key) 1 0))
              )
            )
          )
        )
        (T (princ "\nLes objets sélectionnés n'ont pas la propriété requise"))
      )
    )
  )
  (prin1)
)

Elle peut encore être modifiée, pour par exemple ne faire que les surfaces et pas les longueurs, ne pas faire les cumuls mais inscrire chaque surface.

Mais avant, savoir si cette solution de champ généré automatiquement te convient.

 

 

Message 3 sur 12

Merci CADaStroumph pour cette réponse,

 

J'ai réussi à charger et utiliser ta routine (après quelques essais infructueux car je ne suis pas une pro quant à l'utilisation de routine).

 

Elle fonctionne parfaitement pour ce qui est d'insérer un champs.

J'ai trouvé quelque chose qui ressemblait à un facteur d'échelle [0.001] et l'ai transformé en [0.0001] pour obtenir une valeur cohérente (j'obtenai 90m² quand j'aurais du lire 9m²). Ca a marché également.

Par contre je n'ai pas trouvé comment "bricoler" pour obtenir une précision de 2 chiffres après la virgules...

 

Je me demande toutefois s'il n'existe pas une technique plus simple pour résoudre mon problème.

Je m'attendais en fait à un bête réglage qui permettrait de faire cohabiter des longueurs en cm et des aires en m² (plutôt qu'en cm²)...

A quoi sert donc le menu déroulant de choix des unités de l'Aire? Qu'on choississe cm², m² ou autre ne fait aucune différence l'affichage des propriétés. (qui s'affiche éternellement en cm²...)

 

Voir image en pièce jointe (capture d'écran).

 

En attendant de trouver plus simple, ta routine CADaStroumph va bien me dépanner.

Merci

Message 4 sur 12
Olivier.R
en réponse à: dossearchitecte

Bonjour dossierarchitectes,

 

Voici le code de CADaStroumph modifié selon ta demande :

 

(vl-load-com)
(defun c:cumul_measure2field ( / js htx AcDoc Space str k_mod n ename nw_obj pt key)
  (or
    (setq js (ssget "_I"))
    (setq js (ssget "_P"))
  )
  (cond
    (js
      (sssetfirst nil js)
      (initget "Existant Nouveau _Existent New")
      (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
        (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
      )
    )
    (T (setq js (ssget)))
  )
  (cond
    (js
      (initget 6)
      (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: ")))
      (if htx (setvar "TEXTSIZE" htx))
      (setq
        AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
        Space
        (if (= 1 (getvar "CVPORT"))
          (vla-get-PaperSpace AcDoc)
          (vla-get-ModelSpace AcDoc)
        )
        str ""
      )
      (cond
        ((null (tblsearch "LAYER" "Mesures cumulees"))
          (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96)
        )
      )
      (initget "Longueur Aire _Length Area")
      (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : "))
      (if (not k_mod) (setq k_mod "Length"))
      (repeat (setq n (sslength js))
        (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
        (if (eq k_mod "Length")
          (foreach typ_measure '("Length" "ArcLength" "Circumference" "Perimeter")
            (if (vlax-property-available-p ename (read typ_measure))
              (setq str
                (strcat str
                  "%<\\AcObjProp Object(%<\\_ObjId "
                  (itoa (vla-get-ObjectID ename))
                  ">%)." typ_measure " \\f \"%lu2%pr2\">%"
                  "+"
                )
              )
            )
          )
          (if (vlax-property-available-p ename "Area")
            (setq str
              (strcat str
                "%<\\AcObjProp Object(%<\\_ObjId "
                (itoa (vla-get-ObjectID ename))
                ">%).Area \\f \"%lu2%pr2\">%"
                "+"
              )
            )
          )
        )
      )
      (cond
        ((/= str "")
          (setq nw_obj
            (vla-addMtext Space
              (vlax-3d-point (setq pt (polar (getvar "VIEWCTR") (* pi 0.5) (getvar "TEXTSIZE"))))
              0.0
              (strcat
                "{\\fArial|b0|i0|c0|p34;"
                "%<\\AcExpr ("
                (substr str 1 (1- (strlen str)))
                ") \\f \"%lu2%pr2%ps[, m"
                (if (eq k_mod "Area") "²" "")
                "]%ct8[0.001]\">%"
              )
            )
          )
          (mapcar
            '(lambda (pr val)
              (vlax-put nw_obj pr val)
            )
            (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill)
            (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 0.0 0)
          )
          (while (and (setq key (grread T 4 0)) (/= (car key) 3))
            (cond
              ((eq (car key) 5)
                (vlax-put nw_obj 'InsertionPoint (trans (cadr key) 1 0))
              )
            )
          )
        )
        (T (princ "\nLes objets sélectionnés n'ont pas la propriété requise"))
      )
    )
  )
  (prin1)
)

 Pour le reste je ne peux pas t'aider car je ne connais pas Autocad architecture.

Bien préciser les versions lorsque l'on pose une question cela permet d'améliorer les réponses. Smiley clignant de l'œil

 

Olivier

 

 

Message 5 sur 12
dossearchitecte
en réponse à: Olivier.R

Merci Olivier pour la modif. Ca fonctionne nickel.

Il faudra un jour que je m'initie au language des routines car pour l'instant pour moi c'est du chinois...

Message 6 sur 12
Olivier.R
en réponse à: dossearchitecte

Bonjour,

J'ajoute un grand remerciement à CADastroumph car je me suis contenté de remplacer un 0 par un 2.

Olivier

Message 7 sur 12
dossearchitecte
en réponse à: Olivier.R

Par contre je viens de me rendre compte d'une chose : ça marche nickel pour les aires mais ça fausse complètement le résultat pour les longueurs puisque le facteur d'échelle n'est pas le même qu'on transforme des cm² en m² (x0.0001) ou des cm en m (x0.01).

 

Du coup j'ai une dernière requête... (après j'arrête, promis)

L'un de vous pourrait-t-il supprimer carrément la notion de "longueur" de la routine, de manière à ce qu'on choissise uniquement 1) l'objet  2) la taille du texte et que ce soit directement le résultat de l'aire qui s'affiche, sans passer par 3) "Longueur" ou "Aire".

 

J'ai bien essayer de bricoler toute seule en supprimant des morceaux choisis de la routine mais j'arrive systématiquement à quelque chose qui ne marche pas.

 

 

 

 

Message 8 sur 12
Olivier.R
en réponse à: dossearchitecte

Voici le code corrigé pour que l'aire et la longueur soient correctes.

(vl-load-com)
(defun c:cumul_measure2field ( / js htx AcDoc Space str k_mod n ename nw_obj pt key)
  (or
    (setq js (ssget "_I"))
    (setq js (ssget "_P"))
  )
  (cond
    (js
      (sssetfirst nil js)
      (initget "Existant Nouveau _Existent New")
      (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
        (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
      )
    )
    (T (setq js (ssget)))
  )
  (cond
    (js
      (initget 6)
      (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: ")))
      (if htx (setvar "TEXTSIZE" htx))
      (setq
        AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
        Space
        (if (= 1 (getvar "CVPORT"))
          (vla-get-PaperSpace AcDoc)
          (vla-get-ModelSpace AcDoc)
        )
        str ""
      )
      (cond
        ((null (tblsearch "LAYER" "Mesures cumulees"))
          (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96)
        )
      )
      (initget "Longueur Aire _Length Area")
      (setq k_mod (getkword "\nMesurer [Longueur/Aire] <Longueur> : "))
      (if (not k_mod) (setq k_mod "Length"))
      (repeat (setq n (sslength js))
        (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
        (if (eq k_mod "Length")
          (foreach typ_measure '("Length" "ArcLength" "Circumference" "Perimeter")
            (if (vlax-property-available-p ename (read typ_measure))
              (setq str
                (strcat str
                  "%<\\AcObjProp Object(%<\\_ObjId "
                  (itoa (vla-get-ObjectID ename))
                  ">%)." typ_measure " \\f \"%lu2%pr2\">%"
                  "+"
                )
              )
            )
          )
          (if (vlax-property-available-p ename "Area")
            (setq str
              (strcat str
                "%<\\AcObjProp Object(%<\\_ObjId "
                (itoa (vla-get-ObjectID ename))
                ">%).Area \\f \"%lu2%pr2\">%"
                "+"
              )
            )
          )
        )
      )
      (cond
        ((/= str "")
          (setq nw_obj
            (vla-addMtext Space
              (vlax-3d-point (setq pt (polar (getvar "VIEWCTR") (* pi 0.5) (getvar "TEXTSIZE"))))
              0.0
              (strcat
                "{\\fArial|b0|i0|c0|p34;"
                "%<\\AcExpr ("
                (substr str 1 (1- (strlen str)))
                ") \\f \"%lu2%pr2%ps[, m"
                (if (eq k_mod "Area") "²" "")
                (if (eq k_mod "Area") "]%ct8[0.0001]\">%" "]%ct8[0.01]\">%")
              )
            )
          )
          (mapcar
            '(lambda (pr val)
              (vlax-put nw_obj pr val)
            )
            (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill)
            (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 0.0 0)
          )
          (while (and (setq key (grread T 4 0)) (/= (car key) 3))
            (cond
              ((eq (car key) 5)
                (vlax-put nw_obj 'InsertionPoint (trans (cadr key) 1 0))
              )
            )
          )
        )
        (T (princ "\nLes objets sélectionnés n'ont pas la propriété requise"))
      )
    )
  )
  (prin1)
)

 

 

Olivier

Message 9 sur 12

Bonjour,

 

Tu n'avais pas répondu à ma question:

 

Elle peut encore être modifiée, pour par exemple ne faire que les surfaces et pas les longueurs, ne pas faire les cumuls mais inscrire chaque surface.

 

Donc voici pour essentiellement les surfaces (convertie de cm en m) inscrites individuellement pour chaque polylignes sélectionnées (ce point d'insertion automatique est le milieu de la boite d'encombrement de la polyligne.

 

Merci à Olivier d'avoir répondu à ma place et opéré aux corrections (et d'avoir réattribuer un kudo)

 

 

(vl-load-com)
(defun c:surfm2field ( / js htx AcDoc Space n ename ll ur pt nw_obj)
  (or
    (setq js (ssget "_I"))
    (setq js (ssget "_P"))
  )
  (cond
    (js
      (sssetfirst nil js)
      (initget "Existant Nouveau _Existent New")
      (if (eq (getkword "\nTraiter jeu de sélection [Existant/Nouveau] <Existant>: ") "New")
        (progn (sssetfirst nil nil) (setq js (ssadd) js (ssget)))
      )
    )
    (T (setq js (ssget)))
  )
  (cond
    (js
      (initget 6)
      (setq htx (getdist (getvar "VIEWCTR") (strcat "\nSpécifiez la hauteur du texte <" (rtos (getvar "TEXTSIZE")) ">: ")))
      (if htx (setvar "TEXTSIZE" htx))
      (setq
        AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
        Space
        (if (= 1 (getvar "CVPORT"))
          (vla-get-PaperSpace AcDoc)
          (vla-get-ModelSpace AcDoc)
        )
      )
      (cond
        ((null (tblsearch "LAYER" "Surfaces metres carre"))
          (vlax-put (vla-add (vla-get-layers AcDoc) "Surfaces metres carre") 'color 96)
        )
      )
      (repeat (setq n (sslength js))
        (setq ename (vlax-ename->vla-object (ssname js (setq n (1- n)))))
        (cond
          ((vlax-property-available-p ename "Area")
            (vla-GetBoundingBox ename 'll 'ur)
            (setq
              ll (safearray-value ll)
              ur (safearray-value ur)
              pt (mapcar '* (mapcar '+ ll ur) '(0.5 0.5 0.5))
            )
            (setq nw_obj
              (vla-addMtext Space
                (vlax-3d-point pt)
                0.0
                (strcat
                  "{\\fArial|b0|i0|c0|p34;"
                  "%<\\AcObjProp Object(%<\\_ObjId "
                  (itoa (vla-get-ObjectID ename))
                  ">%).Area \\f \"%lu2%pr2%ps[, m²]%ct8[0.0001]\">%"
                )
              )
            )
            (mapcar
              '(lambda (pr val)
                (vlax-put nw_obj pr val)
              )
              (list 'AttachmentPoint 'Height 'DrawingDirection 'InsertionPoint 'StyleName 'Layer 'Rotation 'BackgroundFill)
              (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Surfaces metres carre" 0.0 0)
            )
          )
          (T (princ "\nLes objets sélectionnés n'ont pas la propriété requise"))
        )
      )
    )
  )
  (prin1)
)

 

Message 10 sur 12

Pour ma part je n'ai pas accès à cette fonction "AecDwgSetup".

 

Tu devrais te rapprocher du forum Architecture pour poser cette questions, car il y a certainement une incidence de cette boite de dialogue sur le comportement. Peut être dans les propriétés AEC des objets ? Et donc une autre manière d'accéder à cette info...

Message 11 sur 12

Bonjour CADaStroumph.

 

Merci pour cette adaptation.

 

La solution d'insérer un champs répond en effet au moins partiellement au problème (celui d'annoter rapidement et lisiblement un plan).

L'outil que tu a créé, modifié par Olivier, répond donc en tout point à cet usage (tellement pratique que je me suis ajouté une icône pour y accéder plus rapidement).

 

Mais c'est vrai que cela n'explique pas pourquoi le réglage d'unité des aires est inopérant sur l'affichage des propriétés.

J'aurai bien posé cette question sur le forum Architecture mais je n'ai pas trouvé de version française de ce dernier. Et en anglais c'est un peu rude de parler technique et précis...

 

Message 12 sur 12
Olivier.R
en réponse à: dossearchitecte

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums