Aller au contenu

Simplifier les modifications d'attributs pour diverses présentations ?


Messages recommandés

Posté(e)

Bonjour à tous,

 

Je viens vers vous car je perds un temps infini avec une manipulation que je rêverais de simplifier grâce à vos compétences en LISP.

 

Je m'explique. J'utilise un cartouche pour mes plans. Ce cartouche est dynamique, il a plusieurs visibilités, et des attributs qui sont communs et non communs à ces différentes visibilités. Ce cartouche, qui est donc un bloc, est utilisé dans toutes mes présentations.

Mon problème est le suivant:

Lorsque je veux modifier un attribut (quel qu'il soit, et sur n'importe quelle visibilité) et le propager partout, pas de soucis j'utilise le LISP "MAT" qui se substitue parfaitement  à l'express tool "GATTE" d'Autocad. La galère arrive lorsque je dois modifier des attributs dans certaines présentations et visibilités, et qu'ils ne doivent pas forcement être identiques d'une présentation à l'autre, d'une visibilité à l'autre. Je dois donc entrer dans une présentation, choisir une visibilité, modifier mes attributs, et faire ça pour mes 30 présentations.

Ce qui serait top c'est qu'un LISP puisse identifier mon cartouche (plus génériquement un bloc avec attributs), et ouvrir un tableau (à l'image du LISP "GEF" par exemple), et pouvoir choisir ce que l'on souhaite changer comme attributs dans ce tableau directement.

J'imagine une 1ère colonne répertoriant toutes les présentations dans lesquelles se trouve le bloc identifié. Avec le choix de cocher ou non les présentations où l'on souhaite apporter des modifications (+ une coche pour sélectionner/désélectionner tout). Et une seconde colonne qui répertorie tous les attributs du bloc (à l'image du gestionnaire des attributs de blocs d'Autocad sauf qu'il serait juste nécessaire d'avoir les étiquettes et la valeur déjà inscrite). Donc en modifiant un attribut, il se modifie sur toutes les présentations cochées en amont.

Il y a aussi 2 options qu'il serait top d'avoir dans ce LISP:

- La première c'est d'avoir la possibilité de cocher une case qui permettrait de réinitialiser le bloc dans toutes les présentations en même temps si on le souhaite. Je parle sans remettre les attributs par défaut. Juste le réinitialiser comme lorsqu'on fait un clic droit puis "réinitialiser le bloc" dans Autocad.

- La seconde c'est d'avoir la possibilité de choisir la visibilité du bloc que l'on souhaite avoir dans chaque présentation en sortant de ce LISP. Par exemple avec un menu déroulant à côté du nom de chaque présentation (dans la première colonne), où l'on pourrait choisir la visibilité active que l'on souhaite avoir dans chaque présentation.

Je rêve peut-être éveillé mais ce LISP serait magique. Est-ce quelque chose de réalisable?

Je joins une image de ce que j'imagine, ça sera peut-être plus clair que mes propos.

Merci pour vos retour.

Capture tableau.JPG

Posté(e)

Coucou,

En un sens, cela me semble réalisable (dans les grandes lignes et en théorie) cependant cela représente un programme complexe. Habituellement une demande comme celle-ci ne devrait pas être quémandée sur des forums bénévoles...
En me basant simplement sur ton image (je tiens à souligner tout de même que tu as fait l'effort de fournir toutes les données d'entrées d'emblée, c'est rare !), je dirais que ce qui ne sera pas forcément faisable c'est l'aspect "liste déroulante" pour afficher l'ensemble des présentations. A mes yeux il n'est pas faisable de faire cela et donc plus le nombre de présentations sera important, plus le nombre de lignes sera important et donc par extension, la hauteur de la boîte de dialogue.

Bisous,
Luna

Posté(e)

Bonjour @Luna,

Merci pour  ta réponse.

Je suis tout à fait d'accord avec toi, c'est ce que je me disais en postant ce message même si le terme "quémander" me dérange un peu. Étant indépendant je sais au combien le temps que l'on peut passer sur certaines choses qui paraissent simples quand on ne connait pas le sujet. Je me doute que ce LISP est quelque chose qui demande du travail et je sais que les personnes qui sont sur ce forum aident de manière bénévole les gens qui passent par là. J'ai d'ailleurs pu récupérer quelques LISP ici grâce à ceux qui ont des problématiques et à ceux qui y répondent favorablement. Et je remercie tout ce beau monde! C'est top et ça aide beaucoup lorsqu'on travail 10 à 12h par jour sur AUTOCAD. En ce qui concerne ma demande, je me dis surtout que c'est aussi un forum de passionnés et que dans ce sens, n'ayant rien trouvé qui ressemble à ma problématique, cela peut être intéressant à réaliser pour quelqu'un qui aime faire du LISP en plus de m'aider. C'est d'ailleurs pourquoi je tente d'être le plus clair possible dans mes propos et que j'ai même fait un dessin de ce que j'imagine. C'est par respect pour ceux qui me liront et qui souhaiteraient se pencher sur le sujet. Personnellement j'adorerais savoir le faire moi-même, et J'ai déjà réussi à comprendre quelques petites choses dans les codes que je récupère et lis. J'ai d'ailleurs trop hâte de me pencher sur le sujet réellement, faire les miens et les partager tout comme le fait @(gile). J'ai plein d'idées, l'esprit et la rigueur qu'il faut pour faire ce genre de choses. C'est juste que j'ai absolument pas de temps à moi pour le moment à cause de mon boulot qui ne me laisse même pas mes week-end de repos. Donc voilà. Je n'avais pas du tout l'intention de parler de moi sur ce forum, mais je prends le temps et réponds du mieux que je peux à ton retour.

Pour revenir au sujet et à ta réponse, mon image est une idée globale qui n'est pas figée et doit être forcement adaptable à un code le plus simple à faire possible. Et en ce qui concerne le menu déroulant, dans mon idée il ne concerne pas les présentations mais les différentes visibilités du bloc. Après si c'est réalisable et plus simple en terme de programmation de faire une colonne qui les répertorie... pourquoi pas! Moi je suis preneur de discussions, d'échanges, et de partage même si ça ne mène pas à la réalisation finale de ce LISP.

Bien amicalement,

 

ApertoLibro
Posté(e)

Et au sujet de ces "visibilités actives de présentations", même si cette option serait un grand plus à ce LISP, elle n'est pas la priorité au final. L'important c'est d'avoir le choix de modifier en même temps, les attributs du bloc de certaines des présentations. Et ceux grâce à la colonne répertoriant tous les attributs du bloc (donc toutes visibilités confondues), et le choix des présentations à modifier par "cochage".

Posté(e)

Coucou,

Lorsque je faisais allusion aux listes déroulantes pour l'affichage des présentations, je faisais référence à celle-ci :image.thumb.png.189f5f9ff4c78d71ff4ab1554c388b23.png
Autrement dit, si tu as 10 présentations dans ton dessin, ta boîte de dialogue aura 10 lignes. Si tu as 30 présentations, 30 lignes, etc... Cela signifie que à partir d'un certain nombre de présentations, ta boîte de dialogue aura une hauteur supérieure à la hauteur d'affichage de ton écran, d'où ma remarque sur les problèmes que cela peut engendrer (aussi bien côté utilisation que programmation).

Ensuite, si je comprends bien la colonne de droite correspond à la liste de l'ensemble des attributs en commun dans ta définition de bloc, c'est bien cela ? Autrement dit, si plusieurs présentations sont cochées, la valeur de l'attribut correspondra soit à la même valeur actuelle (dans le cas où l'ensemble des présentations cochées possèdent la même valeur) sinon, à une valeur arbitraire (comme *VARIEES*) dans le cas où au moins l'une des valeurs est différentes.

