15 févr. 2020

[Dynamo+=Python] Transfert de Légendes



L'outil d'insertion  de vue à partir de fichier de Revit ne permet pas à ce jour de copier des Légendes, mais...

Il existe quelques utilitaires qui permettent de réaliser cette tâche sans avoir à faire du "copier-coller" manuel.
Parmi ces utilitaires on retrouve notamment Torsion Tools ou encore PyRevit qui intègrent cette fonction.


Voici une alternative avec une fonction Ironpython sous Dynamo en utilisant la classe ElementTransformUtils

Gist

_
la fonction prend en paramètres le document source et le document courant.

  • Pour le document courant on obtient l'objet avec la classe DocumentManager.
currentdoc = DocumentManager.Instance.CurrentDBDocument
  • Pour le document source cela dépendra du contexte.
- si celui ci est lié (maquette liée) on retrouve l'objet avec la classe RevitLinkInstance
souceDoc = rvtlink.GetLinkDocument
  où rvtlink est l'instance de la maquette liée.

Note :
la liste des instances des maquettes liées peut être obtenue via la méthode :
FileteredElementCollector(doc).OfClass(RevitLinkInstance).ToElements()

il est possible également d'utiliser les nœuds Links et GetDocument du package Rhythm




- si le document n'est pas lié,  il est possible de l'ouvrir en arrière-plan et de récupérer l'objet Document avec les méthodes FileOpenDialog(string filter) et  OpenDocumentFile(ModelPath, OpenOptions):

Gist

_
avec
current_app = DocumentManager.Instance.CurrentUIApplication.Application
et il faudra penser à la fin script à fermer le document source :
souceDoc.Close(False)

ou bien utiliser le nœud Application.OpenDocumentFile du package Rhythm


voilà il ne vous reste plus qu'à appeler la fonction

newCopylegendviews = copyLegendView(souceDoc, current_doc)




Sur ce, Bonne Pythonnade!



0 commentaires:

Enregistrer un commentaire