Aller au contenu

Macro : interagir avec les propriétés d'un objet


Messages recommandés

Bonjour, 

Dans ma recherche d'optimisation de mon temps de travail, je cherche une macro capable de modifier les propriétés d'un objet en l'occurrence une cotation.

Mon but créer un bouton qui me permettrait de passer d'une cotation avec lignes d'attaches à une sans ligne d'attache n'ayant pas trouvé le saint graal je m'interroge sur l'éventualité de traiter le problème d'une façon différente : recréer mon style de cote sans ligne d'attache et faire des boutons pour swap entre les deux styles.

Ma question est la suivante : Comment interagir avec les propriétés d'un objet via macro (commande personnalisée) ?

Merci ;)

Ps: je suis sur Autocad LT 2025

Lien vers le commentaire
Partager sur d’autres sites

Coucou,
Pour info depuis la version AutoCAD LT 2024, les LISP sont supporté par les versions LT.
En terme de macro, je ne m'y connais pas suffisamment. Dans un premier temps, faut-il modifier ces infos à la création d'une cotation ou bien sur des objets existants ? Car la réflexion n'est pas la même selon la réponse.
Dans le cas d'une modification lors de la création de nouveaux objets, tu peux t'aider de ceci (variables systèmes relative aux cotations) :

Citation

-COTLIN
[ANnotatif/Sauvegrd/Restaurer/Etat/Variables/Appliquer/?] <Restaurer>: e
DIMASO      Inactif              Créer des objets de cote
DIMSTYLE    UBS - Annotations    Style de cote courant (lecture seule)
DIMADEC     1                    Emplacements des décimales dans les angles
DIMALT      Inactif              Unités alternatives sélectionnées
DIMALTD     3                    Nombre de décimales de l'unité alternative
DIMALTF     0.04                 Facteur d'échelle de l'unité alternative
DIMALTMZF   100.00               Autre facteur négatif pour les cotes métriques
DIMALTMZS                        Autre suffixe négatif pour les cotes métriques
DIMALTRND   0.00                 Valeur d'arrondissement des unités d'alternance
DIMALTTD    3                    Changer la précision décimale des tolérances
DIMALTTZ    0                    Tolérance alternative de suppression du zéro
DIMALTU     2                    Changer les unités
DIMALTZ     0                    Unité alternative de suppression du zéro
DIMAPOST                         Préfixe et suffixe pour le texte alternatif
DIMARCSYM   0                    Symbole de longueur d'arc
DIMASZ      0.15                 Dimension de la flèche
DIMATFIT    3                    Ajustement texte et flèches
DIMAUNIT    0                    Format des unités angulaires
DIMAZIN     0                    Suppression du zéro angulaire
DIMBLK      FerméePleine         Cartouche de la flèche
DIMBLK1     FerméePleine         Cartouche de la première flèche
DIMBLK2     FerméePleine         Cartouche de la deuxième flèche
DIMCEN      0.15                 Dimension de la marque centrale
DIMCLRD     DUBLOC               Couleur de la ligne de cote et de la ligne de repère
DIMCLRE     DUBLOC               Couleur de la ligne d'attache
DIMCLRT     DUCALQUE             Couleur du texte de cote
DIMDEC      2                    Changer la précision décimale des tolérances
DIMDLE      0.00                 Prolongement de la ligne de cote
DIMDLI      0.00                 Espacement de la ligne de cote
DIMDSEP     ,                    Séparateur des décimales
DIMEXE      0.05                 Prolongement au-dessus de la ligne de cote
DIMEXO      0.05                 Décalage de l'origine de la ligne d'attache
DIMFRAC     0                    Format de fraction
DIMFXL      0.10                 Ligne d'attache fixe
DIMFXLON    Actif                Activer la ligne d'attache fixe
DIMGAP      0.10                 Espace entre la ligne de cote et le texte
DIMJOGANG   45.0                 Angle de raccourcissement de cote de rayon
DIMJUST     0                    Justification du texte sur les lignes de cote
DIMLDRBLK   FerméePleine         Nom de bloc des lignes de repère
DIMLFAC     1.00                 Facteur d'échelle linéaire
DIMLIM      Inactif              Générer les limites de cote
DIMLTEX1    CACHE                Ligne d'attache de type 1
DIMLTEX2    CACHE                Ligne d'attache de type 2
DIMLTYPE    Continuous           Type de ligne de cote
DIMLUNIT    2                    Format d'unité linéaire
DIMLWD      0                    Epaisseur de ligne repère et épaisseur de ligne de cote
DIMLWE      0                    Epaisseur de ligne de prolongement
DIMMZF      100.00               Facteur négatif pour les cotes métriques
DIMMZS                           Suffixe négatif pour les cotes métriques
DIMPOST     m                    Préfixe et suffixe pour le texte de cote
DIMRND      0.00                 Valeur arrondie
DIMSAH      Inactif              Séparer les blocs de flèches
DIMSCALE    1.00                 Facteur d'échelle général
DIMSD1      Inactif              Supprimer la 1ère ligne de cote
DIMSD2      Inactif              Supprimer la 2ème ligne de cote
DIMSE1      Inactif              Supprimer la première ligne d'attache
DIMSE2      Inactif              Supprimer la deuxième ligne d'attache