Car en me basant sur mon expérience personnelle, j'ai tendance personnellement à passer par un filtre de sélection et à gérer ces valeurs d'attributs communs via la fenêtre de propriétés (idem pour les visibilités). En effet, bien qu'il ne soit pas possible de sélectionner manuellement des blocs appartenant à des espaces de présentations différents, cela est possible via la programmation (via la fonction (ssget) notamment). Et en conservant le jeu de sélection ainsi créé, la palette de propriété affiche les propriétés du jeu de sélection (autrement dit, l'ensemble des blocs sur les présentations différentes). Modifier ensuite les valeurs communes d'attributs, les visibilités ou lancer une commande sur le jeu de sélection (dans la limite d'AutoCAD, certaines commande ne fonctionneront pas si la présentation n'est pas courante) est tout à fait faisable en un seul clic.

Bisous,
Luna

Posté(e)

Bonsoir et merci beaucoup de prendre du temps pour éclairer ma lanterne !

En ce qui concerne la seconde colonne, ce ne sont pas les attributs qui sont uniquement en commun. Ça serait la liste complète de tous les attributs du bloc. Qu'ils soient communs ou non aux visibilités n'a pas d'incidence sur la modification, puisque chaque étiquette reste unique.  Si je change la valeur d'une étiquette qui est visible  dans les visibilités 1 et 2, et bien ça ne changera que dans les visibilités 1 et 2 puisque les visibilités 3 et 4 ne la contienne pas.

Cette colonne serait à l'image de celle du gestionnaire des attributs natif d'autocad. Lorsque tu choisis un bloc, le gestionnaire te montre toutes les étiquettes du bloc. Que le bloc ait des visibilités ou non, ca n'a pas d'importance. Chaque étiquette est unique.

