Fraid Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Bonjour, Je voudrai savoir comment récuperer la liste des chemins de recherche de fichiers de projet. Et si c'est possible d'en créer....??? J'ai beau chercher dans l'aide du developer je ne trouve rien. a part la variable projectname qui elle s'enregistre dans le dessin, j'imagine que les autres doivent etre dans le registre de windows :P merci https://github.com/Fraiddd
(gile) Posté(e) le 25 août 2010 Posté(e) le 25 août 2010 Salut, Pour avoir la liste des répertoires:(vla-get-SupportPath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) et vla-get-SupportPath pour modifier la liste des répertoires. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 26 août 2010 Auteur Posté(e) le 26 août 2010 Merci voila ce que j'ai essayer de faire (defun c:proj (/)(vl-load-com) (setq name (getvar "dwgname")) ;Extraction du nom du fichier (exemple de nom de fichier:9CA2T03L01NET1) (setq trig (substr name 1 3)) ;Extraction du Trigramme qui permet de nommer le projet (setq ntr (substr name 6 2)) ;Extraction du Numero de tronçon (setq prj (getvar "projectname")) ;Extraction du projectname (setq pro (vla-get-SupportPath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))) (if (/= pro trig) ;Test de l'existance du projet ((vla-get-SupportPath) (trig) ;creation du projet(E:\MAP\Plans\"trig"\FDP) (E:\MAP\Plans\"trig"\RASTER) (E:\MAP\Plans\"trig"\T"ntr"\Xref)) ;j'ai mis entre"" les variables composant les chemins )(if (/= prj trig) ;test de la variable projectname (setvar "projectname" trig)) ) Evidement sa marche pas https://github.com/Fraiddd
Patrick_35 Posté(e) le 26 août 2010 Posté(e) le 26 août 2010 Salut (or (vl-string-search (strcase Mon_Repertoire) (strcase (vla-get-supportpath (setq pref (vla-get-files (vla-get-preferences (vlax-get-acad-object))))))) (vla-put-supportpath pref (strcat Mon_Repertoire ";" (vla-get-supportpath pref))) ) ps : Si tu travailles sur plusieurs projets, tu risques à un moment de bloquer avec les chemins de recherches car tu dois avoir une limite au nombre de caractères (j'ignore combien) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Fraid Posté(e) le 26 août 2010 Auteur Posté(e) le 26 août 2010 Allo la terre ? ici youstone..... :P .. dans quel grimoire allez vous chercher de telles incantations? Le or sert il a tester si la variable pref est vide? (si il existe un projet?) La variable Mon_Repertoire dépendant du nom du fichier, comment faire pour inserer une variable a l'interieur d'un chemin.c'est une question de syntaxe que je ne trouve pas dans l'aide ni dans mes exemples... Je ne vois pas ou tu nomme le projet. et le ";" ???? Je suis désolé d'etre aussi nul en V, mais pourai tu expliquer un petit peu merci https://github.com/Fraiddd
Patrick_35 Posté(e) le 26 août 2010 Posté(e) le 26 août 2010 Allo la terre ? ici youstone..... :P .. dans quel grimoire allez vous chercher de telles incantations? Le or sert il a tester si la variable pref est vide? (si il existe un projet?) La variable Mon_Repertoire dépendant du nom du fichier, comment faire pour inserer une variable a l'interieur d'un chemin.c'est une question de syntaxe que je ne trouve pas dans l'aide ni dans mes exemples... Je ne vois pas ou tu nomme le projet. et le ";" ???? Je suis désolé d'etre aussi nul en V, mais pourai tu expliquer un petit peu merci Salut Les conditions OU et And peuvent aussi servir de testTant que la valeur est nil, la condition ou évalue l'argument suivant. Exemple : (ou val1 val2 val3 val4 mon_résultat)val1, val2,val3 et val4 sont nil --> mon_résultatDès que val1,val2, val3 ou val4 est d'une autre valeur que nil, je n'arrive pas sur mon_résultat Un autre Exemple concret avec un And(and (setq txt (nentsel)) ; Je choisis un objet (setq txt (entget (car txt))) ; Je récupere les codes dxf (member (cdr (assoc 0 txt)) '("TEXT" "MTEXT" "ATTRIB")) ; C'est un Texte ou un attribut (setq pt1 (getpoint "\nindiquez le point de centre : ")) ; Je demande un point (setq pt1 (trans pt1 1 0)) ; je convertis les coordonnées au scu courant (progn .... ) ) Cette fois-ci, la condition est tant que Donc, si je lis correctement(or (vl-string-search (strcase Mon_Repertoire) (strcase (vla-get-supportpath (setq pref (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))))Si je ne trouve pas la chaîne de caractères contenus dans la variable Mon_Repertoire dans les chemins de recherches(vla-put-supportpath pref (strcat Mon_Repertoire ";" (vla-get-supportpath pref)))alors je l'ajoute. Pour distinguer un répertoire dans la chaîne de caractères de (vla-get-supportpath ...), c'est le ; qui sert de séparation.C'est le même principe qu'en dos avec la variable path @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Fraid Posté(e) le 27 août 2010 Auteur Posté(e) le 27 août 2010 Bonjour, Merci je comprend mieux maintenant. J'ai donc fait un essais et il y a confusion entre les fichier de recherche de fichiers de support et les chemin de recherche de fichiers de projet. C'est pour cela que je voyais pas ou tu créais le projet puisque le chemin ne vas pas au bon endroit. C'est mon client qui nous impose de créer un projet, puis des chemin qui s'y rattache.Je sais c'est completement inutile si on place nos xrefs avec un chemin relatif. :casstet: Comme créer a chaque nouveau chantier le projet et les chemins devient vraiment lourding je cherche le moyen de le faire en un clic par rapport au nom du plan. vla-put-supportpath ecris un nouveau chemin pour les fichiers de support (comme son nom l'indic) y a pas un truc comme projectpath ? ou ProjectFilePath (setq Mon_Repertoire "E:\MAP\Plans\9CA\FDP") (or (vl-string-search (strcase Mon_Repertoire) (strcase (vla-get-ProjectFilePath (setq pref (vla-get-files (vla-get-preferences (vlax-get-acad-object))))))) (vla-put-ProjectFilePath pref (strcat Mon_Repertoire ";" (vla-get-ProjectFilePath pref))) evidement cela ne marche parceque 1 - ProjectFilePath n'existe pas 2 - Il n'a pas de projet de créer (ici il faudrai qu'il se nomme 9CA) 3 - Mon chemin est mal ecrit car quand j'utilise supportpath le chemin s'ecrit mais sans \ et 9CA devrait etre une variable qui correspond au 3 premiere lettre du nom du dessin j'sais bien que pratiquement personne utilise les projets..... PS je viens de trouver le bon sens des slash c'est / et non \ (dur la syntaxe....) [Edité le 27/8/2010 par Fraid] https://github.com/Fraiddd
Patrick_35 Posté(e) le 27 août 2010 Posté(e) le 27 août 2010 Ok, je n'avais pas bien compris Trouvé dans le marais ;) Lecture(vla-GetProjectFilePath (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))) (getvar "PROJECTNAME") ) Ecriture(vla-SetProjectFilePath (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))) (getvar "PROJECTNAME") "C:\\Work1;C:\\Work2" ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Fraid Posté(e) le 27 août 2010 Auteur Posté(e) le 27 août 2010 j'teldis, on va y arriver je n'etait pas loin Mais pourquoi avoir enlevé le - aprés le get ????c'est vraiment tordus bref.... Par contre si le projet n'existe pas, sa marche pasil faut donc le créeret comme y a pas moyen d'avoir de l'aide avec l'aide je suis obligé de vous embeter. meme en tatonant avec le visualisp (le texte devient bleu quand la commande existe)je n'arrive pas a creer un projetattention la variable projectname n'est que le projet utilisé par le dessinC'est peu etre SetProjectName pour crée le projet ? Sinon j'ai trouvé l'emplacement dans le registre de windows[HKEY_CURRENT_USER\Software\Autodesk\AutoCAD\R18.0\ACAD-8001:40C\Profiles\Profil de configuration initiale\Project Settings\9DP]"RefSearchPath"="E:\\MAP\\SFR\\Plans\\9DP;E:\\MAP\\SFR\\Plans\\9DP\\FDP;E:\\MAP\\SFR\\Plans\\9DP\\RASTER;E:\\MAP\\SFR\\Plans\\9DP\\T03\\Xref;E:\\MAP\\SFR\\Plans\\9DP\\T03\\S04" Un peu peur de tripoter le registre..... Ensuite je n'arrive toujours pas a inclure une variable dans un chemin....... https://github.com/Fraiddd
(gile) Posté(e) le 28 août 2010 Posté(e) le 28 août 2010 Salut, Désolé pour la confusion fichiers de support/projet, encore une fois j'ai lu un peu vite. Mais pourquoi avoir enlevé le - aprés le get ????c'est vraiment tordus Petite explication : l'interface COM/ActiveX utilisée par Visual LISP (fonctions vla) est aussi utilisée par de nombreux autres langage (VBA, .NET, ...). Sa structure est "typée objet", c'est à dire organisée en objets chaque objet ayant ses propres propriétés, méthodes et évènements.Par exemple :- SupportPath est une propriété de l'objet PreferencesFiles (PreferencesFiles est l'objet correspondant à la propriété Files de l'objet Preferences etc.)Une propriété ne requiert aucun argument, ceci n'est pas évident avec l'implémentation en LISP qui n'est pas structuré "objet", mais dans d'autre langages, à la place de :(vla-get-SupportPath (PreferencesFiles))on écrirait simplement :PreferencesFiles.SupportPath - GetProjectFilePath est une méthode de l'objet PreferencesFiles, elle requiert un argument : le nom du projet (PROJECTNAME).Donc ce qui s'écrit dans d'autres langages :PreferencesFiles.GetSupportPath(ProjectName)s'écrit en LISP :(vla-GetProjectFilePath PreferencesFiles ProjectName) Pour résumer, avec les fonctions vla, le premier argument est l'objet auquel s'applique la propriété ou la méthode, les arguments suivants les arguments proprement dits de la méthode. En ce qui te concerne, pour définir un chemin de fichier de projet, il faut utilise la méthode SetProjectFilePath de l'objet PreferencesFiles et lui passer comme argument le nom du projet et le (ou les) chemin(s) à attribuer.Celui-ci n'existe pas est stocké dans la variable PROJECTNAME s'il a été défini (sinon tu dois pouvoir le définir avec cette variable et setvar) (setvar 'projectname "NomDuProjet") ; si le projet n'est pas déjà défini (vla-SetProjectFilePath (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))) (getvar 'projectname) "C:\\DossierPourCeProjet"" ) En espérant ne pas avoir été trop confus (et n'avoir pas dit trop d'âneries). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 28 août 2010 Auteur Posté(e) le 28 août 2010 Merci Gile ...pas évident de comprendre qu'il faut lire de droite à gauche...j'ai mis du temps.... :P mais cela commence a venir grace a vous. Il faut comeme creer le projet avant de déclarer PROJECTNAME qui ne s'occupe de dire a autocad quel projet on utilise Pour le creer j'ai trouver cela (setq name (getvar "dwgname")) (setq trig (substr name 1 3))(setq reg (vl-registry-read (strcat "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R18.0\\ACAD-8001:40C\\Profiles\\Profil de configuration initiale\\Project Settings\\" trig) )(if reg (creatchem)(vl-registry-write (strcat "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\R18.0\\ACAD-8001:40C\\Profiles\\Profil de configuration initiale\\Project Settings\\" trig) ) (creatchem)) (setvar "projectname" trig)(defun creatchem (/)(vla-SetProjectFilePath (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))) trig "E:\\MAP\\SFR\\Plans\\" trig;"E:\\MAP\\SFR\\Plans\\" trig "\\FDP")) mais aujourd'huis je n'ai pas de poste pour tester celaje n'ose pas sur un poste de travail bien stableen plus je ne suis pas sure de la syntaxe.... https://github.com/Fraiddd
Patrick_35 Posté(e) le 30 août 2010 Posté(e) le 30 août 2010 Salut (setq files (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))) proj "Mon_Projet" path "C:\\Work1;C:\\Work2" ) (and (vl-catch-all-error-p (vl-catch-all-apply 'vla-GetProjectFilePath (list files proj))) ;Génére une erreur si le projet n'existe pas (vla-setprojectfilepath files proj path) ) (setvar "projectname" proj) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Fraid Posté(e) le 22 octobre 2010 Auteur Posté(e) le 22 octobre 2010 Bonjour, Maintenant que,grace a vous, j'arrive a créer mon projet (vl-registry-write (strcat "HKEY_CURRENT_USER\\" (vlax-product-key) " \\Profiles\\ " (vla-get-activeprofile (vla-get-profiles (vla-get-preferences (vlax-get-acad-object)))) " \\Project Settings\\" InitTRI) ) Et mes chemins (setq path1 (strcat PathTRI InitTRI "\\FDP;F:\\MAP\\Plans\\" InitTRI "\\RASTER;F:\\MAP\\Plans\\" InitTRI "\\" InitTRO "\\XREF") files (vla-get-Files (vla-get-Preferences (vlax-get-acad-object))) ) (vla-setprojectfilepath files InitTRI path1) a la place de F:\\MAP\\Plans\\ je devrai avoir la variable PathTRI Mais j'ai du passer 2 heures dans l'editeur Visualisp en essayant de trouver la bonne syntaxej'y arrive pah (je vous epargne mes tentatives), ce sont les ; qui posent probleme Vous me direz si sa marche comme sa, pourquoi se prendre la tete Pour la portabilité de mon lisp.... Merci pour vos lumieres oh Grands Maîtres du Lisp https://github.com/Fraiddd
(gile) Posté(e) le 22 octobre 2010 Posté(e) le 22 octobre 2010 Salut, Je ne suis pas sûr de comprendre la demande.S'agit-il bien de l'utilisation strcat ? (setq PathTRI "F:\\MAP\\Plans\\" initTRI "Projet1" initTRO "Porjet2" ) (setq path1 (strcat PathTRI initTRI "\\FDP;" PathTRI initTRI "\\RASTER;" PathTRI initTRI "\\" initTRO "\\XREF;"))retourneune chaîne de chemins valides :"F:\\MAP\\Plans\\Projet1\\FDP;F:\\MAP\\Plans\\Projet1\\RASTER;F:\\MAP\\Plans\\Projet1\\Porjet2\\XREF;" Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 22 octobre 2010 Auteur Posté(e) le 22 octobre 2010 Merci Tu avais bien compris Je n'avais pas penser a metre les point virgules dans les guillemées :P https://github.com/Fraiddd
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant