Aller au contenu

Sélection de plusieurs hachures pour 1 champs


Steven

Messages recommandés

Salut à tous,

 

Existe-t-il un moyen de sélectionner plusieurs objets lors de la sélection d'objets à l'insertion d'un champs?

En effet, je souhaiterais indiquer l'aire cumulée qu'occupent plusieurs hachures

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.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

En réponse exacte à ta question: non

 

Cependant(plus fastidieux), lors de l'insertion de ton champ prend l'option "Formule", ne clique pas sur l'un des boutons Moyenne, Somme, Nombre ou Cellule qui sont réservés pour les tableaux, mais clique dans la boite formule: (pour la rendre active) et fais un click-droit et choisi "Insérer un champ..." tu continu alors comme tu le ferais pour un champ unique avec l'aire d'une hachure.

Une fois fais tu as le résultat qui s'affiche, tu tapes alors "+" et tu refais un click-droit pour recommencer la procédure autant de fois que tu as d'objets.

 

Au résultat final tu auras un champ unique qui englobe tes champs individuels et qui sera toujours dynamique si une ou plusieurs de tes hachures changent de géométrie.

 

NB: Je pense qu'en lisp il serait possible d'automatiser cette procédure pour au final n'avoir que la sélection à faire.

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

Lien vers le commentaire
Partager sur d’autres sites

Salut Bonuscad,

 

Merci pour la procédure à suivre. En effet, ça peut être carrément long :huh:

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.

Lien vers le commentaire
Partager sur d’autres sites

Pour être plus rapide, tu peux essayer ceci:

Dans la foulée j'ai essayé de faire une fonction de mesure cumulée générique (Longueur ou Surface)

 

(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\">%"
             )
           )
         )
         (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)
)

 

NB:Bien que j'ai testé un peu, il peut y avoir des oublis ou un bug.

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

Lien vers le commentaire
Partager sur d’autres sites

Terrible :D

 

Y a juste un petit truc, j'ai essayé de bisouiller le lisp mais bien sûr, ça a foiré dry.gif

 

En fait, j'ai voulu faire en sorte que le champs se mettent dans le calque courant, et je voulais que le champs se mettent dans le style de texte courant en enlevant ces lignes:

)
 	(cond
   	((null (tblsearch "LAYER" "Mesures cumulees"))
     	(vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96)
   	)

et bien non, y a plus rien qui s'inscrit :P

 

Je crois que je vais me mettre au lisp, moi aussi :)

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.

Lien vers le commentaire
Partager sur d’autres sites

Pour

     (cond
       ((null (tblsearch "LAYER" "Mesures cumulees"))
         (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96)
       )
     )

Effectivement tu peux le supprimer. Déjà là tu avais bon!

 

Ensuite il faut aussi supprimer

               "{\\fArial|b0|i0|c0|p34;"

Cette ligne en faite force le style du texte à l'intérieur du MTEXT en Arial, indépendamment du style courant, qui ici est le style "Standard"

 

et dernièrement il te faut modifier la ligne

 

           (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 0.0 0)

en

           (list 5 (getvar "TEXTSIZE") 5 pt (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 0)

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

Lien vers le commentaire
Partager sur d’autres sites

coucou

Salut Steven, comment est-ce que tu vas bien ?

pour ton souci, tu peux aussi remonter à la source des hachures,

edithach, recréer un contour, refaire les hachures sans l'option créer des hachures séparées

et du coup ta hachure est unique, en revanche tu ne pourras pas différencier les motifs il y a donc une limite

mais je ne sais pas si elles toutes le même motif en tous cas c'est un bon motif pour te répondre.

Amitiés

Lien vers le commentaire
Partager sur d’autres sites

Salut Didier,

 

J'y avais pensé mais je suis obligé de faire des hachures séparées. Les couleurs changent mais elles doivent être séparées.

En effet, je peux avoir 8 bureaux alignés faisant parties du même service et deux bureaux au milieu de ceux-ci, qui changent ,et qui font partie d'un autre service. Puis hop, une modif survient, paf!, on rechange des locaux de services.

Mince, c'est plus simple avec AA mais je dois trouver une solution avec AutoCAD qui ne soit pas forcement aussi rapide qu'avec AA mais quand même assez optimisée. Ça fait un moment que je travaille là-dessus. Le lisp de Bonuscad plaît bien.

Maintenant, je vais chercher un système pour que les surfaces se changent automatiquement suivant le changement de couleur des hachures, je pense à un champs dans un attributs, associé aux hachures solides.

Mais bon, pour le moment je mets AutoCAD de côté et je vais profité un peu du week-end.

Modifié par Steven

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.

Lien vers le commentaire
Partager sur d’autres sites

J'ai trouvé une solution.

Je fais une sélection similaire de mes hachures, et en lançant le lisp de Gile, Totalarea, le tour est joué.

Bon, les surfaces ne se changent pas automatiquement, su je change une hachure de couleur mais ça me va :)

 

