Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

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

  1. (gile)

    Gestion des erreurs

    Salut, Tout d'abord, on ne peut pas renommer le style "Standard". Ensuite, le groupe DXF 3 pour les style de ligne de repère multiple ne correspond pas au nom du style mais à sa description (CF l'aide). Pour renommer un style de ligne de repère multiple avec entmod il faut agir directement sur les entrées dans le dictionnaire : (defun renameMLeaderStyle (oldName newName / mlDict) (and (/= (strcase oldName) "STANDARD") (setq mlDict (dictsearch (namedobjdict) "ACAD_MLEADERSTYLE")) (member (cons 3 oldName) mlDict) (entmod (subst (cons 3 newName) (cons 3 oldName) mlDict)) ) )
  2. (gile)

    Lisp Changement calques

    Re, Petite explication sur initget et getkword. initget permet d'initialiser la validité des valeurs pour l'appel suivant d'une fonction de saisie getXXX (ici getkword pour la saisie d'une option). Voir l'aide complète en anglais ou le chapitre 7.1 de Introduction à AutoLISP. ;; Initialisation de la saisie (initget 1 "Eau eLec Tel") 1 : empèche l'utilisateur de faire juste Entrée (autrement dit, le force à saisir une option). "Eau eLec Tel" : définit les entrées valides et leurs alias (la lettre en majuscule). ;; Saisie de l'option (setq rep (getkword "\nChoisissez un réseau [Eau/eLec/Tel]: ")) [Eau/eLec/Tel] : les options apparaitront dans le menu contextuel ou la saisie dynamique de la commande. Que l'utilisateur saisisse le mot entier ou uniquement son alias et quelle que soit la casse, getkword retourne toujours le mot entier tel que définit dans initget. Exemple : saisir l ou L ou eLec ou elec retourne "eLec".
  3. (gile)

    Lisp Changement calques

    Salut, Quelques remarques en plus de celle de Patrick_35 concernant initget et getkword : - prends l'habitude de déclarer localement tes variables ; - tu peux utiliser getvar pour modifier la variable système "CLAYER" qui gère le calque courant ; - tu peux utiliser le dernier point cliqué comme premier argument de getpoint pour avoir la 'ligne élastique' ; - tu peux calculer la longueur au fur et à mesure que l'utilisateur spécifie le point suivant en utilisant deux variables pour les points ; - tu peux utiliser directement la dernière valeur de la variable du dernier point cliqué pour l'insertion du texte.
  4. Salut, Parmi ces blocs, il n'y en aurait pas qui ont plusieurs attributs avec la même étiquette ? Je sais, AutoCAD le permet, mais je trouve que c'est une aberration.
  5. (gile)

    script unité

    La commande -DWGUNITS est équivalente à -AECDWGUNITS, mais on peut noter que dans un AutoCAD "vanilla", la première fois qu'on lance l'une ou l'autre les bibliothèques AEC (object enablers) sont chargées et je pense que dans ce cas l'unité de longueur ne concerne que les objets insérés. Commande: -DWGUNITS Chargement de Base AEC... Chargement de Base étendue AEC... Chargement de Noyau AEC... Unités de dessin: 1. Pouces 2. Pieds 3. Millimètres 4. Centimètres 5. Décimètres 6. Mètres Unité de longueur <3>: Formats d'affichage des unités de dessin: 1. Scientifique 2. Décimal Format d'affichage linéaire <2>: Précision de l'affichage linéaire <4>: Mettre à l'échelle les objets provenant d'autres dessins lors de leur insertion? [Oui/Non] <Oui>: o Mettre en correspondance INSUNITS et les unités de dessin? [Oui/Non] <Oui>: o
  6. Salut, Quand tu fais un clic droit sur un fichier DWG puis Propriétés, dans le champs "S'ouvre avec", choisis "AutoCAD DWG Launcher".
  7. (gile)

    script unité

    Salut, Dans AutoCAD de base (vanilla) la notion d'unités de dessin n'existe pas vraiment. AutoCAD ne gère les unités dans que pour les mises à l'échelle lors des insertions de blocs. Dans ce cas il suffit de modifier la valeur de la variable système INSUNITS. Par contre, AutoCAD MEP ou Archi gèrent les unités de dessin (en plus des unités d'insertion). La commande _-AECDWGUNITS permet de paramétrer l'unité de dessin en ligne de commande.
  8. Tout simplement comme ça : (if (setq file (getfiled "Créer un fichier" "" "xml" 1)) (writeUTF-8 "<?xml version=\"1.0\" encoding=\"utf-8\" ?> <Liens> <Lien Site=\"CADxp\" Url=\"http://cadxp.com\" /> <Lien Site=\"gileCAD\" Url=\"http://gilecad.azurewebsites.net\" /> </Liens>" file ) ) avec la routine writeUTF-8 chargée bien sûr...
  9. Salut, Tu peux essayer ça (pas testé en profondeur) (defun writeUTF-8 (text filename / stream) (if (setq stream (vlax-create-object "ADODB.Stream")) (vl-catch-all-apply '(lambda () (vlax-put stream 'Type 2) (vlax-put stream 'Charset "utf-8") (vlax-invoke stream 'Open) (vlax-invoke stream 'WriteText text 0) (vlax-invoke stream 'SaveToFile filename 2) ) ) ) (and stream (vlax-release-object stream)) )
  10. (gile)

    Mode CLASSIQUE ou RUBAN

    +1 En même temps, je ne travaille pas en production. Je n'utilise le ruban que pour la modélisation 3d (et encore) pour tout le reste c'est au clavier ou parfois avec les menus et uniquement les barres d'outil Calque et Propriétés.
  11. (gile)

    Inverser la selection

    Salut, Regarde sur cette page.
  12. Re, As-tu lu attentivement ma réponse et les liens qu'elle contient ? Sinon, le chemin vers le bureau c'est : C:\Users\\Desktop En LISP tu peux faire: (load (strcat "C:\\Users\\" (getenv "UserName") "\\Desktop\\pic.lsp"))
  13. Pour que (load "ChargeLisp.lsp") fonctionne il faut que le fichier soit dans un répertoire des chemins de recherche de fichiers de support d'AutoCAD. Sinon, il faut mettre le chemin complet du fichier LISP. Je rappelle l'existence de ce sujet qui couvre presque exhaustivement les différentes façons de charger un LISP. Je rappelle aussi que la fonction LISP autoload qui permet de ne charger un fichier LISP qu'au premier appel d'une des commande qu'il définit. Exemple : - le fichier Fichier1.lsp définit les commandes CMD1 et CMD2 avec (defun c:cmd1 ...) et (defun c:cmd2 ...) ; - le fichier Fichier2.lsp définit la commande CMD3 ; - dans un fichier de chargement automatique (acaddoc.lsp, acad.mnl ou tout autre fichier .mnl de même nom qu'un cuix partiel), on écrit : (autoload "Fichier1.lsp" '("CMD1" "CMD2")) (autoload "Fichier2.lsp" '("CMD3")) Ainsi, Fichier1.lsp ne sera chargé dans le dessin que quand l'utilisateur appellera CMD1 ou CMD2, idem pour Fichier2.lsp. Cet appel peut se faire via une macro qui n'a alors plus à se préoccuper du chargement des fichiers : ^C^CCMD1;
  14. Peut-être, mais ce n'est pas ce que tu disais dans ta réponse, c'est pourquoi je me suis permis de corriger.
  15. Non, ce qui importe c'est le fichier DCL soit dans un répertoire de chemins de recherche (même si le LISP est dans un autre répertoire) Par exemple, ce LISP charge le fichier DCL en faisant : (if (findfile "rbloc.dcl") (progn ... (setq dcl_id (load_dialog (findfile "rbloc.dcl"))) ... ) )
  16. Si je comprends bien "boucler sur L'initialisation de P1", je vais essayer d'expliquer une notion fondamentale qui illustre comment la puissance et l'élégance du LISP découlent de sa simplicité. En LISP, les expressions conditionnelles (if, while, ...) considèrent que la condition est "vraie" tant que le prédicat n'est pas nil. Le symbole protégé T n'a que cette fonction : T est équivalent à (not nil) mais toute autre valeur (nombre, chaîne, liste non vide) est aussi considérée comme vraie. D'autre part, la fonction getpoint retourne une liste de 3 nombres (point) si l'utilisateur a cliqué un point à l'écran ou entré un point valide en ligne de commande (3 nombres séparés par des virgules) et nil s'il fait Entrée, Espace ou clic droit (Echap génère une erreur LISP). Donc pour boucler sur une entrée utilisateur, on peut utiliser la fonction while avec comme prédicat le retour de l'invite utilisateur (getpoint) : (defun c:TGCAN(/ p1 p2 largcan hautcan z1 z2 p1b p2b cc) (initget 7) (setq largcan (getdist "\nSpécifier la largeur du caniveau: ")) (initget 7) (setq hautcan (getdist "\nSpécifier la hauteur du caniveau: ")) (while (setq p1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq p2 (getpoint p1 "\n cliquer le 2eme point à l'écran ")) (setq Z1 (- (caddr p1) hautcan)) (setq Z2 (- (caddr p2) hautcan)) (setq p1b (list (car p1) (cadr p1) z1)) (setq p2b (list (car p2) (cadr p2) z2)) (setq cc (getvar "clayer")) (command "-calque" "etablir" "PRJ_CANIVEAU" "") (command "-calque" "couleur" "150" "PRJ_CANIVEAU" "") (command "_POLYSOLID" "largeur" largcan "hauteur" hautcan "justifier" "centre" "_non" p1b "_non" p2b "") (setvar "clayer" cc) ) ) Il sera ensuite judicieux d'utiliser la même méthode de validation pour p2 mais avec un if ou un and. Et aussi de sortir la gestion du calque courant de la boucle. On pourra aussi, pour la création du calque voir du côté de entmake.
  17. Salut, En AutoLISP, un "point" est une liste de nombres réels (les coordonnées). Tu as vu comment récupérer séparément chacune des coordonnées avec car, cadr et caddr, ce qu'il te reste à faire est simplement de reconstruire une liste de 3 nombres avec les nouvelles coordonnées pour que ce soit un "point" acceptable pour la fonction command. La manière la plus simple pour construire une liste est d'utiliser la fonction list. (list x1 y1 z1b) retourne une liste avec les valeurs des variables x1, y1, et z1b. Pour éviter d'avoir trop de variables (surtout si elles ne servent qu'une fois dans le code) on peut très bien passer directement des expressions LISP comme arguments à la fonction list : (list (car P1) (cadr P1) z1b) EDIT : encore trop lent...
  18. @Nosset, Le "_non" est utile pour forcer l'accrochage sur "AUCUN" le temps de la saisie du point. @thierry.garré Utiliser "_non" dans les commande est une sage précaution à condition de l'utiliser avant tous les points : (command "_POLYSOLID" "_non" p1 "_non" p2 "") @Nosset & didier, Vous avez essayé de créer un polysolide avec entmake ?...
  19. Salut, Tout d'abord, bienvenue au club. L'expression LISP (command) correspond à une annulation (Echap). AutoCAD accepte qu'on fasse Echap pour sortir de la commande LIGNE (_LINE) qui est en fait exécutée de manière répétitive. Mais pour sorti de la commande POLYSOLIDE (_POLYSOLID), faire Echap annule la commande. Il faut donc utiliser comme argument de command, une chaîne vide qui sera interprétée comme une validation. (defun c:TGPOLYSOLID (/ p1 p2) (setq p1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq p2 (getpoint p1 "\n cliquer le 2eme point à l'écran ")) (command "_POLYSOLID" "_non" p1 p2 "") ) Astuce : passer le premier point comme premier argument au second getpoint permet d'avoir la "ligne élastique". EDIT: je suis définitivement trop lent...
  20. (gile)

    Lisps de DenisHen

    Salut, Juste pour info. Dans l'éditeur Visual LISP, menu Outils > Options d'environnement > Options générales... > onglet Diagnostic > cocher la case "Rapporter les stats. lors de la vérification syntaxique." > OK. Ensuite quand on fait "Vérifier la fenêtre" (Ctrl+Alt+C) la fenêtre se sortie affiche les résultat du contrôle de la fenêtre active dont les variables globales.
  21. (gile)

    Diviser espace barreaudage

    Salut, Même si la partie calepinage / modélisation 3d du programme aurait pu être écrite en LISP, ce programme a été entièrement conçu avec .NET/C# qui est un environnement de programmation plus puissant et, à mon sens, bien plus adapté pour architecturer des développement de cette ampleur (environ 20000 lignes de code et plusieurs mois de travail). La routine "améliorée" : (defun c:balustrade (/ ceiling ep p1 p2 lg nb ax an) (vl-load-com) (defun ceiling (n) (fix (if (< 0 (rem n (fix n))) (1+ n) n ) ) ) (if (and (or (setq in (getdist "\nIntervalle maximum entre deux barreaux <110>: ")) (setq in 110.) ) (setq ep (getdist "\nEpaisseur d'un barreau: ")) (setq p1 (getpoint "\nDépart de la balustrade: ")) (setq p2 (getpoint "\nFin de la balustrade: ")) ) (progn (setq lg (+ (distance p1 p2) ep) nb (ceiling (/ lg (+ in ep))) ax (/ lg nb) an (angle p1 p2) rd (/ ep 2.) p1 (polar p1 (angle p2 p1) rd) ) (vla-StartUndoMark (vla-get-Activedocument (vlax-get-acad-object))) (repeat (1- nb) (setq p1 (polar p1 an ax)) (entmake (list (cons 0 "CIRCLE") (cons 10 (trans p1 1 0)) (cons 40 rd) ) ) ) (vla-EndUndoMark (vla-get-Activedocument (vlax-get-acad-object))) ) ) (princ) )
  22. (gile)

    Diviser espace barreaudage

    Merci, ce qu'on voit là : le calepinage des barreaux et des montants et la modélisation 3d ne représente qu'une toute petite partie du programme qui génère aussi les nomenclatures pour les notices de montage, les exportations vers les logiciels de gestion des stock et de machines à commande numérique, etc.
  23. (gile)

    Diviser espace barreaudage

    Salut, Oui, c'est possible (on peut même faire beaucoup plus), mais c'est plus complexe et, personnellement, je pense que ce type de développement spécifique dépasse ce qui peut être gracieusement offert sur un forum et fait plutôt l'objet d'une demande de prestation. Personnellement je peux pas aller plus loin bénévolement sans être malhonnête vis à vis de ceux qui m'ont embauché pour développer des logiciels de garde-corps.
  24. (gile)

    Diviser espace barreaudage

    Salut, Un petit LISP vite fait à modifier à ta guise. Le LISP invite à saisir l'épaisseur du barreau et les points de départ et de fin de la balustrade (de mur à mur ou poteau à poteau) et dessine des cercles symbolisant les barreaux. (defun c:balustrade (/ ceiling ep p1 p2 lg nb ax an) (defun ceiling (n) (fix (if (< 0 (rem n (fix n))) (1+ n) n ) ) ) (and (setq ep (getdist "\nEpaisseur d'un barreau: ")) (setq p1 (getpoint "\nDépart de la balustrade: ")) (setq p2 (getpoint "\nFin de la balustrade: ")) (setq lg (+ (distance p1 p2) ep) nb (ceiling (/ lg (+ 110. ep))) ax (/ lg nb) an (angle p1 p2) p1 (polar p1 (angle p2 p1) (/ ep 2.)) ) (repeat (1- nb) (setq p1 (polar p1 an ax)) (command-s "_.circle" "_non" p1 "_diameter" ep) ) ) (princ) )
  25. Salut, AutoCAD intègre une calculatrice géométrique à laquelle on accède via la commande CAL (qu'on peut bien sûr appeler de manière transparente lors d'une invite utilisateur. Mais sans être un LISPeur chevronné, il est aussi simple d'entrer directement une expression LISP lors de l'invite : Grillé par didier, mais je préciserai que pour les fractions, on peut les entrer directement (sans CAL ni LISP). AutoCAD reconnait les fractions pour les distances parce qu'elles sont couramment utilisées en système impérial.
×
×
  • 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é