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

11 févr. 2020

[Dynamo] Les joies du mode Périodique (épisode 1)




Sous Dynamo il existe 3 modes d'exécution :

Automatique : par défaut, les nouvelles définitions Dynamo sont définies pour s'exécuter automatiquement. Cela signifie que le graphique est exécuté par l'ordinateur, chaque fois qu'il y a un changement dans le modèle.


Manuel : le graphique Dynamo ne s'exécutera que lorsque vous appuyez sur ce bouton, ce qui signifie que vous pouvez apporter des modifications sans demander à l'ordinateur de calculer le résultat jusqu'à ce que vous soyez prêt.
C'est celui-ci qui est activé par défaut avec Dynamo Player
Remarque :
Lorsque vous recevez un script que vous (ou votre société) n'avez pas développé il est préférable de l'exécuter dans ce mode à l'ouverture.





Périodique : Dynamo a la possibilité d'exécuter le graphique de manière rythmique, toutes les X millisecondes, avec une fréquence que l'on peut définir. Cette option n'est activée que lorsqu'un nœud du canevas appelle spécifiquement ce type de comportement d'exécution.
Il s'agit du nœud standard (OOTB) DateTime.Now




Les nœuds activés périodiquement sont ceux qui pourraient injecter des informations en constante évolution dans le graphique Dynamo, telles que les données d'un capteur ou d'un microcontrôleur (comme un LeapMotion ou un Raspberry Pi couplé à un capteur) ou encore une GTB.

Sans données d'entrée dynamique, ce mode d'exécution peut également servir pour animer/déplacer des objets dans la maquette ou encore acquérir des données de la maquette toutes les X minutes afin d'auditer cette dernière (par exemple en BIM niveau 3).

Voici un exemple de déplacement périodique d'un objet le long d'une Ligne de Modèle.
Note :
Ici les localisations des instances à T-1 sont sauvegardés (via un index) localement dans un fichier txt (peut être également fait via le module Python Pickle)





import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)

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

def readidxfile(file):
    with open(file, "r") as f:
        return int(f.read())

def setidxfile(file, idx):
    with open(file, "w") as f:
        return f.write(str(idx))
        
        
dataEnteringNode = IN
time = IN[0] #input DateTime.Now() node
modelcurve = UnwrapElement(IN[1])
instance = UnwrapElement(IN[2])

pathuser  = os.path.expanduser('~')
fullpath = pathuser + "\\Documents\\objb.txt"

try:
    oldidx = readidxfile(fullpath)
    indx = oldidx + 1
    setidxfile(fullpath, indx)
except: 
    indx = 0
    setidxfile(fullpath, str(indx))
#create range
rangeint = range(1,11,1)
#create simple float range
floatrange = [x * 0.1 for x in rangeint]
curveproto  = modelcurve.GeometryCurve.ToProtoType()
try:
    ptx = curveproto.PointAtParameter(floatrange[indx])
except:
    indx = 0
    setidxfile(fullpath, indx)
    ptx = curveproto.PointAtParameter(floatrange[indx])
TransactionManager.Instance.EnsureInTransaction(doc)
instance.Location.Point = ptx.ToXyz()
TransactionManager.Instance.TransactionTaskDone()
    

OUT = ptx

github


6 févr. 2020

[Revit] Familles et formules paramétrique 2/2




  • Les formules de recherche dans les tables de consultation 

Les tables de consultation contiennent des données sur les types,  Revit propose une fonction size_lookup qui lit les valeurs nécessaires dans un fichier CSV qui est importé dans la famille.