Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    208

Tout ce qui a été posté par (gile)

  1. (gile)

    DYN2STAT

    Comme tu le sais certainement, un nom de bloc (comme un nom de calque, de style de texte, etc.) doit être unique dans le dessin. Quand on modifie les propriétés d'un bloc dynamique, AutoCAD crée une nouvelle définition de bloc anonyme (*Uxxx) parce que ce bloc ne peut avoir le même nom que le bloc dynamique non modifié. Le LISP ne peut pas nommer des blocs différents avec le même nom que le bloc de base.
  2. Ce n'est plus le même problème que la question initiale. Si tu veux qu'on t'aide à résoudre un problème différent, il faut que tu précises de quoi tu pars. Par exemple, s'il s'agit d'entités AutoCAD (polyligne et point nodal), tu peux définit un SCU Objet sur la polyligne avant de récupérer les lowerLeft et upperRight
  3. (gile)

    Bloc "dubloc"

    Salut, Edit_Bloc sur cette page.
  4. Les livres que je connais datent un peu. Mais celui que je continue à consulter (C# et .NET Versions 1 à 4, Gérard Leblanc) traite assez complètement les fondamentaux et n'est pas pour autant obsolète. Les versions de C# ultérieures apportent essentiellement du "sucre syntaxique" et de toutes façon, pour AutoCAD, on ne peut utiliser que le Framework .NET 4.8 qui ne supporte que C# 7.
  5. Salut, Si tu veux te mettre au .NET je te recommande fortement de te former d'abord à C# / .NET hors AutoCAD (il existe de nombreuses formations, livres, tutoriels) jusqu'à être à l'aise avec le langage C#, l'IDE Visual Studio, le Framework .NET et les principes de la Programmation Orientée Objet (héritage, encapsulation, polymorphisme). tu pourras alors t'attaquer sereinement à l'API .NET d'AutoCAD qui n'est pas toujours très bien foutu et parfois assez complexe.
  6. Salut, Tu peux telecharger le dessin récupéré, décomposé et purgé. J'ai dû utiliser de la programmation .NET pour le décomposer.
  7. Déclarer une version max est obligatoire pour les plug-ins publiés sur Autodesk App Store et il faut systématiquement tester le plug-in et le faire approuver à chaque nouvelle version. Par contre, pour ceux que j'ai donné sur CADxp j'ai fini par retirer la version max parce que j'oubliais régulièrement de les mettre à jour.
  8. Voir ce sujet. C'est en partie pour répondre à la question "Comment placer un LISP dans le chargement automatique" que j'ai écrit ce tutoriel.
  9. (gile)

    Lisps de gile

    @Dilack33 Il n'y a pas de raccourci. Pour atteindre les paramètres, il suffit de faire Entrée (ou clic droit) au lieu de sélectionner des objets. Comme avec les commandes natives, s'il s'agissait d'une option elle apparaitrait entre crochets dans la ligne de commande.
  10. Petite mise à jour du tutoriel : l'exemple de dossier .bundle charge deux programmes LISP (Edit_Bloc et TotalArea) dont un avec un fichier DCL.
  11. @Olivier Eckmann Je comprends mieux ton problème. Il ne concerne que les BE ou développeurs qui fournissent des applications et ça n'enlève rien à l'intérêt de fournir des dossiers .bundle (ou des installeurs qui les déploient) aux clients.
  12. @Olivier Eckmann En même temps, le principe du .bundle, c'est le chargement automatique... Et ton problème ne me semble pas directement lié au chargement automatique mais plutôt au fait qu'on ne peut pas décharger/recharger une DLL(donc c'est la première chargée qui prévaut) et, au contraire, charger un LISP (ou fas ou vlx) de même nom, écrase le précédent. Et si on ne peut pas conditionner le chargement d'un programme à un profil, on peut le faire à un produit (Civil, MAP, Archi, MEP, ...)
  13. Salut, Vous avez écrit un programme LISP (ou autre) que vous souhaitez partager avec vos collègues, vos amis ou tout le monde mais vous n'avez pas envie d'expliquer à chacun comment l'installer, dans quel dossier mettre les ressources, etc. Je propose un petit tutoriel avec un exemple très simple pour apprendre à utiliser les bases du mécanisme de chargement automatique avec un dossier .bundle et à créer un installeur pour placer ce dossier dans le répertoire idoine. Ce tutoriel est, bien sûr, disponible sur cette page.
  14. et ces personnes que tu décris sont censées utiliser AutoCAD ?...
  15. Si tu penses vraiment que l'utilisateur est incapable d'entrer : %appdata% dans la barre d'adresse de l'explorateur, puis d'aller dans Autodesk\Application Plugins pour y copier un dossier, tu peux toujours faire un installeur (avec inno setup par exemple) qui déploiera ce dossier dans le bon répertoire.
  16. Dans le cas présent, c'est toi le "CAD Manager" / développeur. Avec un dossier .bundle basique contenant un fichier de métadonnées "PackageContents.xml" et un sous dossier "Contents" contenant "vos Lisps", l'utilisateur n'aurait qu'à copier le dossier dans un répertoire idoine.
  17. Si tu tiens à passer par la commande appload*, tu peux demander à tous les utilisateurs de charger et de mettre dans la valise (Au démarrage) un fichier LISP qui contient des expressions LISP pour charger d'autres fichiers LISP, initialiser des variables système, etc. Quand un fichier .lsp est chargé dans un dessin, il est exécuté. Ce qui signifie que toutes les expressions qu'il contient sont évaluées. Si ces expressions sont des définitions de fonctions (defun ...), les fonctions définies seront utilisables dans la session pour ce dessin. Si ces expressions sont de simples instructions : (setvar 'pickfirst 1), (load "toto.lsp), (alert "Hello world !"), elles seront simplement exécutées. * personnellement je pense que la commande appload est destinée à l'utilisateur final (dessinateur) et qu'un "CAD Manager" ou un développeur privilégiera des méthodes plus adaptées au déploiement et la maintenance comme les fichiers acaddoc.lsp, *.cuix et *.mnl et/ou le mécanisme Autoload via un dossier .bundle (voir la documentation à propos du mécanisme autoloader et du format des fichier PackageContents.xml).
  18. Je ne comprends pas bien ce que tu cherches à faire, mais je ne pense pas que tu aies besoin d'utiliser S::STARTUP. Si un fichier de chargement automatique (.mnl ou acaddoc.lsp) contient des expressions LISP du style : (load "toto.lsp") (alert "toto.lsp chargé") ces expressions seront automatiquement exécutées à chaque ouverture de dessin.
  19. Regarde bien ce que j'ai écrit. Avec les clusters, pas besoin d'un action_tile pour chaque radio_button, juste un seul pour le boxed_radio_column, idem pour les appels à mode_tile, on grise ou dégrise tout le cluster d'une seule ligne au lieu de le faire pour chaque edit_box.
  20. Alors je me permet d'insister à propos de l'utilisation de clusters (boxed_*) qui clarifieront l'affichage et permettront un code LISP plus simple. Un boxed_radio_* permet de récupérer directement la clé de l'option choisie et il est possible de griser/dégriser l'ensemble du contenu d'un cluster. En reprenant l'exemple précédent, DCL Test :dialog{ label = "Titre"; :row{ :boxed_radio_column{ label="Présence d'un cadre"; key="Cadre"; :radio_button{ label="Avec cadre"; key="AvecCad"; } :radio_button{ label="Sans cadre"; key="SansCad"; } } :boxed_column{ label="Dimensions"; key="Dim"; :edit_box{ label="Long. cadre ="; key="LongCad"; edit_width=4; } :edit_box{ label="Larg. cadre ="; key="LargCad"; edit_width=4; } } :boxed_column{ label="Epaisseurs"; key="Epais"; :edit_box{ label="Epais. long ="; key="EpaisLong"; edit_width=4; } :edit_box{ label="Epais. larg ="; key="EpaisLarg"; edit_width=4; } } } spacer; ok_cancel; } LISP (defun c:test (/ dcl_id) (setq dcl_id (load_dialog "B:\\Desktop\\Test.dcl")) (new_dialog "Test" dcl_id) (set_tile "Cadre" "AvecCad") (action_tile "Cadre" (vl-prin1-to-string '(if (= $value "AvecCad") (progn (mode_tile "Dim" 0) (mode_tile "Epais" 0) ) (progn (mode_tile "Dim" 1) (mode_tile "Epais" 1) ) ) ) ) (start_dialog) (unload_dialog dcl_id) (princ) )
  21. Si ta boite de dialogue est trop grande pour pouvoir l'organiser clairement avec des cadres (boxed_*), c'est, à mon avis, qu'il est temps de reconsidérer la question dans sa globalité. Une boite de dialogue trop grande, c'est ce que j'appelle le syndrome du couteau suisse : quand il a trop de lames, on n'arrive plus à trouver facilement celle qu'on cherche... On utilise des boites dialogue quand on estime que les saisies en ligne de commande serait trop confuses, faire des boites de dialogues qui ne seraient pas plus claires n'est pas une solution. Essaye de voir si tu ne peux pas la séparer en plusieurs boites plus petites qui seraient appelées en cascade et uniquement si nécessaire. Dans ton dernier exemple, on peut supposer que si on choisit l'options "Sans cadre", il n'est pas nécessaire de spécifier les longueur, largeur et épaisseurs.
  22. Salut, Plutôt que d'utiliser le chargement automatique via appload, tu devrais créer un fichier .mnl si chargement est lié à un CUIX ou un fichier acaddoc.lsp. Tu pourras plus facilement gérer le chargement des fonction à charger systématiquement dans chaque dessin (fonction load) ou uniquement au premier appel d'une commande LISP (fonction autoload). Tu pourras aussi utiliser ce fichier pour exécuter automatiquement des expressions LISP à chaque ouverture de dessin (par exemple pour donner des valeurs à des variables système ou à des ldata).
  23. Encore une fois, commence toujours par faire au plus simple. Le DCL ne permet pas toujours un contrôle précis de la position des éléments. Comme dit par d'autres, si l'apparence des boites de dialogues est primordiale, il faut passer à Open/Object DCL, VBA ou .NET. En groupant les contrôles dans des boxed_row ou boxed_column, on peut plus facilement arriver à des résultats acceptables. Test :dialog{ label = "Titre"; :boxed_radio_row{ label="Présence d'un cadre"; spacer_1; :radio_button{ label="Avec cadre"; key="AvecCad"; } :radio_button{ label="Sans cadre"; key="SansCad"; } } :row{ :boxed_column{ label="Dimensions"; :edit_box{ label="Long. cadre ="; key="LongCad"; edit_width=4; } :edit_box{ label="Larg. cadre ="; key="LargCad"; edit_width=4; } } :boxed_column{ label="Epaisseurs"; :edit_box{ label="Epais. long ="; key="EpaisLong"; edit_width=4; } :edit_box{ label="Epais. larg ="; key="EpaisLarg"; edit_width=4; } } } spacer; ok_cancel; }
  24. Peut-être comme ça : Test : dialog{ label = "Titre"; :row{ :text{ label= "Ouvrant principal :"; alignment=centered; } :radio_row{ :radio_button{ label="Départ"; key = "CharDep"; } :radio_button{ label="Arrivée"; key = "CharArr"; } } :toggle{ label = "Poignée int."; key = "PoiInt"; } :toggle{ label = "Poignée ext."; key = "PoiExt"; } :column{ ok_button; cancel_button; } } }
  25. Salut, Je prends le train en route, mais, personnellement, je commencerais par faire "au plus simple". Test : dialog{ label = "Titre"; :row{ :edit_box{ label="Test à aligner : Départ ="; key = "DimChapDep"; edit_width=4; } :edit_box{ label="Arrivée ="; key = "DimChapArr"; edit_width=4; } } spacer; ok_cancel; }
×
×
  • 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é