DIMSOXD     Actif                Supprimer les lignes de cote extérieures
DIMTAD      0                    Placer le texte au-dessus de la ligne de cote
DIMTDEC        2                    Précision décimale des tolérances
DIMTFAC         1.00                 Tolérance du facteur d'échelle de hauteur de texte
DIMTFILL                  0                    Arrière-plan texte activé
DIMTFILLCLR           1 (rouge)            Couleur de l'arrière-plan texte
DIMTIH                      Inactif              Le texte à l'intérieur des attaches est horizontal.
DIMTIX                Inactif              Placer le texte à l'intérieur des attaches
DIMTM                      0.00                 Tolérance négative
DIMTMOVE               1                    Mouvement du texte
DIMTOFL             Actif                Forcer la ligne à l'intérieur des lignes d'attaches
DIMTOH             Actif                Texte à l'extérieur horizontal
DIMTOL                     Inactif              Cotation de tolérance
DIMTOLJ               0                    Justification verticale des tolérances
DIMTP               0.00                 Tolérance positive
DIMTSZ                  0.00                 Dimension de la marque
DIMTVP                  0.00                 Position verticale du texte
DIMTXSTY          Verdana Style de texte
DIMTXT                     0.15                 Hauteur du texte
DIMTXTDIRECTION  Inactif              Direction du texte de cote
DIMTZIN          8                    Suppression zéro de la tolérance
DIMUPT                Inactif              Texte positionné par l'utilisateur
DIMZIN                0                    Suppression zéro

Il s'agit donc des variables DIMSE1 et DIMSE2 qui contrôle la suppression des lignes d'attaches et elles acceptent les valeurs _On (= Actif en FR) ou _Off (= Inactif en FR).
Donc en clair, tu peux créer une macro dans le genre pour le cas où tu souhaites modifier les cotations avant la création d'une cotation (ici une cotation linéaire) :

^C^C_DIMSE1;_On;_DIMSE2;_On;_DIMLINEAR;\;\;\;;

Tu peux également simplement faire :

^C^C_DIMSE1;_On;_DIMSE2;_On;

Pour ton premier bouton (permettant de supprimer les lignes d'attaches pour les prochaines cotations crées), puis pour le second bouton (permettant d'afficher les lignes d'attaches pour les prochaines cotations crées) :

^C^C_DIMSE1;_Off;_DIMSE2;_Off;

 

Désolée de ne pas pouvoir faire plus. Il me semble impossible de modifier les propriétés d'une cotation existante en macro cependant, mais encore une fois, cela dépasse mes compétences dans ce domaine.

Bisous,
Luna

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Merci pour ta réponse =) (et désolé pour la mienne tardive)

Pour moi la solution la plus simple reste celle évoqué dans mon premier message recréer mon style de cote sans ligne d'attache et faire des boutons pour swap entre les deux styles. cela permet de le faire avant et après création de la cote .

J'attend de voir si quelqu'un d'autre a une proposition à faire concernant la problématique de base Comment interagir avec les propriétés d'un objet via macro (commande personnalisée) ?

Lien vers le commentaire
Partager sur d’autres sites