Pour la barre de déplacement des colonnes, je me base simplement sur le LISP "GEF" de Gile. Qu'il y ait 5 ou 40  fenêtres, son LISP  les indique dans le tableau. Pour moi (mais je me trompe peut-être car pour l'instant je ne fonctionne qu'à travers ma seule logique et certainement mon manque de compétences), c'est une ligne de programmation qui dit "SI il y a X présentations qui contiennent ce bloc, ALORS tu affiches X noms de présentations". Il n'y a pas a savoir à l'avance combien on a de présentations pour en faire une ligne de code pour chacune d'entre elles. Encore une fois, tout comme le fait "GEF". Il indique toutes les X fenêtres qu'il trouve dans les présentations en y indiquant le nom des présentations dans lesquelles sont ces fenêtres. Et en ce qui concerne la barre de déplacement, elle ne pourrait pas apparaitre et s'agrandir grâce à un seul paragraphe de lignes de code qui réagit en fonction de l'espace visible du tableau? J'essaierai d'aller comprendre comment ça marche en allant décortiquer le LISP "GEF". Je me trompe peut-être complétement.

Ensuite les cases à cocher seraient là pour que le code dise "SI la case du nom de telle présentation est cochée, ALORS le bloc que cette présentation contient sera modifié en fonction de la colonne 2".

Je n'ai aucune connaissance de programmation. Comme je le dis je me base uniquement sur ce que je crois comprendre en lisant les LISP que je récupère ici et ma seule logique qui doit être très basique  😅

 

Capture.JPG

Posté(e)

Je viens de te relire encore, et effectivement lorsque tu dis "Autrement dit, si plusieurs présentations sont cochées, la valeur de l'attribut correspondra soit à la même valeur actuelle (dans le cas où l'ensemble des présentations cochées possèdent la même valeur) sinon, à une valeur arbitraire (comme *VARIEES*) dans le cas où au moins l'une des valeurs est différentes.)", tu as raison car il y aurait forcement conflit de valeurs si 2 présentations cochées n'ont pas la même valeur pour un seul attribut! 👍

Et en ce qui concerne "SSGET", je veux bien essayer mais comment ça marche et que dois-je faire pour tester ça?

Posté(e)

Coucou,

Je n'ai pas de dispo aujourd'hui pour te fournir des exemples concrets de programmation mais la manière dont le LISP GEF est présenté diffère de ta version : Le LISP GEF utilise ce qu'on appelle une (list_box) en langage DCL (c'est le langage utilisé pour créer les boîte de dialogue en LISP). Une (list_box) permet en effet d'avoir une liste d'éléments avec une barre de défilement si le nombre de lignes dépasse la hauteur maximale autorisée pour la (list_box). Or ce que tu cherches à faire, c'est d'avoir pour chaque ligne (= présentations), une case à cocher (ce qui correspond à un (toggle) en DCL) et d'une liste déroulante (list_box) pour les visibilités. Bien que l'utilisation de la case à cocher peut être évitée en utilisant le fonctionnement de GEF, tu n'auras pas moyen de choisir la visibilité pour chacune des présentations sélectionnées.

On pourrait cependant envisager de définir une visibilité commune pour les présentations sélectionnées mais du coup cela serait moins intuitif. On pourrait également prévoir d'afficher plus de lignes en affichant le nom de présentation + nom de visibilité et donc décliner pour chaque présentation toutes les visibilités possible pour le bloc (mais du coup, si le bloc possède 4 visibilités par exemple, et que tu as 10 présentations, alors la liste possèdera 40 lignes, 4 pour chaque présentations). Bref, il faudra trouver des compromis par rapport à ton exemple de DCL 🙂

Concernant le (ssget), je pourrais te proposer quelques exemples demain, mais cela serait plus simple d'avoir un .dwg d'exemple pour tester et te montrer ce qui pourrait être faisable. Un simple (ssget) ne fonctionnera évidemment pas car tu as des blocs dynamiques mais j'avais développé une fonction que j'utilise tous les jours pour filtrer mes sélections (cependant elle n'est pas facile d'utilisation et encore bien incomplète par rapport au fonctionnement souhaitée).

Bisous,
Luna

Posté(e)

Bonsoir @Luna,

Je suis désolé pour cette réponse très tardive, je n'ai pas trouvé le temps de te répondre avant.

Merci pour tes explications ça me parait très clair au sujet des "list_box" et des "toggles".