Merci à Bonuscad pour son lisp et à Didier pour son idée :)

 

Bonne fin de week-end ;)

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.

Lien vers le commentaire
Partager sur d’autres sites

  • 7 ans après...

Bonjour,

 

Est-il possible de configurer le LISP ou créer une boucle afin qu'il demande dans quelle unité afficher la donnée ?

Il se trouve que je travaille selon les sujets dans différentes unités et reprogrammer le LISP à chaque fois me semble compliqué.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Sinon autre alternative, tu as le code de lee mac

 

;;------------------------=={ Areas to Field }==------------------------;;
;;                                                                      ;;
;;  This program allows a user to create an MText object containing a   ;;
;;  Field Expression referencing the area, or sum of areas, of one or   ;;
;;  more selected objects.                                              ;;
;;                                                                      ;;
;;  Upon issuing the command syntax 'A2F' at the AutoCAD command-line,  ;;
;;  the user is prompted to make a selection of objects for which to    ;;
;;  retrieve the area; if more than one object is selected, the         ;;
;;  cumulative area for all objects will be displayed by the resultant  ;;
;;  MText Field.                                                        ;;
;;                                                                      ;;
;;  Following object selection, the user is prompted to pick a point    ;;
;;  at which to create the MText Field. If the specified point resides  ;;
;;  within an AutoCAD table cell, the program will populate the table   ;;
;;  cell with the appropriate Field Expression.                         ;;
;;                                                                      ;;
;;  The Field will display the sum of the areas of the selected         ;;
;;  objects, formatted using the Field formatting code specified at     ;;
;;  the top of the program - this formatting code may be altered to     ;;
;;  suit the user's requirements.                                       ;;
;;                                                                      ;;
;;----------------------------------------------------------------------;;
;;  Author:  Lee Mac, Copyright © 2014  -  www.lee-mac.com              ;;
;;----------------------------------------------------------------------;;
;;  Version 1.3    -    2014-07-17                                      ;;
;;----------------------------------------------------------------------;;

