Déterminer la commande (node) Dynamo en exécutant la commande depuis Revit

Bonjour,

Est-il possible sur Dynamo d’obtenir la/les nodes depuis une exécution dans Revit. A l’image d’Excel ou l’on peut enregistrer une macro, celle-ci va enregistrer toutes les commandes faites sur Excel et les retranscrire en langage programmatique.
En gros depuis Revit 2022 on peut dupliquer une feuille avec les vues. Je cherche cette node sur Dynamo mais je ne la trouve pas. Du coup si l’on pouvais exécuter les commandes depuis revit et qu’elles se retranscrive sur Dynamo cela me serai très utile.

En vous remerciant

1 « J'aime »

@Sarevok C’est un bon gros sujet pour un premier post.

Plusieurs approches:

Journal
C’est aussi un vieux thème par forcément lié à dynamo, mais plus au fichier journal, le fait de répéter des commandes.
Lis ça https://thebuildingcoder.typepad.com/blog/2009/07/journal-file-replay.html
ça va te donner un peu de fond.

Postable command
ID_DUPLICATE_SHEET_WITH_VIEWS d’après le fichier Journal

Une des façon d’approcher le sujet c’est aussi avec ce qui s’appelle les POSTABLE Command ApiDocs.co

si tu cliques sur <> dans la page ci-dessus, tu auras accès à un exemple de code


Ces commandes sont justement enregistrées dans le fichier journal
ça fonctionne comme ça en python

# code pour un bouton pyRevit
from pyrevit import script, revit
from Autodesk.Revit.UI import UIApplication, RevitCommandId, PostableCommand

doc = revit.doc
uiapp = UIApplication(doc.Application)
found_id = RevitCommandId.LookupPostableCommandId(PostableCommand.ImportCAD)
uiapp.PostCommand(found_id)

python

L’autre méthode c’est d’appeler directement la commande Sheet Duplicate
une approche par Erick Fritz (tu devrais essayer la barre d’outils EF-Tools d’Erick elle vient en complément de pyRevit

un approche plus récente est possible plus directement avec ApiDocs.co

outil de pyRevit
la première commande dans l’image ci-dessous

4 « J'aime »

code un peu sale et partiellement avec les modules de pyRevit ça donnerait ça avec l’API 2022+

import clr

# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *

from pyrevit import revit

doc = revit.doc
uidoc = revit.uidoc

# get sheet selected
sheet_selected = uidoc.Selection.GetElementIds()[0]

# get element from element id
sheet_selected_element = doc.GetElement(sheet_selected)

# duplication option
vd_option = SheetDuplicateOption.DuplicateSheetWithViewsOnly

with Transaction(doc, "Duplicate sheet") as t:
    t.Start()
    new_sheet = ViewSheet.Duplicate(sheet_selected_element, vd_option)
    print ('New sheet create: {}'.format(doc.GetElement(new_sheet).Name))
    t.Commit()
3 « J'aime »

Bonjour Jean Marc,

Merci pour tes solutions je vais me plonger dans tous ces éléments ce qui vas me prendre un peu de temps. Je ferai un retour en réponse quand j’aurai trouvé la solution qui me semble la meilleur pour mon cas.

Encore merci pour cette réponse exhaustive

1 « J'aime »