Aller au contenu

Chemin de recherche de fichiers de projet


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)
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 test

Tant 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ésultat

Dè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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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]

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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 pas

il faut donc le créer

et 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 projet

attention la variable projectname n'est que le projet utilisé par le dessin

C'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.......

Posté(e)

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

Posté(e)

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 cela

je n'ose pas sur un poste de travail bien stable

en plus je ne suis pas sure de la syntaxe....

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

  • 1 mois après...
Posté(e)

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 syntaxe

j'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

 

Posté(e)

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

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é