Donc pour répondre au 2ème paragraphe de ta réponse, effectivement en terme de LISP, le moins compliqué serait de ne pas avoir à mettre de case à cocher ni de menu déroulant pour les visibilités si je comprends bien. Comme tu le dis ça serait moins intuitif mais ça serait déjà ça. En effet la case à cocher était là pour éviter la même modification plusieurs fois (donc pour plusieurs présentations). Mais si déjà, à la manière de GEF, j'ai un tableau qui répertorie chaque présentation (où il y a mon bloc) dans la première colonne, et tous les attributs existants de cette présentation dans la seconde colonne, cela me permettrait de faire toutes mes modifs dans ce tableau. Donc sans avoir à aller moi même d'une présentation à l'autre pour faire mes modifs d'attributs. Et pas besoin de mettre plus de lignes en affichant "nom de présentation + nom de visibilité" comme tu le suggères, car les attributs en commun des visibilités auront la même valeur dans une même présentation!

En ce qui concerne le "ssget", j'ai l'impression que ca va devenir trop complexe non?

Posté(e)
Le 09/05/2023 à 14:05, Curlygoth a dit :

hello,

Pour avoir une simplification pour la réalisation des fenetres, je te conseil le VBA 😉

 

une exemple parmis tant d'autres :

 

image.png.633e8037d4ec71c2cd73bf14316f44db.png

Bonsoir @Curlygoth,

Comme je le disais plus haut à Luna, désolé pour la réponse tardive.

Saurais-tu m'en dire plus sur le VBA et ce que je peux en faire pour mon problème de modifs d'attributs dans diverses présentations? Est-ce facile d'accès pour quelqu'un sans connaissance en programmation?

Je viens de voir que c'est quelque chose qui était avant dans Autocad, mais qui doit aujourd'hui être installer en sus.

Merci d'avance.

Posté(e)

Oui pour moi le VBA est bien plus simpliste que le lisp

c'est comme le vba d'excel

Saurais-tu m'en dire plus sur le VBA et ce que je peux en faire pour mon problème de modifs d'attributs dans diverses présentations?

oui ! une liste avec le nom de tes attributs et un textbox pour y mettre tes valeurs par exemple

aujourd'hui j'utilise une listbox mais plus complexe à mettre en place

Est-ce facile d'accès pour quelqu'un sans connaissance en programmation?

oui car tres anglais ! (for i = 0 to comp... if else end if etc..

Je viens de voir que c'est quelque chose qui était avant dans Autocad, mais qui doit aujourd'hui être installer en sus.

oui 😉

Posté(e)

Coucou,

@Apertolibro57, j'insiste sur le fait qu'un DWG d'exemple permettrait de t'aider au mieux et plus efficacement (pour les phases de tests, mais aussi pour mieux adapter le programme à tes besoins).
Concernant le (ssget), c'est difficile de t'expliquer comme chat, mais dit toi que c'est le même principe que si tu sélectionnes plusieurs références de blocs dans ton espace objet : tu peux modifier leurs attributs, visibilités, propriétés en une seule fois via la palette propriétés. Après c'est un simple jeu de sélection/désélection pour affecter les propriétés communes aux bonnes références et isoler les références qui doivent être modifiées individuellement.

@Curlygoth, pour le coup je ne dirais pas que le VBA et plus simple que le LISP ou inversement. Tout dépends de notre logique de réflexion et de notre compréhension du langage. Car pour le coup le LISP c'est aussi de l'anglais ^^
Pour ma part, je n'ai eut aucune difficultés à apprendre le LISP et faire ce que je souhaitais avec en peu de temps tandis que le VBA me pose encore et toujours des migraines. La vrai différence notable entre le VBA et le LISP c'est la simplicité de création d'une boîte de dialogue en VBA comparé au DCL+LISP 😜

Bisous,
Luna

Posté(e)
Citation

Pour ma part, je n'ai eut aucune difficultés à apprendre le LISP et faire ce que je souhaitais avec en peu de temps tandis que le VBA me pose encore et toujours des migraines. La vrai différence notable entre le VBA et le LISP c'est la simplicité de création d'une boîte de dialogue en VBA comparé au DCL+LISP 😜

Je suis dispo jusqu'à  fin Juin après vous ne me verrez (peut-être) plus (j'espere passer de nouveau en septembre si tout va bien)

VBA =

VAriable1 = valeur

liste = array(index0,index1,index2,...indexn)

Thisdrawing.               classe du dessin (base de tout)

 

  • Like 1
Posté(e)

Salut,

S'il est une différence majeure entre LISP et VBA à prendre en compte par ceux qui veulent se lancer dans la programmation d'AutoCAD, c'est qu'il y a infiniment plus d'exemple de code et d'aide disponibles sur les forums en LISP qu'en VBA.

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

Posté(e)
Il y a 2 heures, (gile) a dit :

Salut,

S'il est une différence majeure entre LISP et VBA à prendre en compte par ceux qui veulent se lancer dans la programmation d'AutoCAD, c'est qu'il y a infiniment plus d'exemple de code et d'aide disponibles sur les forums en LISP qu'en VBA.

Merci pour le conseil.

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é