Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

Je me permets de vous contacter car je souhaite réaliser un script AutoLISP permettant, via une boîte de dialogue, de sélectionner un type parmi une liste, et d’affecter automatiquement l’état de visibilité correspondant à un bloc dynamique déjà inséré dans mon dessin.

J’utilise AutoCAD 2022, et malgré mes recherches, je ne parviens pas à trouver de fonction fiable permettant de modifier l’état de visibilité d’un bloc dynamique par programmation. J’ai vu que cela semble possible via des propriétés dynamiques, mais je ne trouve aucune fonction ou exemple clair à ce sujet.

Auriez-vous des pistes, un exemple de code, ou une méthode recommandée pour réaliser cette opération en AutoLISP ?

Je vous remercie par avance pour votre aide,

tmp.lsp

Posté(e)

Bonjour @Loïc MICHEL

Il manque le fichier DCL.
Il manque le fichier avec le bloc (impossible d'inventer les paramètres que vous avez créés).

Il est parfaitement possible de gérer les états de visibilité par l'autolisp/vlisp.
Sachant que faire un LSP avec un DCL pour ne pas avoir à cliquer sur l'état de visibilité est un peu alambiqué.
À moins que ce ne soit qu'une action parmi d'autres dans le LSP.

Dans votre LSP, on voit que vous insérez un bloc dont le nom comporte une espace, c'est vraiment le cas ?
Dans votre texte de message, vous écrivez : bloc dynamique déjà inséré en gras qui plus est, vous en avez l'air certain.
Est-ce une contradiction ? Est-ce une mauvaise compréhension de ma part ?

Je ne suis pas un grand partisan des nombreux états de visibilité, 25 dans votre cas, ça alourdit vite le dessin si les blocs sont nombreux.

Merci de fournir les fichiers manquants pour vous apporter une réponse efficiente.

Amicalement

 

 

Éternel débutant…
Mon site perso : Programmer dans AutoCAD

 

Posté(e)

Bonjour,
Merci pour votre réponse.

Alors, j’utilise principalement le Lisp parce que je souhaite assembler deux blocs et y ajouter du texte. Je m’explique : je veux créer un éclaté de réseaux avec un bloc contenant toutes les différentes combinaisons pour la partie "organes", et un autre bloc avec toutes les combinaisons pour la partie "réseaux".

La boîte de dialogue présente à l’utilisateur une liste de choix pour sélectionner son type de réseau et les organes associés. Ensuite, je voudrais que le Lisp choisisse automatiquement l’état de visibilité correspondant à ces choix.

À partir d’un point en haut à gauche, je souhaite que le Lisp insère automatiquement le texte du réseau à un emplacement précis. Comme cet emplacement est toujours le même, je trouve que l’utilisation d’un Lisp est appropriée.

Enfin, je souhaite que le Lisp utilise la fonction GROUP (et non la création d’un bloc) pour lier les deux blocs ainsi que le texte, afin qu’ils soient regroupés et puissent être déplacés ensemble.

Je suis débutant en Lisp, donc je suis tout à fait ouvert à vos conseils. Merci beaucoup pour votre aide !
Je vous renvoie les deux blocs, même si je n’ai pas encore eu le temps d’avancer davantage.

PI.DCL Dessin2.dwg tmp.lsp

Posté(e)

Salut,

La façon la plus simple, à mon avis, pour modifier les propriétés dynamiques d'un bloc est d'utiliser la fonction setpropertyvalue.

La syntaxe est la suivante(remplacer les textes en gras par les valeurs correspondantes :

(setpropertyvalue ename_du_bloc "AcDbDynBlockProperty<nom_de_la_propriété_dynamique>" valeur_de_la_propriété)

Par exemple, avec ton bloc :

(setpropertyvalue bloc "AcDbDynBlockPropertyVisibilité1" "Te à 3 emboitements")

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
Il y a 1 heure, (gile) a dit :

Salut,

La façon la plus simple, à mon avis, pour modifier les propriétés dynamiques d'un bloc est d'utiliser la fonction setpropertyvalue.

La syntaxe est la suivante(remplacer les textes en gras par les valeurs correspondantes :

(setpropertyvalue ename_du_bloc "AcDbDynBlockProperty<nom_de_la_propriété_dynamique>" valeur_de_la_propriété)

Par exemple, avec ton bloc :

(setpropertyvalue bloc "AcDbDynBlockPropertyVisibilité1" "Te à 3 emboitements")

 

Bonjour,

J’ai essayé d’utiliser votre commande dans une fonction simple afin de mieux comprendre son fonctionnement. Le bloc s’insère correctement, mais l’état de visibilité ne change pas comme prévu.

Je me demande si j’ai mal utilisé la commande ou si quelque chose m’échappe. Pourriez-vous m’éclairer sur ce point ? Sachant que j'ai ça en message sur la barre de commande : Demande ADS erronée

Merci d’avance pour votre aide.

a(2).LSP Dessin2.dwg

Posté(e)

Le premier argument de setpropertyvalue doit être le nom d'entité (ename) de l'objet à modifier.

Dans le cas présent, il s'agit de la référence de bloc qui vient d'être insérée qu'on peut obtenir avec la fonction entlast qui renvoie la dernière entité créée.

(command "-INSERER" "ECLATE_PI_1" pt1 1 "" 0 "")
(setq bloc (entlast))
(setpropertyvalue bloc "AcDbDynBlockPropertyVisibilité1" "Te à 3 emboitements")

 

  • Like 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)
il y a 8 minutes, (gile) a dit :

Le premier argument de setpropertyvalue doit être le nom d'entité (ename) de l'objet à modifier.

Dans le cas présent, il s'agit de la référence de bloc qui vient d'être insérée qu'on peut obtenir avec la fonction entlast qui renvoie la dernière entité créée.

(command "-INSERER" "ECLATE_PI_1" pt1 1 "" 0 "")
(setq bloc (entlast))
(setpropertyvalue bloc "AcDbDynBlockPropertyVisibilité1" "Te à 3 emboitements")

 

Merci beaucoup, ça marche!

Invité LeMaîtreDuFoin
Posté(e)

Bonjour,

Je me permets de répondre à Monsieur Michel. Il est toujours attendrissant de voir quelqu’un découvrir AutoLISP comme on découvrirait un outil magique sans vraiment lire le mode d’emploi.

Alors, si je comprends bien : vous voulez automatiser l’insertion de deux blocs dynamiques avec états de visibilité, ajouter un texte, puis regrouper le tout avec la fonction GROUP, en imaginant que cela constitue une démarche rigoureuse ? L’intention est là. Le reste… beaucoup moins.

Vous parlez d’états de visibilité sans connaître la manipulation des propriétés dynamiques via AutoLISP. Et vous pensez qu’un simple GROUP suffit à faire le travail d’un vrai bloc structuré et intelligent ? C’est un peu comme si un vendeur de foin se prenait soudain pour un architecte, désolé, bien sûr, si vous êtes réellement vendeur de foin… auquel cas votre démarche aurait sans doute été plus structurée. L’enthousiasme est louable, mais le fond manque cruellement.

Il existe une documentation claire, des outils puissants, et des pratiques éprouvées. Encore faut-il les consulter avant de bricoler à l’aveugle.

Je vous encourage sincèrement à commencer par les bases. Parce que là, franchement, vous êtes en train de planter un piquet dans une prise électrique en espérant que ça trace un réseau.

Bien cordialement, en vous souhaitant de belles moissons de compréhension du LISP.

 

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é