(defun c:a2 ( / *error* fmt inc ins lst sel str )

    (setq fmt "%lu6%qf1") ;; Field Formatting

    (defun *error* ( msg )
        (LM:endundo (LM:acdoc))
        (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
            (princ (strcat "\nError: " msg))
        )
        (princ)
    )

    (if (and (setq sel (ssget '((0 . "ARC,CIRCLE,ELLIPSE,HATCH,*POLYLINE,REGION,SPLINE"))))
             (setq ins (getpoint "\nPick point or cell for field: "))
        )
        (progn
            (if (setq tmp
                    (ssget "_X"
                        (list '(0 . "ACAD_TABLE")
                            (if (= 1 (getvar 'cvport))
                                (cons 410 (getvar 'ctab))
                               '(410 . "Model")
                            )
                        )
                    )
                )
                (repeat (setq idx (sslength tmp))
                    (setq tab (cons (vlax-ename->vla-object (ssname tmp (setq idx (1- idx)))) tab))
                )
            )
            (if (= 1 (sslength sel))
                (setq str
                    (strcat
                        "%<\\AcObjProp Object(%<\\_ObjId "
                        (LM:ObjectID (vlax-ename->vla-object (ssname sel 0)))
                        ">%).Area \\f \"" fmt "\">%"
                    )
                )
                (progn
                    (repeat (setq idx (sslength sel))
                        (setq lst
                            (vl-list*
                                "%<\\AcObjProp Object(%<\\_ObjId "
                                (LM:ObjectID (vlax-ename->vla-object (ssname sel (setq idx (1- idx)))))
                                ">%).Area>%" " + "
                                lst
                            )
                        )
                    )
                    (setq str
                        (strcat
                            "%<\\AcExpr "
                            (apply 'strcat (reverse (cdr (reverse lst))))
                            " \\f \"" fmt "\">%"
                        )
                    )
                )
            )
            (LM:startundo (LM:acdoc))
            (if (setq tmp (LM:getcell tab (trans ins 1 0)))
                (apply 'vla-settext (append tmp (list str)))
                (vla-addmtext
                    (vlax-get-property (LM:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))
                    (vlax-3D-point (trans ins 1 0))
                    0.0
                    str
                )
            )
            (LM:endundo (LM:acdoc))
        )
    )
    (princ)
)

;; ObjectID  -  Lee Mac
;; Returns a string containing the ObjectID of a supplied VLA-Object
;; Compatible with 32-bit & 64-bit systems
 
(defun LM:ObjectID ( obj )
    (eval
        (list 'defun 'LM:ObjectID '( obj )
            (if
                (and
                    (vl-string-search "64" (getenv "PROCESSOR_ARCHITECTURE"))
                    (vlax-method-applicable-p (vla-get-utility (LM:acdoc)) 'getobjectidstring)
                )
                (list 'vla-getobjectidstring (vla-get-utility (LM:acdoc)) 'obj ':vlax-false)
               '(itoa (vla-get-objectid obj))
            )
        )
    )
    (LM:ObjectID obj)
)

;; Get Cell  -  Lee Mac
;; If the supplied point lies within a cell boundary,
;; returns a list of: (<VLA Table Object> <Row> <Col>)

(defun LM:getcell ( lst pnt / dir )
    (setq dir (vlax-3D-point (trans (getvar 'viewdir) 1 0))
          pnt (vlax-3D-point pnt)
    )
    (vl-some
       '(lambda ( tab / row col )
            (if (= :vlax-true (vla-hittest tab pnt dir 'row 'col))
                (list tab row col)
            )
        )
        lst
    )
)
 
;; Start Undo  -  Lee Mac
;; Opens an Undo Group.
 
(defun LM:startundo ( doc )
    (LM:endundo doc)
    (vla-startundomark doc)
)
 
;; End Undo  -  Lee Mac
;; Closes an Undo Group.
 
(defun LM:endundo ( doc )
    (while (= 8 (logand 8 (getvar 'undoctl)))
        (vla-endundomark doc)
    )
)
 
;; Active Document  -  Lee Mac
;; Returns the VLA Active Document Object
 
(defun LM:acdoc nil
    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
    (LM:acdoc)
)
 
(vl-load-com) (princ)
 
;;----------------------------------------------------------------------;;
;;                             End of File                              ;;
;;----------------------------------------------------------------------;;

Amicalement.

Lien vers le commentaire
Partager sur d’autres sites

On 10/05/2021 at 13:55, Curlygoth said:

format => Controle des unités

Salut Curlygoth,

Le contrôle des unités n'a rien avoir avec le lisp Totalarea.

Drault souhaiterait indiquer l'unité avec laquelle il travaille et mais ne souhaite pas que le bloc Totalarea s'insère dans l'unité avec laquelle il travaille.

 

On 08/05/2021 at 18:39, drault said:

Bonjour,

 

Est-il possible de configurer le LISP ou créer une boucle afin qu'il demande dans quelle unité afficher la donnée ?

Il se trouve que je travaille selon les sujets dans différentes unités et reprogrammer le LISP à chaque fois me semble compliqué.

Pour que Totalarea indique l'unité avec laquelle tu travailles (m, cm, mm) en m², cm², mm², tu dois juste modifier l'unité que tu souhaites indiquer lorsque tu lances Totalarea.

 

TOTALAREA-UNITE.png

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.

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
On 21/03/2014 at 22:28, bonuscad said:

Pour

 


     (cond
       ((null (tblsearch "LAYER" "Mesures cumulees"))
         (vlax-put (vla-add (vla-get-layers AcDoc) "Mesures cumulees") 'color 96)
       )
     )
 

 

Effectivement tu peux le supprimer. Déjà là tu avais bon!

 

Ensuite il faut aussi supprimer

 


               "{\\fArial|b0|i0|c0|p34;"
 

 

Cette ligne en faite force le style du texte à l'intérieur du MTEXT en Arial, indépendamment du style courant, qui ici est le style "Standard"

 

et dernièrement il te faut modifier la ligne

 

 


           (list 5 (getvar "TEXTSIZE") 5 pt "Standard" "Mesures cumulees" 0.0 0)
 

 

en

 


           (list 5 (getvar "TEXTSIZE") 5 pt (getvar "TEXTSTYLE") (getvar "CLAYER") 0.0 0)
 

 

@bonuscad

Top, les modifs sont très utiles.

D'autres questions me viennent et recoupent un autre post (ici) où je trouvais très pratique l'idée de choisir unité départ/arrivée. Peut-être un peu long si on veut aller vite (possibilité d'inclure une boucle qui demande si on veut revenir ou nom sur chaque choix configuration ?).

@Steven

Effectivement et en fait ma question est répondue quand on regarde la config pour l'échelle. 😄

 

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é