Il y a 5 heures, Reyoh a dit :

J'attend de voir si quelqu'un d'autre a une proposition à faire concernant la problématique de base Comment interagir avec les propriétés d'un objet via macro (commande personnalisée) ?

Alors avec un LT 2024 ou plus, on peut envisager ce code lisp.

Exemple d'utilisation:

(dimattach 1) -> enlève les lignes d'attaches de la cotation sélectionnée

(dimattach 0) -> remet les lignes d'attaches de la cotation sélectionnée

Ces instructions pourraient être mises dans un bouton...

(defun dimattach (b / ss elst xd)
  (cond
    ((and (eq (type b) 'INT) (or (zerop b) (eq b 1)))
      (princ "\nSélectioner une cotation.")
      (while (setq ss (ssget "_+.:E:S" '((0 . "DIMENSION"))))
        (setq
          elst (entget (ssname ss 0) '("ACAD"))
          xd (assoc -3 elst)
        )
        (entmod
          (append 
            (if xd (entget (ssname ss 0)) elst)
            (list
              (list
                -3
                (cons
                  "ACAD"
                  (list
                    (cons 1000 "DSTYLE")
                    (cons 1002 "{")
                    (cons 1070 76)
                    (cons 1070 b)
                    (cons 1070 75)
                    (cons 1070 b)
                    (cons 1002 "}")
                  )
                )
              )
            )
          )
        )
        (princ "\nSélectioner une cotation.")
      )
    )
    (T (princ "\nLa fonction requiert l'argument entier 1 ou 0 "))
  )
  (prin1)
)

 

  • Like 1

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

  • 2 semaines après...

Bonjour, 

Merci pour ta réponse =)

J'ai eu brièvement le temps d'essayer les lisp mais j'avoue ne pas encore saisir le pourquoi du comment ca marche...
J'ai vu qu'il y avait des tutos à droite à gauche je garde ça sous le coude pour quand le temps ne me manquera pas ;)

Je fais évoluer ma question Est il possible d'interagir avec les propriétés d'un objet via macro (commande personnalisée) ? Si oui comment ? 

 

Bonne journée 

Lien vers le commentaire
Partager sur d’autres sites

Hors programmation (lisp) ça ne me semble pas possible via macro (diesel).

Tu peux essayer ça qui inverse la visibilité des lignes d'attache (je pense que ça doit marcher sous LT)

(defun C:CotInvAttach ( / ssDim oDim oDimVla)
  (while (setq ssDim (ssget "_+.:E:S" '((0 . "DIMENSION"))))
    (setq oDim (ssname ssDim 0))
    (setq oDimVla (vlax-ename->vla-Object oDim))
    (if (= (vla-get-ExtLine1Suppress oDimVla) :vlax-true)
      (vla-put-ExtLine1Suppress oDimVla :vlax-false)
      (vla-put-ExtLine1Suppress oDimVla :vlax-true)
    )
    (if (= (vla-get-ExtLine2Suppress oDimVla) :vlax-true)
      (vla-put-ExtLine2Suppress oDimVla :vlax-false)
      (vla-put-ExtLine2Suppress oDimVla :vlax-true)
    )
  )
)

 

Olivier

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Il y a 2 heures, Reyoh a dit :

Je fais évoluer ma question Est il possible d'interagir avec les propriétés d'un objet via macro (commande personnalisée) ? Si oui comment ? 

Il n'y a pas réellement de réponse à cette question malheureusement... En langage DIESEL la réponse est non, en LISP ou autre...et bien tout va dépendre de la propriété, du type d'objet, de ce que signifie "interagir" précisément, etc...

En clair, il n'existe AUCUN programme (tout langage de programmation) en mesure "d’interagir" avec n'importe quelle propriété de n'importe quel objet.
Certaines propriété sont accessible via la liste DXF d'un objet, d'autres à partir des propriétés de l'API COM/ActiveX ou Visual, etc...

Donc s'il faut répondre à la question : ce n'est pas possible en l'état, il faut plus de précision concernant le besoin réel.

Bisous,
Luna

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Hello ! 

Comme je l'expliquais dans mon premier post je vais utiliser un chemin détourné pour arriver à mes fins qui me permettra de faire un swap entre plusieurs style de cotes et plusieurs échelles en un clic.

Le LISP me prendra malheureusement trop de temps à assimilé pour l'instant. 

Je manque de temps pour le développement mais je ne manquerais pas de vous faire part de ma solution le jour ou elle émergera.

Un grand merci à tous pour vos réponses =) 

Gardez la forme ! 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Reyoh,

 

Il n'y a pas à assimiler le lisp ni de développement à faire, puisque les codes complets ont été donnés. Il suffit juste de les mettre en œuvre.

Le tuto pour charger un lisp et l'utiliser dans AutoCAD https://youtu.be/QmloOJ9xFZA

J'ai utilisé les 2 codes fournis (celui de @bonuscad et le mien) pour voir les différences dans la mise en œuvre.

 

Olivier

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Pour gérer les cotes, je passerai par des STYLES DE COTES...

Bien plus souple et facile à utiliser. Car forcer certaines propriétés de certaines cotes c'est comme forcer les propriétés des objets au lieu de passer par les calques !

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

Lien vers le commentaire
Partager sur d’autres sites

Le 10/07/2024 à 21:36, Olivier Eckmann a dit :

Il n'y a pas à assimiler le lisp ni de développement à faire, puisque les codes complets ont été donnés.

C'est en effet fort aimable de me fournir le code mais j'aime comprendre comment fonctionne un outil avant de m'en servir ;) 

 

Il y a 21 heures, rebcao a dit :

Pour gérer les cotes, je passerai par des STYLES DE COTES...

C'est exactement ce que je compte faire mais en passant par une macro pour changer le style de la cote et sont échelle annotative en un clic :)

Lien vers le commentaire
Partager sur d’autres sites

il y a 24 minutes, Reyoh a dit :

C'est en effet fort aimable de me fournir le code mais j'aime comprendre comment fonctionne un outil avant de m'en servir 😉

C'est très noble, mais lorsque l'on a une problématique, un outil qui y répond, ça peut être pratique.

S'il fallait savoir construire une voiture de A à Z avant de pouvoir la conduire, il y aurait beaucoup moins de bouchon 🙂 

Pour apprendre le lisp, il y a des tas de ressources et pour une fois en français. 

Olivier

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

il y a 48 minutes, Reyoh a dit :

C'est exactement ce que je compte faire mais en passant par une macro pour changer le style de la cote et sont échelle annotative en un clic 🙂

Salut,

Tu souhaites changer le style de la cote ou changer la cote de style ?

Ce sont 2 choses différente. Si tu souhaite changer le style de la cote, ça va changer toutes les cotes du même style. Si tu souhaites changer la cote de style, tu ne modifieras que la cote sélectionné en lui assignant un autre style. Dans le second cas, comme l'a dit Christian, @rebcao, il faut te créer un style cote et faire en sorte que celui-ci soit annotatif. Ça sera bien plus souple et plus sûr. Le fait de forcer les propriétés d'une cote, n'est pas forcément la meilleurs solution.

  • Like 1

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

Le 12/07/2024 à 12:04, Steven a dit :

Salut,

Tu souhaites changer le style de la cote ou changer la cote de style ?

Ce sont 2 choses différente. Si tu souhaite changer le style de la cote, ça va changer toutes les cotes du même style. Si tu souhaites changer la cote de style, tu ne modifieras que la cote sélectionné en lui assignant un autre style. Dans le second cas, comme l'a dit Christian, @rebcao, il faut te créer un style cote et faire en sorte que celui-ci soit annotatif. Ça sera bien plus souple et plus sûr. Le fait de forcer les propriétés d'une cote, n'est pas forcément la meilleurs solution.

Hello ! 

Les deux 

Je souhaite créer une macro qui change le style de cote courant, l'échelle annotative courante et le calque courant

Si dans la même macro il est possible de redéfinir le tout pour une cote sélectionné c'est top. 

La bise 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Reyoh

j'aime comprendre comment fonctionne un outil avant de m'en servir

Il y a des gens qui font leur possible pour que ceux qui veulent apprendre trouvent matière à ça.
Auto-promo éhontée dans ma signature.

Amicalement

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é