L'outil d'insertion de vue à partir de fichier de Revit ne permet pas à ce jour de copier des Légendes, mais...
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.
29 janv. 2020
[Revit] Familles et formules paramétrique 1/2
1. Échapper un caractère spécial contenu dans un nom de paramètre
Il se peut qu'un caractère spécial soit inclut dans le nom d'un paramètre dans ce cas il faut utiliser les crochets [ ]
Exemple :
- Paramètre oui-non : Alim Saillie/Encastrée
- exemple formule associée : if([Alim Saillie/Encastrée], 0 m, 0.035 m)
Note :
Si vous avez pour habitude de "piloter" vos paramètres par programmation, dans la mesure du possible éviter les caractères spéciaux, idem pour les caractères accentués (penser à l'encoding)
2. Les Maths
Concernant l'utilisation de fonctions mathématiques elles sont similaires à ceux que nous pouvons rencontrer en programmation
3. Les Opérateurs et les formules conditionnelles
La structure est similaire à celle que nous pouvons utiliser sous Excel.
- Règle n°1
Le type de paramètre conditionne la formule. Inutile d'essayer de retourner un booléen à un paramètre qui attend une longueur
- Règle n°2
Les unités doivent être compatibles entre elles.
Cependant même si elles sont compatibles, attention tout de même à ne pas additionner n'importe quoi ...
Cependant même si elles sont compatibles, attention tout de même à ne pas additionner n'importe quoi ...
![]() |
| Le scandale du théorème de Boucherot |
- Règle n°3
À l'instar d'un appel de fonction suivi d'arguments, les opérateurs se mettent en préfixe suivis de parenthèses englobant la condition et/ou les valeurs.
- Règle n°4
![]() |
| Quand Revit nous envoi booler... |
Pour les tests logiques les opérateurs supportés sont:
| Opérateur Logique | Description | |
|---|---|---|
| < | strictement inférieur | |
| > | strictement supérieur | |
| = | égal | |
| and | retourne Vrai si toutes les valeurs sont Vrai | |
| or | retourne Vrai si une des valeurs est Vrai | |
| not | retourne l'inverse de la valeur booléenne (ou du résultat de l'évaluation booléenne) | |
| not(a > b) | équivalent à : a <= b | |
| not(a < b) | équivalent à : a >= b | |
Utilisation de l'Opérateur AND
Exemple:
x = 5
y = 4
and(x = 5, y = 5) retourne Faux (False)
Utilisation de l'Opérateur OR
Exemple :
x = 5
y = 4
or(x = 5, y = 5) retourne Vrai (True)
Utilisation de l'Opérateur NOT
Exemple :
x = 5
not(x = 6) retourne Vrai (True), x = 6 étant Faux
x = 5
not(x = 6) retourne Vrai (True), x = 6 étant Faux
4. Les Syntaxes des Formules
- La syntaxe de base est la suivante :
| if (test logique, valeurA si vrai, valeurB si fausse) | retourne valeurA ou valeurB | |
- Test logique avec AND
| if (and(LongA = 10, LongB = 10), valeurA, valeurB) | - retourne valeurA ou valeurB - Paramètre de Type Longueur | |
L'équivalent Pseudo-Code à titre de comparaison
SI LongA = 10 ET LongB = 10:
retourne valeurA
SINON:
retourne valeurB
- Test logique avec OR
| if (or(LongA = 10, LongB = 10), valeurA , valeurB ) | - retourne valeurA ou valeurB - Paramètre de Type Longueur | |
Pseudo-Code
SI LongA = 10 OU LongB = 10:
retourne valeurA
SINON:
retourne valeurB
- Test logique avec multiple conditions
| if (test logique1, valeurA si vrai, (test logique2 si faux, valeurB si vrai, valeurC si vrai)) | retourne valeurA ou valeurB ou valeurC | |
Prenons pour l'exemple 3 paramètres de longueur, nous cherchons à retourner la valeur max dans un nouveau paramètre "MaxLong:
LongA = 50
LongB = 40
LongC = 30
Pour simplifier la compréhension commençons par l’équivalent avec un Pseudo-Code
Pseudo-Code
l'expression sous Revit devient la suivante :
On peut comme cela imbriquer autant de conditions que nécessaire...dans la limite du raisonnable
SI LongA > LongB and LongA > LongC:
MaxLong = LongA
SINON SI LongB > LongA and LongB > LongC:
MaxLong = LongB
SINON:
MaxLong = LongC
l'expression sous Revit devient la suivante :
| if (and(LongA > LongB, LongA > LongC), LongA , if(and(LongB > LongA, LongB > LongC), LongB, LongC )) | - retourne LongA ou LongB ou LongC - Paramètre de Type Longueur | |
On peut comme cela imbriquer autant de conditions que nécessaire...dans la limite du raisonnable
Moralité (ou conseil): si vous n'êtes pas à l'aise avec les formules Revit commencer par écrire la formule sous forme Pythonesque ou Pseudo-Code ou autre
À suivre les formules de recherche dans les tables de consultation...
À suivre les formules de recherche dans les tables de consultation...
10 janv. 2020
[Revit] Interopérabilité Excel
Cyril janvier 10, 2020 Autocad, BIM, DotNet, DynamoBim, Excel, IronPython, PreviewImage, RevitAPI No comments
Analyses, modifications, import de données, transfert vers une application tierce, transmissions de quantitatifs, etc..., dans l'écosystème du BIM, l'utilisation d'Excel devient incontournable.
Le plus souvent la nécessité d'exporter vers Excel provient des Nomenclatures, plusieurs méthodes pour y parvenir.
- Avec l'export natif de Revit
Après export de rapport de nomenclatures au format texte avec choix du délimiteur, il suffit de d'importer le fichier txt en tant que données depuis Excel ou de changer directement l'extension "txt" en "csv" puis de l'ouvrir avec Excel.
- Avec des Add-Ins
Ce n'est pas le choix qui manque, exemple sur l'AutodeskAppStore
voici mes préférés (gratuit) :- Import/Export Excel de BIM One (export - import de nomenclatures, modification possible des paramètres d’Occurrence)
- SheetLink de Diroots (export - import de nomenclatures et bien plus, modification possible des paramètres d’Occurrence et de Type avec précautions)
- Avec Dynamo
- avec ses 2 nœuds natifs
- Par programmation avec les API(s)
- Pour des besoins très spécifiques, on peut également personnaliser ses propres exports avec les API de Revit et de Microsoft, par exemple pour exporter des données spécifiques ou pour personnaliser la mise en page des données sur Excel.
Pour rappel les nomenclatures sont des vues... on peut donc parcourir les éléments via la méthode
FilteredElementCollector Ici les données sont stockées dans un Array puis transférées dans un Range via la variable Value2 (sauf pour les couleurs de cellules 😕...y'en a qui ont essayé ils ont eu des problèmes 😅... bref, obligé de passer une boucle)
Plus d'informations ici
# Copyright (c) 20119- POUPIN.C
import clr
import re
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
app = DocumentManager.Instance.CurrentUIApplication.Application
clr.AddReference('System.Drawing')
from System import Array
from System.Drawing import *
clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c')
from Microsoft.Office.Interop import Excel
from System.Runtime.InteropServices import Marshal
import sys
sys.path.append(r'C:\Program Files (x86)\IronPython 2.7\Lib')
import os
class ParameterProp():
def __init__(self, para):
self._para = para
self._pname = para.Definition.Name
self._pisinstance = para.IsInstance
class FamiliesCheck():
def __init__(self, dirpath):
self.dirpath = dirpath
self.full_lstP = []
for dir, subdir, files in os.walk(dirpath):
for file in files:
if file.endswith(".rfa") and re.search(r'\.\d+.rfa$', file) is None and re.search(r'[aA]ncien', dir) is None:
famDoc = app.OpenDocumentFile(dir + '\\' + file)
if famDoc.IsFamilyDocument:
famManager = famDoc.FamilyManager
lst_para = [ ParameterProp(x) for x in famManager.Parameters]
lst_para.sort(key = lambda x : x._pname)
lst_para[0:0] = [file]
self.full_lstP.append(lst_para)
famDoc.Close(False)
def XlsWriter(self):
ex = Excel.ApplicationClass()
ex.Visible = True
ex.DisplayAlerts = False
workbook = ex.Workbooks.Add()
workbook.SaveAs(self.dirpath + "\\reportFamilies.xlsx")
ws = workbook.Worksheets[1]
nbr_row = 1
for sub_lst in self.full_lstP:
nbr_col = len(sub_lst)
xlrange = ws.Range[ws.Cells(nbr_row, 1), ws.Cells(nbr_row, len(sub_lst))]
a = Array.CreateInstance(object, 1, len(sub_lst))
b = Array.CreateInstance(object, 1, len(sub_lst))
for index, i in enumerate(sub_lst):
# if i is string
if isinstance(i, str):
a[0,index] = i
#else i is a ParameterProp objet
else:
a[0,index] = i._pname
if i._pisinstance == False:
b[0,index] = 6
elif i._pisinstance == True:
b[0,index] = 8
else:
b[0,index] = None
#copy Array in range
xlrange.Value2 = a
for cell, color_index in zip(xlrange, b):
cell.Interior.ColorIndex = color_index
nbr_row += 1
used_range = ws.UsedRange
for column in used_range.Columns:
column.AutoFit()
workbook.Save()
dirpath = IN[0]
obj_check = FamiliesCheck(dirpath)
obj_check.XlsWriter()
OUT = obj_check.full_lstP
Aperçu en Vidéo avec quelques lignes supplémentaire
un 2ᵉ exemple ou l'on exporte des preview des familles vers Excel
(avec les méthodes Clipboard et Paste )
# coding: utf-8
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
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application
uidoc = uiapp.ActiveUIDocument
import System
from System import Environment
from System import Array
from System.Collections.Generic import *
clr.AddReference('System.Drawing')
import System.Drawing
from System.Drawing import *
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
clr.AddReferenceByName('Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' )
from Microsoft.Office.Interop import Excel
from System.Runtime.InteropServices import Marshal
class ExcelUtils():
def __init__(self, expSettings, filepath, sizebitmap):
self.expSettings = expSettings
self.filepath = filepath
self.sizebitmap = sizebitmap
print self.filepath
def exportXls(self):
ex = Excel.ApplicationClass()
ex.Visible = True
ex.DisplayAlerts = False
workbook = ex.Workbooks.Add()
workbook.SaveAs(self.filepath)
ws = workbook.Worksheets[1]
nbr_row = len(self.expSettings)
nbr_colum = len(self.expSettings[0])
#
xlrange = ws.Range[ws.Cells(1, 2), ws.Cells(nbr_row, nbr_colum )]
xlrange.EntireRow.RowHeight = self.sizebitmap.Height
ws.Range("a1").EntireColumn.ColumnWidth = self.sizebitmap.Width / 4
a = Array.CreateInstance(object, nbr_row, nbr_colum - 1)
#
for indexR, row in enumerate(self.expSettings):
for indexC , value in enumerate(row):
if indexC == 0 and value is not None:
Clipboard.SetDataObject(value)
rng = ws.Range[ws.Cells(indexR + 1, 1), ws.Cells(indexR + 1 , 1)]
ws.Paste(rng, False)
else:
a[indexR, indexC - 1] = value
#copy Array in range
xlrange.Value2 = a
used_range = ws.UsedRange
for column in used_range.Columns:
column.AutoFit()
toList = lambda x : x if hasattr(x, '__iter__') else [x]
listcat = toList(UnwrapElement(IN[0]))
#make filter
lstbipCat = [System.Enum.ToObject(BuiltInCategory, x.Id.IntegerValue) for x in listcat]
filtercat = ElementMulticategoryFilter(List[BuiltInCategory](lstbipCat))
#collector
fecSymb = FilteredElementCollector(doc).WherePasses(filtercat).WhereElementIsElementType().ToElements()
outdata = []
imgSize = Size( 100, 100 )
for symb in fecSymb:
bitm = symb.GetPreviewImage(imgSize)
famName = symb.Family.Name
symbName = Element.Name.GetValue(symb)
outdata.append([bitm, famName, symbName])
#define folder to export
directory = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
objXls = ExcelUtils(outdata, directory + '\\test.xls', imgSize)
objXls.exportXls()
OUT = directory
Bonne Année et Meilleurs vœux
24 déc. 2019
[Revit] ça monte ou ça descend?
![]() | |
|
Avant la matérialisation sous Autocad des cassures des chemins de câbles ainsi que les calculs des NGF pouvaient prendre un certains temps...
Aujourd’hui sous Revit avec du développement de scripts associés à des familles paramétriques on peut automatiser tout cela.
Ma première réflexion était d'attribuer des couleurs par filtre au raccord de chemins de câble de type concave et convexe mais pour des cas complexes, même accompagnés de hauteurs, les couleurs peuvent ne pas suffire pour une compréhension rapide de certains cheminements sur plans.
Ma première réflexion était d'attribuer des couleurs par filtre au raccord de chemins de câble de type concave et convexe mais pour des cas complexes, même accompagnés de hauteurs, les couleurs peuvent ne pas suffire pour une compréhension rapide de certains cheminements sur plans.
Donc en attendant la généralisation des lunettes à réalité augmentée 😁 sur les chantiers, pour éviter les possibles réflexions semblables à l'escalier de Penrose, j'ai fini par scripter la matérialisation automatique des descentes et des montées des chemins de câbles.
Démonstration en vidéo sous une musique du moment
2 déc. 2019
[Revit] Audit avec Model Checker et Power BI
Depuis sa première version, Model Checker apporte désormais quelques nouveautés & corrections:
- refonte de l'interface utilisateur
- il est désormais possible d'exporter le rapport de vérification vers Excel.
- traduction en Français
- filtres avec les paramètres d'API Revit (dans les limites du possible)
Après avoir installé Model Checker (gratuit) et téléchargé les fichiers modèle
1/ Dans le menu "Outils interopérabilités BIM", depuis l'icone "Paramétrage"charger le fichier de l'archive téléchargée (modèle).
2/ Dé-sélectionner les éventuelles vérifications non adaptées à votre projet. Sauvegarder et fermer.
5/ Avant d'importer le fichier dans Power BI, je vous conseille de corriger les valeurs suivantes depuis Excel:
- le format de la date du rapport
- la taille du fichier Revit à arrondir à l'entier supérieur sans virgule (garder le suffixe de l'unité)
6/ Il ne vous reste plus qu'a importer le rapport dans Power BI en ouvrant le fichier modèle "Revit Model Dashboard.pbit" et en collant le chemin du dossier ou se trouve le ou les rapport(s) Excel.
6/ Puis vient le moment des interprétations 😁, (prendre connaissance du fichier pdf contenu dans l'archive téléchargée), aucun fichier DWG explosé ici...
Note:
Il est tout à fait possible (via le configurateur) de personnaliser les tests.
Un exemple avec un rajout d'une vérification basée sur les Classes et Propriétés d'objets (API Revit).
Note: seules les propriétés qui renvoient un objet de type booléen ou string peuvent être utilisées, je cherche encore pour les autres...
Les étapes d'export-Import sont détaillées dans cette vidéo d'Autodesk (anglais)
Aperçut sur PowerBI
Voilà, cependant pour une vérification plus poussée (par exemple, pour checker le taux de déconnexion sur les réseaux MEP ) il sera quand même plus judicieux d’utiliser DynamoBim + Excel + PowerBI.
Lien du modèle pour PowerBI incluant un guide PDF.
Guide en anglais pour créer un modèle de rapport
Translate
I like Coffee
Rechercher dans ce blog
Blog Archive
Categories
DynamoBim
Python
IronPython
Revit
RevitAPI
AutodeskExpertElite
PythonNet
Dynamo
AutodeskCommunity
CPython3
PythonNet3
BIM
CPython
Revit API
Vecteurs
WPF
DataFrame
DataTable
DotNet
Pandas
DynamoDS API
DynamoWin
Excel
Famille
IFC
IronPython3
Linq
PLINQ
Produit Vectoriel
PythonNetSerie
Vectors
contextManager
module
scipy
Autocad
Catégorie
DesignReview
Liste
Nomenclatures
PeriodicMode
framework .Net
.Net
.Net Interface
ACC
APS
Algorithme
BIM360
Barre de Progression
Calque
Chemins de Câble
Courbe
DWFx
DWG
DataSet
Delaunay
Design Review
DoEvents
Décorateur
Euroclasses
Export
Filtres
Fittting
Formules
Geometry
Group
Handler
HorsSujetBIM
IA
IfcOpenShell
IronPython2
Lacing
Lignes
List
MVVM
NFC 15-100
OLE
OpenAI
Package
Parallal
Parallèle
Paramètres de Projet
Polygon
Revit & Sélections
Selection
UltraLeap
ViewFilter
WinForm
WorkSets
alphashape
logger
logging
olefile
xml
+=
.Net 8
.Net API Inheritance
2024
2025
3DView
AVF
Aggregate
AlignedBoundingBox
Annotations
Aplatir
Assembly
Attestation de Conformité Verte
Audio
Autodesk.Revit.DB.Analysis
AverageCurve
BeautifulSoup
Bilan de Puissance
Binding
Bitmap
BoundingBox
BrowserOrganization
ByMinimum.Volume
Cables
Canalisation
Chemin de cable
Chute de tension
Class
Classe
CleanText
Collaboration
Coller
Commandes Vocales
Compilation
Construction
Consuel
Coordonnées
Copier
Coupe
CropBox
CrossProduct
Curve
DBSCAN
DataGrid
Debogage
Debug
Decorateur
Deep Learning
Dialux
Dialux Evo
Dispatcher
DynamoCore
ERP
Eclairement
ElementType.Name
Enumerable
Espace de Nom
Event
FacingOrientation
Fenetre
Filter
FilteredElementCollector
Flatten
GC.Collect
GenericZones
GetBoundaryFaceInfo
Graham
Géométrie
HTML
HTTP request
Hachures
HandOrientation
HelixToolKit
HostFace
IRVE
IValueConverter
ImportInstance
Incendie
Interfaces
IsInside
Json
Keras
LeapMotion
Listes
Listes imbriquées
Lux
Légendes
Macro
Mandelbrot
Markdown
Memory
Microsoft
Model Checker
Namespace
Net Core
Nomenclature
OpenXML
Ouverture
Parralelisme
Point
Points
Polyligne
Porte
PowerBi
PreviewImage
Produit Scalaire
Purge
Python Nested List
Python3
RAG
RPC
Raccord
Rapport
Reflection
Revit API 2027
Revit version
SQL
Schedule
ScheduleDefinition
ScheduleField
Script
Section
Serialization
SharpDevellop
Sorted
SpatialElementGeometryCalculator
Speech Recognition
Surcharge Opérateurs
Tensorflow
Transform
TransientDisplay
Unicode
UnicodeDecodeError
Utilance
VSCode
Version
ViewRange
ViewSchedule
ViewSection
Visualiseur
Vues
WebRequest
Word
Zones HVAC
Zones Système
autocomplétion
bs4
clr
colinear
cosine_similarity
cosinus
dir
dll
documentation
débogage
exception handling
import
inspect
level
list level
matplotlib
members
mshtml
ndarray
operator
out Parameter
pip
pyc
pyd
requests
shapely
skLearn
sympy
tesseract
timeit
tkinter
visibilité & graphisme
with
Électricité
Articles les plus consultés
-
Et si un projet réalisé au format DWG n'était plus un obstacle pour commencer l'étude d'exécution sous Revit? Et si la modélis...
-
Un petit rappel pour éviter les maux de têtes quand des éléments ne s'affichent pas ou ne veulent pas changer de couleur sous Revi...
-
Les formules de recherche dans les tables de consultation Les tables de consultation contiennent des données sur les types,...
-
1. Échapper un caractère spécial contenu dans un nom de paramètre Il se peut qu'un caractère spécial soit in...
-
L'utilisation de Pandas dans Dynamo peut grandement faciliter l'import, la transformation et l'export de vos don...
-
Vous voulez anticiper la migration de votre code Python vers PythonNet3 , bonne décision, voici quelque...




























