Detacher des fichiers du model central sans les ouvrir

Bonjour,

Lorsque je travaille avec des maquettes liées dans mon projet, plusieurs maquettes ne se rechargent pas automatiquement, il faut à chaque fois les recharger manuellement.

Il s’avère que le chemin « relatif » de ses maquettes n’est pas celui du dossier dans lequel il est rangé mais celui de son créateur… Et le problème vient du fait que ce BE là ne détache pas son projet avant de le transmettre sur la plateforme BIM…

QUESTION : Dynamo est il capable de sélectionner un dossier (Directory path) et de réenregistrer les fichier revit en tant que détaché de leur model central ?

ou dois je ouvrir tous les liens en détaché et les réenregistrer manuellement à chaque nouvelles maquettes ?

Bonjour Eric,

Voilà la solution que je peux te proposer:

Le noeud python pour récupérer les fichiers .rvt dans un dossier:

import System
from System.Collections.Generic import *

import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)

import os
from os import *
import glob

out = []

choix = IN[1]

if choix == True:
	for root, dirs, files in os.walk(IN[0]):	
		for file in files:
			if file.endswith(".rvt"):
				out.append(os.path.join(root, file))

if choix == False:
	arr = os.listdir(IN[0])
	for f in arr:
		if f.endswith(".rvt"):
			out.append(os.path.join(IN[0], f))
		
OUT = out

Le noeud python pour ouvrir les fichiers revit en fond:

import clr
 
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
#doc =  DocumentManager.Instance.CurrentDBDocument
app = DocumentManager.Instance.CurrentUIApplication.Application
 
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
 
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
 
clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import *
 
import System
from System.Collections.Generic import *

import sys
pyt_path = r'C:\Program Files (x86)\IronPython 2.7\Lib'
sys.path.append(pyt_path)

import os
from os import *

filepaths = IN[0]
out=[]

OpOp = OpenOptions()
OpOp.DetachFromCentralOption = DetachFromCentralOption.DetachAndPreserveWorksets
#OpOp.Audit = True
openconfig = WorksetConfiguration(WorksetConfigurationOption.CloseAllWorksets)
OpOp.SetOpenWorksetsConfiguration(openconfig)


for filepath in filepaths:
	try:	
		opendoc = app.OpenDocumentFile(FilePath(filepath), OpOp)
		out.append(opendoc)
	except:
		out.append("Fail")

OUT = out

Pour le dernier noeud pour enregistrer ça vient de Document Save As de GeniusLoci! J’utilise également le packages Data-Shapes pour l’interface utilisateur.

Donc concrètement:

  1. Tu mets tes maquettes dans un dossier
  2. Tu lances le script
  3. Tu sélectionnes avec l’UI le bon dossier
  4. Le programme ouvre les maquettes et les enregistre-sous au même endroit

Note: le programme ne ferme pas les fichiers chargés en fond, il faut mieux que tu fermes Revit et le relance ensuite. Ou alors quelqu’un propose une solution pour fermer les documents avec la fonction doc.close mais ça ne voulait rien savoir chez moi :slight_smile:

4 J'aime

Bonjour Adrien

Merci de ta réponse rapide & précise,
J’essaie cette solution ce week end et je te tiens au courant !

Eric