Loïc MICHEL Posté(e) mardi à 15:13 Posté(e) mardi à 15:13 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.lspRecherche des informations… Citer
didier Posté(e) mardi à 15:36 Posté(e) mardi à 15:36 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 Citer Éternel débutant… Mon site perso : Programmer dans AutoCAD
Loïc MICHEL Posté(e) mercredi à 07:26 Auteur Posté(e) mercredi à 07:26 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.DCLRecherche des informations… Dessin2.dwgRecherche des informations… tmp.lspRecherche des informations… Citer
(gile) Posté(e) mercredi à 11:13 Posté(e) mercredi à 11:13 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") Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Loïc MICHEL Posté(e) mercredi à 13:08 Auteur Posté(e) mercredi à 13:08 Le 16/04/2025 à 11:13, (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") Développer 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).LSPRecherche des informations… Dessin2.dwgRecherche des informations… Citer
(gile) Posté(e) mercredi à 13:41 Posté(e) mercredi à 13:41 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") 1 Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Loïc MICHEL Posté(e) mercredi à 13:50 Auteur Posté(e) mercredi à 13:50 Le 16/04/2025 à 13:41, (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") Développer Merci beaucoup, ça marche! Citer
Invité LeMaîtreDuFoin Posté(e) vendredi à 08:30 Posté(e) vendredi à 08:30 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. Citer
Messages recommandés