LElemurien Posté(e) le 28 février 2020 Partager Posté(e) le 28 février 2020 Bonjour à tous,Est-il possible d'insérer dans un champ le nom du dossier windows où est enregistrer le fichier Autocad?Merci de votre aide. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 28 février 2020 Partager Posté(e) le 28 février 2020 Bonjour, Taper champEn choisissant Nom de fichier tu peux choisir des options sur la droite. Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
LElemurien Posté(e) le 28 février 2020 Auteur Partager Posté(e) le 28 février 2020 Bonjour, Tapper champsEn choisissant Nom de fichier tu peux choisir des options sur la droite. Merci pour la réponse, mais je souhaiterai avoir que le nom du dossier (Alors que dans les options c'est soit le nom du fichier et/ou tout le chemin d'accès)Est -il possible d'avoir uniquement le nom de dossier? J'ajoute une autre une question si cela est possible d'avoir dans le champ uniquement le début ou la fin du nom de dossier Exemple :Nom de dossier : Maison - 01Et pour le champ j'aimerai garder si possible uniquement le mot Maison (Supprimer tout ce qui est après le 1er mot) Peut-être un peu compliqué à faire??!!Mais on s'est jamais Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 28 février 2020 Partager Posté(e) le 28 février 2020 Peut-être un peu compliqué à faire??!! Oui, directement dans un champs.Par contre, à la place du champs, on peut imaginer une solution de mis à jour grâce à un lisp.Mais, ici, nous n'avons pas assez d'éléments pour le faire à ta place.Le texte est t'il un attribut, le chemin de base est t'il toujours le même ... Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
LElemurien Posté(e) le 28 février 2020 Auteur Partager Posté(e) le 28 février 2020 Oui, directement dans un champs.Par contre, à la place du champs, on peut imaginer une solution de mis à jour grâce à un lisp.Mais, ici, nous n'avons pas assez d'éléments pour le faire à ta place.Le texte est t'il un attribut, le chemin de base est t'il toujours le même ... Merci pour les réponsesEn fait j'ai 2 questions : 1 - Peut on avoir avoir uniquement le nom de dossier dans un champ créer avec la commande champ? (Nom du dossier où est enregistrer le fichier dwg, le chemin d'accès est toujours le même pour accéder aux différents dossiers où il y a différents dwg enregistrer dedans)2 - Si oui à la question 1 peut on aussi modifier ce champ en enlevant une partie du texte de ce champ?j'espère que c'est plus compréhensible Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 29 février 2020 Partager Posté(e) le 29 février 2020 (modifié) Si tu veux absolument un champ, je te propose cette solutionLe champ%<\AcVar.17.0 Lisp.dddir>% et un bout de lisp qui le met à jour. (defun c:ddd nil (setq dddir (xstrcase (car (str2lst (car (reverse (butlast (str2lst (getvar 'DWGPREFIX) "\\")))) " ")))) (command "_regen") ) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun butlast (lst) (reverse (cdr (reverse lst))) ) Cela fonctionne si c'est un espace qui sépare les mots du nom de ton dossier.Si c'est "-" par exemple remplace l'espace " " par "-" j'avais oublier de joindre les 2 fonctions str2lst et butlast ... Modifié le 29 février 2020 par Fraid Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
LElemurien Posté(e) le 29 février 2020 Auteur Partager Posté(e) le 29 février 2020 Si tu veux absolument un champ, je te propose cette solutionLe champ%<\AcVar.17.0 Lisp.dddir>% et un bout de lisp qui le met à jour. (defun c:ddd nil (setq dddir (car (str2lst (car (reverse (butlast (str2lst (getvar 'DWGPREFIX) "\\")))) " "))) (command 'METTREAJOURCHAMP) ) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) (defun butlast (lst) (reverse (cdr (reverse lst))) ) Cela fonctionne si c'est un espace qui sépare les mots du nom de ton dossier.Si c'est "-" par exemple remplace l'espace " " par "-" j'avais oublier de joindre les 2 fonctions str2lst et butlast ... Bonjour,Et merci pour l'aidePar contre j'ai un problème car quand je charge le LISP cela me retourne :; erreur: valeur d'argument incorrecte: commande AutoCAD: METTREAJOURCHAMPPar contre si après je fais mettre à jour champ et que je sélectionne mon champ cela fonctionne.Vu que je ne connais pas la programmation je suis un peu perdu.Je vais encore essayer de chercher car cela ne doit pas être grand chose je suppose.Et pour être un peu chiant est-il possible que le champ soit automatiquement en Majuscule?Merci en tout en cas et bon week-end! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 29 février 2020 Partager Posté(e) le 29 février 2020 Oups, j'ai corrigé,Un simple regen suffit.Et c'est maintenant en majuscule Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
LElemurien Posté(e) le 29 février 2020 Auteur Partager Posté(e) le 29 février 2020 Oups, j'ai corrigé,Un simple regen suffit.Et c'est maintenant en majuscule C'est parfait au niveau du programme. Par contre j'ai un problème ou c'est peut-être normal mais j'aimerai que le champs soit à jour quand j'ouvre le dessin ou que je fasse un enregistrer sous.Je m'explique: Si j'ai un champ dans mon 1 er dessin et que je fais un enregistrer sous dans un autre dossier je suis obligé de lancer la commande pour que le champ soit à jour (Un simple regen ne suffit pas).Est il possible d'y remédier? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 29 février 2020 Partager Posté(e) le 29 février 2020 Pour que le champ soit mis à jour à l'ouverture: - Rajoute en fin de code (c:ddd) - Tu enregistre le code dans un fichier ddd.lsp (dans un dossier support/approuvé) - l'ajouté au applications chargées au démarrage (appload) Pour l'enregistrer sous, il suffit de taper ddd juste après, sinon il sera à jour à la prochaine ouverture. Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
LElemurien Posté(e) le 29 février 2020 Auteur Partager Posté(e) le 29 février 2020 Pour que le champ soit mis à jour à l'ouverture: - Rajoute en fin de code (c:ddd) - Tu enregistre le code dans un fichier ddd.lsp (dans un dossier support/approuvé) - l'ajouté au applications chargées au démarrage (appload) Pour l'enregistrer sous, il suffit de taper ddd juste après, sinon il sera à jour à la prochaine ouverture. OK merci beaucoup c'est parfait!Note à moi même : Prendre du temps pour apprendre la programmation.Bon weekend! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fraid Posté(e) le 29 février 2020 Partager Posté(e) le 29 février 2020 Prendre du temps pour apprendre la programmation. Je ne peux que t'encourager.Du coup je vais prendre un peux de temps pour expliquer ma démarche. Les expressions de champs son limitées à ce qui est disponible avec la commande CHAMP.Par bonheur, parmi elles, il y a VariableLisp.Lorsque vous la sélectionnez, vous voyez la totalité des variables disponibles dans le panneau du milieu.Nous allons donc simplement créer une variable interrogée par le champ.Je vais développer le code. (defun c:ddd nil ;Défini la fonction C:DDD en créant la commande Autocad DDD, et nil pour aucun argument ni variable (setq dddir (getvar 'DWGPREFIX);Chemin du fichier ex "c:\\Temp\\Data du jour\\" dddir (str2lst dddir "\\");Conversion du chemin en liste '("c:" "Temp" "Data du jour" "") dddir (butlast dddir);Suppression du dernier élément de la liste '("c:" "Temp" "Data du jour") dddir (reverse dddir);Inverse la liste '("Data du jour" "Temp" "c:") dddir (car dddir);Retourne la 1er élément "Data du jour" dddir (str2lst dddir " ");Conversion du texte en liste '("Data" "du" "jour") dddir (xstrcase (car dddir));Mise en majuscule du premier élément "DATA" (command "_regen") ) Ici, j'ai fait glisser la variable dddir pour éviter dans créer une à chaque opération.Un avantage de l'Autolisp, les variables peuvent changer de type, contrairement à beaucoup d'autre langages.DDDIR devient donc une variable globale, disponible dans Autocad, avec !DDDIR par exemple.STR2LST et BUTLAST sont des fonctions "classiques" trés utilisées, fait une recherche str2lst site:cadxp.com et tu trouveras d'autres exemples d'application. Bon courage Citer https://github.com/Fraiddd Lien vers le commentaire Partager sur d’autres sites More sharing options...
LElemurien Posté(e) le 29 février 2020 Auteur Partager Posté(e) le 29 février 2020 Je ne peux que t'encourager.Du coup je vais prendre un peux de temps pour expliquer ma démarche. Les expressions de champs son limitées à ce qui est disponible avec la commande CHAMP.Par bonheur, parmi elles, il y a VariableLisp.Lorsque vous la sélectionnez, vous voyez la totalité des variables disponibles dans le panneau du milieu.Nous allons donc simplement créer une variable interrogée par le champ.Je vais développer le code. (defun c:ddd nil ;Défini la fonction C:DDD en créant la commande Autocad DDD, et nil pour aucun argument ni variable (setq dddir (getvar 'DWGPREFIX);Chemin du fichier ex "c:\\Temp\\Data du jour\\" dddir (str2lst dddir "\\");Conversion du chemin en liste '("c:" "Temp" "Data du jour" "") dddir (butlast dddir);Suppression du dernier élément de la liste '("c:" "Temp" "Data du jour") dddir (reverse dddir);Inverse la liste '("Data du jour" "Temp" "c:") dddir (car dddir);Retourne la 1er élément "Data du jour" dddir (str2lst dddir " ");Conversion du texte en liste '("Data" "du" "jour") dddir (xstrcase (car dddir));Mise en majuscule du premier élément "DATA" (command "_regen") ) Ici, j'ai fait glisser la variable dddir pour éviter dans créer une à chaque opération.Un avantage de l'Autolisp, les variables peuvent changer de type, contrairement à beaucoup d'autre langages.DDDIR devient donc une variable globale, disponible dans Autocad, avec !DDDIR par exemple.STR2LST et BUTLAST sont des fonctions "classiques" trés utilisées, fait une recherche str2lst site:cadxp.com et tu trouveras d'autres exemples d'application. Bon courage Merci pour pour toutes ces infos!Mais je me rend bien compte que la tâche va être difficile car apprendre le langage LISP est bien compliqué et chronophage en tout cas pour moiet malheureusement j'ai d'autre impératif. Mais je prends les encouragements quand même !Merci pour tout et bon weekend! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés