Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
L’interface utilisateur de Dynamo est organisée en cinq zones principales. Nous allons faire ici une présentation succincte et expliquer plus en détail l’espace de travail et la bibliothèque dans les sections suivantes.
Menus
Barre d'outils
Bibliothèque
Espace de travail
Barre d’exécution
Voici les menus des fonctionnalités de base de l’application Dynamo. Comme la plupart des logiciels Windows, les deux premiers menus concernent la gestion des fichiers, les opérations de sélection et la modification du contenu. Les autres menus sont plus spécifiques de Dynamo.
Des informations générales et des paramètres sont disponibles dans le menu déroulant Dynamo.
À propos de : découvrez la version de Dynamo installée sur votre ordinateur.
Accord sur la collecte des données d’utilisation : permet d’accepter ou de refuser le partage de vos données utilisateur pour améliorer Dynamo.
Préférences : inclut des paramètres tels que la précision décimale de l’application et la qualité du rendu de la géométrie.
Quitter Dynamo.
Si vous êtes bloqué, consultez le menu Aide. Vous pouvez accéder à l’un des sites Web de référence Dynamo via votre navigateur Internet.
Mise en route : brève introduction à l’utilisation de Dynamo.
Guides interactifs.
Échantillons : fichiers d'exemple de référence.
Dictionnaire Dynamo : ressource avec documentation sur tous les nœuds.
Site Web Dynamo : affichez le projet Dynamo sur GitHub.
Wiki du projet Dynamo : permet de consulter le wiki pour en savoir plus sur le développement à l’aide de l’API Dynamo, qui prend en charge les bibliothèques et les outils.
Afficher la page de démarrage : permet de revenir à la page de démarrage de Dynamo lorsque vous vous trouvez dans un document.
Signaler un bogue : permet d'ouvrir un problème sur GitHub.
La barre d'outils de Dynamo contient une série de boutons permettant d'accéder rapidement aux fichiers et aux commandes Annuler [Ctrl + Z] et Rétablir [Ctrl + Y]. À l’extrémité droite se trouve un autre bouton qui permet d’exporter un cliché de l’espace de travail, ce qui est extrêmement utile pour la documentation et le partage.
La bibliothèque Dynamo est un ensemble de bibliothèques fonctionnelles, chaque bibliothèque contenant des nœuds regroupés par catégorie. Elle se compose de bibliothèques de base qui sont ajoutées lors de l’installation par défaut de Dynamo. Au fur et à mesure de la présentation de son utilisation, vous allez découvrir comment étendre la fonctionnalité de base avec des nœuds personnalisés et d’autres packages. La section Bibliothèque fournit des instructions plus détaillées sur son utilisation.
L’espace de travail est l’endroit où vous composez vos programmes visuels, vous pouvez également modifier son paramètre d’aperçu pour afficher les géométries 3D à partir d’ici. Pour plus d’informations, reportez-vous à Espace de travail.
Exécutez votre script Dynamo à partir d’ici. Cliquez sur l’icône déroulante du bouton Exécution pour passer d’un mode à l’autre.
Automatique : exécute votre script automatiquement. Les modifications sont mises à jour en temps réel.
Manuel : le script s’exécute uniquement lorsque vous cliquez sur le bouton « Exécuter ». Utile pour modifier des scripts complexes.
Périodique : cette option est grisée par défaut. Disponible uniquement lorsque le nœud DateTime.Now est utilisé. Vous pouvez définir l’exécution automatique du graphique à un intervalle spécifié.
Nouveau : permet de créer un fichier .dyn
Ouvrir : permet d’ouvrir un fichier .dyn (espace de travail) ou .dyf (nœud personnalisé).
Enregistrer/Enregistrer sous : permet d’enregistrer votre fichier .dyn ou .dyf actif
Annuler : permet d’annuler la dernière action
Rétablir : permet de rétablir la prochaine action
Exporter l’espace de travail en tant qu’image : permet d’exporter l’espace de travail visible en tant que fichier PNG.
Ce guide comprend des chapitres développés avec Mode Lab. Ces chapitres portent sur les bases essentielles pour développer vos propres programmes visuels avec Dynamo et les principales connaissances sur la façon d’améliorer Dynamo.
Ce guide s’adresse à des lecteurs de différents milieux et niveaux de compétences. Les sections suivantes présentent de manière générale la configuration de Dynamo, l’interface utilisateur et les concepts clés. Nous recommandons aux nouveaux utilisateurs de se pencher sur les rubriques suivantes :
Si vous souhaitez mieux comprendre chaque élément comme un nœud spécifique et le concept de base, les fondamentaux sont abordés dans un chapitre à part.
Pour découvrir la démonstration des workflows Dynamo, consultez les graphiques illustrés dans la section Exemples de workflows. Suivez les instructions ci-jointes pour créer vos propres graphiques Dynamo.
À mesure que nous abordons les différentes rubriques de Dynamo, vous pourrez retrouver des exercices plus spécifiques dans les prochains chapitres. Les exercices se trouvent généralement dans la dernière section de chaque page.
Dynamo ne serait pas ce qu’il est sans un groupe d’utilisateurs passionnés et de contributeurs actifs. Interagissez avec la communauté en suivant le blog, en ajoutant votre travail à la galerie ou en discutant de Dynamo sur le forum.
Dynamo est conçu comme un outil de programmation visuelle pour les concepteurs, qui permet de créer des outils qui utilisent des bibliothèques externes ou tout produit Autodesk doté d'une API. Avec Dynamo Sandbox, vous pouvez développer des programmes dans une application de type "Sandbox", mais l’écosystème Dynamo continue de se développer.
Le code source du projet est ouvert, ce qui vous permet d'étendre ses fonctionnalités comme bon vous semble. Consultez le projet sur GitHub et parcourez les travaux en cours des utilisateurs qui personnalisent Dynamo.
Naviguez dans Dynamo, créez un fork et étendez ses fonctionnalités selon vos besoins.
L’espace de travail de Dynamo se compose de quatre éléments principaux.
Tous les onglets actifs.
Mode aperçu
Commandes Zoom/Panoramique
Nœud dans l’espace de travail
Lorsque vous ouvrez un nouveau fichier, un nouvel espace de travail d’accueil s’ouvre par défaut.
Vous pouvez créer un nœud personnalisé et l’ouvrir dans un espace de travail de nœud personnalisé.
Vous ne pouvez ouvrir qu’un seul espace de travail d’accueil dans chaque fenêtre Dynamo, mais vous pouvez ouvrir plusieurs espaces de travail de nœud personnalisé dans les onglets.
Il existe 3 méthodes permettant de passer d’un aperçu à un autre :
a. Utilisation des icônes situées en haut à droite
b. Clic avec le bouton droit de la souris dans l’espace de travail
Passage de l’aperçu 3D à l’aperçu du graphique
Passage de l’aperçu du graphique à l’aperçu 3D
c. Utilisation du raccourci clavier (Ctrl+B)
Vous pouvez utiliser des icônes ou la souris pour naviguer dans l’un ou l’autre des espaces de travail.
a. En mode Aperçu du graphique
À l’aide d’icônes :
À l’aide de la souris :
Clic avec le bouton gauche de la souris – Sélection
Clic avec le bouton gauche de la souris et glissement – Zone de sélection permettant de sélectionner plusieurs nœuds
Défilement vers le haut/bas au milieu – Zoom avant/arrière
Clic avec le bouton du milieu de la souris et glissement – Panoramique
Clic avec le bouton droit de la souris n’importe où dans la zone de dessin – Ouvrir la recherche dans la zone de dessin
b. En mode Aperçu 3D
À l’aide d’icônes :
À l’aide de la souris :
Défilement vers le haut/bas au milieu – Zoom avant/arrière
Clic avec le bouton du milieu de la souris et glissement – Panoramique
Clic avec le bouton droit de la souris et glissement – Orbite
Cliquez avec le bouton droit de la souris pour sélectionner un nœud.
Pour sélectionner plusieurs nœuds, cliquez et effectuez un glisser-déposer afin de créer une zone de sélection.
Dynamo est une plate-forme de programmation visuelle open source pour les concepteurs.
Vous venez d’ouvrir le guide Dynamo, un guide complet de programmation visuelle dans Autodesk Dynamo. Ce guide est un projet en cours de partage des fondamentaux de la programmation. Les rubriques suivantes concernent l'utilisation de la géométrie de calcul, les recommandations pour la conception basée sur des règles, des applications de programmation pluridisciplinaires et plus encore, avec la plate-forme Dynamo.
La puissance de Dynamo est offerte par une large gamme d'activités liées à la conception. Dynamo vous offre une liste étendue de méthodes facilement accessibles pour commencer à utiliser les logiciels suivants :
Découvrez la programmation visuelle
Connectez les workflows de différents logiciels
Interagissez avec une communauté active d'utilisateurs, de contributeurs et de développeurs
Développez une plate-forme open source pour une amélioration continue
Dans le cadre de cette activité et de l'opportunité passionnante de travailler avec Dynamo, nous avons besoin d'un document du même calibre, le guide Dynamo.
Consultez le manuel d'utilisation du guide pour découvrir en quoi consiste le guide Dynamo.
Nous améliorons constamment Dynamo, c'est pourquoi certaines fonctionnalités peuvent sembler différentes de celles représentées dans ce guide. Toutefois, toutes les modifications apportées aux fonctionnalités seront correctement représentées.
Le projet Dynamo Primer est open source. Nous nous efforçons de fournir du contenu de qualité et prenons en compte vos commentaires. Si vous souhaitez signaler un problème à un niveau quelconque, veuillez le publier sur la page des problèmes GitHub : https://github.com/DynamoDS/DynamoPrimer/issues
Si vous souhaitez contribuer à une nouvelle section, à des modifications ou à tout autre élément de ce projet, consultez le référentiel GitHub pour commencer : https://github.com/DynamoDS/DynamoPrimer.
Le guide Dynamo est un projet open source, initié par Matt Jezyk et l’équipe de développement Dynamo chez Autodesk.
Mode Lab a été chargé d’écrire la première édition du guide. Nous remercions l’équipe pour tous ses efforts afin d’établir cette précieuse ressource.
John Pierson de Parallax Team a été chargé de mettre à jour le guide pour qu’il contienne les révisions de Dynamo 2.0.
Matterlab a été chargé de mettre à jour le guide pour refléter les révisions de Dynamo 2.13.
Archilizer a été chargé de mettre à jour le guide pour refléter les révisions de Dynamo 2.17.
Wood Rodgers a été chargé de mettre à jour le guide avec le contenu de Dynamo for Civil 3D.
Un grand merci à Ian Keough pour avoir lancé et dirigé le projet Dynamo.
Merci à Matt Jezyk, Ian Keough, Zach Kron, Racel Amour et Colin McCrone pour leur collaboration enthousiaste et pour l’opportunité de participer à un large éventail de projets Dynamo.
Dynamo Reportez-vous aux sites suivants pour la version stable la plus récente de Dynamo.
http://dynamobim.com/download/ ou http://dynamobuilds.com
*Remarque : à partir de Revit 2020, Dynamo est fourni avec les versions de Revit, ce qui fait que l'installation manuelle n'est pas requise. Pour plus d'informations, consultez ce billet de blog.
DynamoBIM La meilleure source d'informations supplémentaires, de contenu de formation et de forums est le site Web DynamoBIM.
http://dynamobim.org
Dynamo GitHub Dynamo est un projet de développement open source sur GitHub. Pour contribuer, découvrez DynamoDS.
https://github.com/DynamoDS/Dynamo
Contact Faites-nous part de tous les problèmes rencontrés dans ce document.
Dynamo@autodesk.com
Copyright 2023 Autodesk.
Autorisé par la Licence Apache, version 2.0 (la "Licence") ; vous ne devez utiliser ce fichier que conformément à la Licence. Vous pouvez obtenir une copie de la Licence à l'adresse
http://www.apache.org/licenses/LICENSE-2.0
Sauf si cela est requis par la loi applicable ou convenu par écrit, le logiciel distribué dans le cadre de la Licence est distribué "EN L'ÉTAT", SANS GARANTIES OU CONDITIONS D'AUCUNE SORTE, expresses ou implicites. Consultez la Licence pour connaître les autorisations et les limitations existant dans une langue spécifique dans le cadre de la Licence.
Depuis sa conception en tant que complément pour la modélisation des informations du bâtiment dans Revit, Dynamo a beaucoup évolué. Il s'agit principalement d'une plate-forme qui permet aux concepteurs d'explorer la programmation visuelle, de résoudre les problèmes et de créer leurs propres outils. Commençons notre exploration de Dynamo en définissant un contexte général : à quoi sert Dynamo et comment commencer à l’utiliser ?
Dynamo est une application de programmation visuelle qui peut être téléchargée et exécutée en mode « Sandbox » autonome ou en tant que plug-in pour d’autres logiciels tels que Revit, FormIt ou Civil 3D.
En savoir plus sur la différence entre Dynamo Core/Revit/Sandbox.
Dynamo vous permet de travailler au sein d’un processus de programmation visuelle dans lequel vous connectez des éléments pour définir les relations et les séquences d’actions qui composent les algorithmes personnalisés. Vous pouvez utiliser vos algorithmes pour un large éventail d’applications, du traitement de données à la génération de géométries, le tout en temps réel et sans avoir à écrire une ligne de code
.
Les nœuds et les fils sont les composants clés de Dynamo qui prennent en charge un processus de programmation visuelle. Ils permettent d’établir des relations visuelles et systémiques solides entre les parties d’une conception. Utilisez la souris pour connecter les nœuds en toute simplicité lorsque vous développez et optimisez votre workflow de conception.
De l’utilisation de la programmation visuelle pour des workflows de projet au développement d’outils personnalisés, Dynamo est l’aspect essentiel d’une large gamme d’applications passionnantes.
Dynamo est un projet de développement open source actif. Découvrez la liste des logiciels qui prennent en charge Dynamo.
Dynamo est préinstallé avec des logiciels tels que Revit3D, FormIt, Civil3D, etc.
Pour plus d’informations sur l’utilisation de Dynamo avec un logiciel spécifique, consultez les sections suivantes :
Si vous souhaitez utiliser Dynamo en tant qu’application autonome. Continuez à lire pour obtenir des conseils sur le téléchargement du Dynamo Sandbox.
L’application Dynamo est disponible sur le site Web de Dynamo. Les versions officielles, antérieures ou pré-publiées sont disponibles sur la page de téléchargement. Visitez la page Obtenir Dynamo et cliquez sur Télécharger pour obtenir la version officielle.
Si vous recherchez des versions de développement précédentes ou les toutes dernières versions de développement, toutes les versions sont disponibles dans la section inférieure de la même page.
Les dernières nouveautés du développement peuvent inclure des fonctionnalités nouvelles et expérimentales qui n’ont pas encore été entièrement testées, et qui peuvent donc être instables. En utilisant cette fonction, vous pouvez détecter des bogues ou des problèmes, et nous aider à améliorer l’application en signalant ces problèmes à notre équipe.
Les débutants sont invités à télécharger la version stable officielle.
Avant de lancer une version que vous avez téléchargée, vous devez décompresser le contenu dans le dossier de votre choix.
Téléchargez et installez 7zip sur votre ordinateur pour cette étape.
Cliquez avec le bouton droit de la souris sur le fichier .zip et choisissez Extraire tout…
Choisissez une destination pour décompresser tous les fichiers.
Dans le dossier de destination, double-cliquez sur DynamoSandbox.exe pour le lancer.
L’écran de démarrage de Dynamo Sandbox s’affiche comme suit.
Félicitations, vous avez terminé la configuration de Dynamo Sandbox !
La fonction Géométrie est une fonctionnalité supplémentaire de Dynamo Sandbox qui est uniquement disponible pour les utilisateurs disposant d’un abonnement ou d’une licence valide pour les logiciels Autodesk suivants : Revit, Robot Structural Analysis, FormIt et Civil 3D. La fonction Géometrie permet aux utilisateurs d’importer, de créer, de modifier et d’exporter une géométrie à partir de Dynamo Sandbox.
Dans Dynamo, les nœuds sont les objets que vous connectez pour former un programme visuel. Chaque nœud effectue une opération, parfois aussi simple que le stockage d'un nombre, ou plus complexe, comme la création ou l'envoi de requêtes à une géométrie.
La plupart des nœuds de Dynamo sont composés de cinq éléments. Bien qu’il existe des exceptions, telles que les nœuds Input, l’anatomie de chaque nœud peut être décrite comme suit :
Nom : nom du nœud conforme à la convention d’appellation
Category.Name
.Corps principal : corps principal du nœud. Cliquez ici avec le bouton droit de la souris pour afficher les options au niveau du nœud entier
Ports (entrants et sortants) : récepteurs des fils qui fournissent les données d'entrée au nœud, ainsi que les résultats de l'action du nœud
Valeur par défaut : cliquez avec le bouton droit de la souris sur un port d'entrée. Certains nœuds ont des valeurs par défaut qui peuvent être utilisées ou non.
Les entrées et les sorties des nœuds sont appelées "ports" et servent de récepteurs pour les fils. Les données sont intégrées au nœud via des ports sur la gauche et sortent du nœud après l'exécution de son opération sur la droite.
Les ports doivent recevoir des données d'un certain type. Par exemple, la connexion d'un nombre tel que 2.75 aux ports d'un nœud Point By Coordinates permet de créer un point. Toutefois, si vous indiquez "Red" sur le même port, une erreur se produira.
Conseil : placez le curseur sur un port pour afficher une info-bulle contenant le type de données attendu.
Libellé de port
Info-bulle
Type de données
Valeur par défaut
Dynamo donne une indication de l'état d'exécution de votre programme visuel en effectuant le rendu des nœuds avec différents schémas de couleurs en fonction de l'état de chaque nœud. La hiérarchie des états suit la séquence suivante : Erreur > Avertissement > Infos > Aperçu.
Lorsque vous placez le curseur ou cliquez avec le bouton droit de la souris sur le nom ou les ports, vous affichez des informations et des options supplémentaires.
Entrées satisfaites : un nœud avec des barres verticales bleues sur ses ports d’entrée est bien connecté et toutes ses entrées sont connectées.
Entrées non satisfaites : ces entrées doivent être connectées à un nœud avec une barre verticale rouge sur un ou plusieurs ports d'entrée.
Fonction : un nœud qui génère une fonction et comporte une barre verticale grise sur un port de sortie est un nœud de fonction.
Sélectionné : les nœuds actuellement sélectionnés ont une bordure bleue.
Gelé : un nœud bleu translucide est gelé, ce qui interrompt son exécution.
Avertissement : une barre d'état jaune située sous le nœud indique l'état d'avertissement, ce qui signifie qu'il manque au nœud des données d'entrée ou que les types de données peuvent être incorrects.
Erreur : une barre d'état rouge située sous le nœud indique que le nœud est en état d'erreur.
Infos : la barre d'état bleue située sous le nœud indique l'état Informations, qui indique des informations utiles sur les nœuds. Cet état peut être déclenché lorsque vous approchez une valeur maximale prise en charge par le nœud, lorsque vous utilisez un nœud d'une manière susceptible d'avoir un impact sur les performances, etc.
Conseil : examinez les nœuds en amont à la lumière de ces informations d’info-bulle pour voir si le type ou la structure de données requis est erroné.
Info-bulle d’avertissement : une valeur « Null » ou l’absence de donnée ne peut être comprise comme un double, c’est-à-dire un nombre
Utilisez le nœud Watch pour examiner les données d'entrée
En amont, le nœud Number contient "Red" et non un nombre
Dans certaines situations, vous pouvez souhaiter empêcher l’exécution de nœuds spécifiques dans votre programme visuel. Vous pouvez le faire en « gelant » le nœud. Cette option se trouve dans le menu contextuel du nœud.
Le gel d’un nœud entraîne également le gel des nœuds situés en aval. En d’autres termes, tous les nœuds qui dépendent de la sortie d’un nœud gelé seront également gelés.
Les fils connectent les nœuds entre eux pour créer des relations et établir le flux de votre programme visuel. Vous pouvez les considérer comme des fils électriques qui transportent des données d'un objet à l'autre.
Les fils connectent le port de sortie d'un nœud au port d'entrée d'un autre nœud. Cette direction établit le flux de données dans le programme visuel.
Les ports d’entrée se trouvent sur le côté gauche et les ports de sortie sur le côté droit des nœuds. Par conséquent, vous pouvez généralement dire que le flux du programme se déplace de gauche à droite.
Cliquez avec le bouton gauche de la souris sur un port pour créer un fil, puis cliquez avec le bouton gauche de la souris sur le port d'un autre nœud pour créer une connexion. Pendant que vous réalisez une connexion, le fil s'affiche en pointillés et devient continu lorsque la connexion est établie.
Les données passent toujours par ce fil d’une sortie à une entrée. Toutefois, vous pouvez créer le fil dans les deux directions en termes d’ordre de clic sur les ports connectés.
Souvent, vous souhaitez ajuster le flux du programme dans votre programme visuel en modifiant les connexions représentées par les fils. Pour modifier un fil, cliquez avec le bouton gauche de la souris sur le port d'entrée du nœud déjà connecté. Vous pouvez ensuite procéder de l'une des manières suivantes :
Pour définir la connexion sur un port d’entrée, cliquez avec le bouton gauche de la souris sur un autre port d’entrée.
Pour supprimer le fil, retirez-le et cliquez avec le bouton gauche de la souris sur l’espace de travail.
Reconnectez plusieurs fils à l’aide de la combinaison Maj+clic gauche.
Dupliquez un fil à l’aide de la combinaison Ctrl+clic gauche.
Par défaut, l'aperçu des fils s'affiche avec un trait gris. Lorsqu’un nœud est sélectionné, il effectue le rendu de tous les fils connectés avec la même bordure bleue que le nœud.
Fil en surbrillance
Fil par défaut
Masquage des fils par défaut
Si vous préférez masquer les fils dans le graphique, vous pouvez accéder à cette option en sélectionnant Affichage > Connecteurs > Afficher les connecteurs.
Avec ce paramètre, seuls les nœuds sélectionnés et les fils qui les rejoignent présentent une bordure bleu clair.
Vous pouvez également masquer le fil sélectionné uniquement. Pour ce faire, cliquez avec le bouton droit de la souris sur la sortie Nœuds > Masquer les fils.
Un est une représentation de magnitude et de direction. Imaginez-vous une flèche accélérant vers une direction spécifique à une vitesse donnée. C’est un composant clé des modèles dans Dynamo. Dans la mesure où ils se trouvent dans la catégorie Abstract des « assistants », lorsque vous créez un vecteur, vous ne verrez rien dans l’aperçu en arrière-plan.
Vous pouvez utiliser une ligne comme support pour un aperçu vectoriel.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Bien qu’ils soient abstraits, les plans possèdent une position d’origine qui permet de les placer dans l’espace.
Dans Dynamo, les plans sont rendus dans l'aperçu en arrière-plan.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Bien qu’ils soient abstraits, les systèmes de coordonnées possèdent également une position d’origine qui permet de les placer dans l’espace.
Dans Dynamo, les systèmes de coordonnées sont rendus dans l'aperçu en arrière-plan en tant que point (origine) et lignes définissant les axes (X est rouge, Y est vert et Z est bleu suivant la convention).
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Les vecteurs, les plans et les systèmes de coordonnées constituent le groupe principal de types de géométrie abstraits. Ils vous aident à définir l'emplacement, l'orientation et le contexte spatial d'autres géométries décrivant des formes. Si vous dites que vous êtes à New York, au croisement de la 42e rue et de Broadway (système de coordonnées), debout au niveau de la rue (plan), regardant au nord (vecteur), vous venez d'utiliser ces "assistants" pour définir votre position. Il en va de même pour une coque de téléphone ou un gratte-ciel : vous avez besoin de ce contexte pour développer votre modèle.
Un vecteur est une quantité géométrique décrivant la direction et la magnitude. Les vecteurs sont abstraits, c’est-à-dire qu’ils représentent une quantité et non un élément géométrique. Les vecteurs peuvent être facilement confondus avec les points, car ils sont tous les deux composés d’une liste de valeurs. Il existe cependant une différence essentielle : les points décrivent une position dans un système de coordonnées donné, tandis que les vecteurs décrivent une différence par rapport à la position qui est la même que la « direction ».
Si l’idée de différence relative est déroutante, envisagez le vecteur AB sous cet angle : « Je suis au point A, et je regarde vers le point B. » La direction, d’ici (A) à là (B), est notre vecteur.
Décomposez davantage les vecteurs en parties en utilisant la même notation AB :
Le point de départ du vecteur est appelé base.
Le point d’arrivée du vecteur est appelé pointe ou sens.
Le vecteur AB est différent du vecteur BA, qui pointe dans la direction opposée.
Pour ajouter une touche de légèreté en ce qui concerne les vecteurs (et leur définition abstraite), impossible de ne pas mentionner la fameuse réplique de la comédie "Y a-t-il un pilote dans l'avion" :
Roger, Roger. Quel est votre vecteur, Victor ?
Les plans sont des "assistants" abstraits 2D. Plus spécifiquement, les plans sont conceptuellement "plats", s'étendant de manière infinie dans deux directions. En général, ils sont rendus sous la forme d’un rectangle plus petit près de leur origine.
Vous pensez peut-être, "Attendez ! Et l'origine ? Cela ressemble à un système de coordonnées... comme celui que j'utilise pour modéliser des éléments dans mon logiciel de CAO !"
Et vous avez raison ! La plupart des logiciels de modélisation tirent parti des plans de construction ou des "niveaux" afin de définir un contexte local bidimensionnel pour le dessin. XY, XZ, YZ ou Nord, Sud-est, le plan peut sembler plus familier. Il s'agit de tous les plans, définissant un contexte "plat" infini. Les plans n’ont pas de profondeur, mais ils permettent aussi de décrire la direction.
Si vous maîtrisez parfaitement les plans, les systèmes de coordonnées ne vous poseront pas de difficultés. Un plan possède les mêmes composants qu'un système de coordonnées, à condition qu'il s'agisse d'un système de coordonnées "euclidiennes" ou "XYZ" standard.
Cependant, il existe d'autres systèmes de coordonnées, tels que les systèmes cylindriques ou sphériques. Comme vous le verrez dans les sections suivantes, les systèmes de coordonnées peuvent également être appliqués à d’autres types de géométrie afin de définir une position sur la géométrie en question.
Ajout de systèmes de coordonnées alternatifs : cylindrique, sphérique
Cette section présente les nœuds essentiels disponibles dans la bibliothèque Dynamo qui vous aideront à créer votre propre programme visuel comme un pro.
: comment utiliser les éléments géométriques dans Dynamo ? Explorez plusieurs méthodes pour créer des géométries simples ou complexes à partir de primitives.
que sont les données et quels en sont les types fondamentaux à utiliser dans mes programmes ? De plus, découvrez comment intégrer les opérations mathématiques et logiques à votre workflow de conception.
comment gérer et coordonner les structures de données ? Apprenez-en davantage sur le concept de liste et utilisez-le pour gérer efficacement vos données de conception.
que sont les dictionnaires ? Découvrez comment utiliser les dictionnaires pour rechercher des données et des valeurs spécifiques à partir de résultats existants.
Aperçu du graphique
Aperçu 3D
Zoom fenêtre
Appliquer un zoom avant
Appliquer un zoom arrière
Panoramique
Zoom fenêtre
Appliquer un zoom avant
Appliquer un zoom arrière
Panoramique
Orbite
Pour commencer à l’utiliser, lancez-le à partir du groupe de fonctions de la barre d’outils. Selon le logiciel que vous utilisez, l’icône de lancement est généralement accessible en cliquant sur le menu, puis en sélectionnant l’onglet Gérer. Cliquez sur l’icône Dynamo pour le lancer.
Icône de combinaison : indique l' spécifiée pour les entrées de liste correspondantes (plus d'informations sur cette option ultérieurement).
Aperçu désactivé : une barre d’état grise sous le nœud et une icône en forme d’œil indiquent que la prévisualisation de la géométrie du nœud est désactivée.
Si votre programme visuel contient des avertissements ou des erreurs, Dynamo fournit des informations supplémentaires sur le problème. Tout nœud jaune comporte également une info-bulle au-dessus de son nom. Placez le curseur de la souris sur l’icône d’avertissement ou d’erreur dans l’info-bulle pour la développer.
Un est une surface bidimensionnelle. Imaginez-vous une surface plane qui s’étend indéfiniment. Chaque plan possède une origine, une direction X, une direction Y et une direction Z (vers le haut).
Le est un système permettant de déterminer l’emplacement des points ou d’autres éléments géométriques. L’image ci-dessous explique à quoi il ressemble dans Dynamo et à quoi correspond chaque couleur.
La bibliothèque contient tous les nœuds chargés, y compris les nœuds de catégorie par défaut fournis avec l’installation, ainsi que tous les autres nœuds ou packages personnalisés chargés. Les nœuds de la bibliothèque sont organisés de manière hiérarchique dans les bibliothèques, les catégories et, le cas échéant, les sous-catégories.
Nœuds de base : fournis avec l’installation par défaut.
Nœuds personnalisés : stockez vos routines fréquemment utilisées ou votre graphique spécial en tant que nœuds personnalisés. Vous pouvez également partager vos nœuds personnalisés avec la communauté.
Nœuds du gestionnaire de package : collection de nœuds personnalisés publiés.
Nous allons parcourir la catégorie Hiérarchie des nœuds, apprendre comment effectuer rapidement une recherche dans la bibliothèque et découvrir certains des nœuds fréquemment utilisés.
Parcourir ces catégories est la manière la plus rapide de comprendre la hiérarchie des éléments que vous pouvez ajouter à votre espace de travail et la meilleure façon de découvrir les nouveaux nœuds que vous n'avez pas utilisés auparavant.
Parcourez la bibliothèque en cliquant sur les menus pour développer chaque catégorie et sa sous-catégorie.
Géométrie est un excellent menu à explorer en premier, car il contient la plus grande quantité de nœuds.
Bibliothèque
Catégorie
Sous-catégorie
Nœud
Ces menus permettent de classer les nœuds dans la même sous-catégorie selon que les nœuds créent des données, exécutent une action ou interrogent des données.
Placez le curseur de la souris sur un nœud pour afficher des informations plus détaillées que son nom et son icône. Ces informations permettent de comprendre ce que fait le nœud, ce qu’il requiert pour les entrées et ce qu’il va donner en sortie.
Description : description du nœud en langage simple
Icône : version plus grande de l'icône dans le menu de la bibliothèque
Entrée(s) : nom, type de données et structure de données
Sortie(s) : type de données et structure
Si vous avez une idée du nœud que vous souhaitez ajouter à votre espace de travail, faites une recherche dans le champ Rechercher pour rechercher tous les nœuds correspondants.
Cliquez sur le nœud que vous souhaitez ajouter ou appuyez sur la touche Entrée pour ajouter les nœuds mis en surbrillance au centre de l’espace de travail.
Outre l’utilisation de mots-clés pour rechercher des nœuds, vous pouvez saisir la hiérarchie en la séparant par un point dans le champ de recherche ou par des nœuds Code Block (qui utilisent le langage textuel Dynamo).
La hiérarchie de chaque bibliothèque est reflétée dans le nom des nœuds ajoutés à l’espace de travail.
La saisie de différentes parties de la position du nœud dans la hiérarchie de la bibliothèque au format library.category.nodeName
renvoie différents résultats :
library.category.nodeName
category.nodeName
nodeName
ou keyword
En règle générale, le nom du nœud dans l’espace de travail est rendu au format category.nodeName
, à quelques exceptions près, notamment dans les catégories Input et View.
Attention aux nœuds ayant un nom similaire et notez la différence de catégorie :
Les nœuds de la plupart des bibliothèques incluent le format de catégorie.
Les nœuds Point.ByCoordinates
et UV.ByCoordinates
portent le même nom, mais proviennent de différentes catégories.
Les exceptions notables incluent les fonctions intégrées : Core.Input, Core.View et Operators.
Compte tenu du fait que l’installation de base de Dynamo comprend des centaines de nœuds, quels nœuds sont essentiels au développement de programmes visuels ? Concentrez-vous sur ceux qui permettent de définir les paramètres de votre programme (Input), d’afficher les résultats de l’action d’un nœud (Watch) et de définir les entrées ou les fonctionnalités par le biais d’un raccourci (Code Block).
Les nœuds Input sont les principaux moyens pour que l'utilisateur de votre programme visuel, que ce soit vous-même ou quelqu'un d'autre, interagisse avec les paramètres clés. En voici quelques-uns disponibles dans la bibliothèque principale :
Les nœuds Watch sont essentiels pour la gestion des données qui circulent dans votre programme visuel. Vous pouvez afficher le résultat d’un nœud dans l’aperçu des données de nœud en plaçant le curseur de la souris sur le nœud.
Il sera utile de l’afficher dans un nœud Watch
Vous pouvez également afficher les résultats de la géométrie à l’aide d’un nœud Watch3D.
Ces deux nœuds sont disponibles dans la catégorie View de la bibliothèque Core.
Conseil : il peut arriver que l’aperçu 3D soit gênant lorsque votre programme visuel contient un grand nombre de nœuds. Pensez à désactiver l’option Afficher l’aperçu en arrière-plan dans le menu Paramètres et à utiliser un nœud Watch3D pour afficher un aperçu de la géométrie.
Les nœuds Code Block servent à définir un bloc de code avec des lignes séparées par des points-virgules. Cela peut être aussi simple que X/Y
.
Vous pouvez également utiliser les nœuds Code Block comme raccourci pour définir un nœud Number Input ou appeler la fonctionnalité d’un autre nœud. La syntaxe permettant de procéder à cette opération suit la convention d’attribution de noms du langage textuel Dynamo, DesignScript.
Voici une démonstration simple (avec des instructions) de l’utilisation du nœud Code Block dans votre script.
Double-cliquez pour créer un nœud Code Block.
Circle.ByCenterPointRadius(x,y);
Type
Cliquez sur l’espace de travail pour effacer la sélection et ajouter automatiquement les entrées x
et y
.
Créez les nœuds Point.ByCoordinates et Number Slider, puis connectez-les aux entrées du nœud Code Block.
Le résultat de l’exécution du programme visuel est affiché sous forme de cercle dans l’aperçu 3D.
Les courbes sont le premier type de données géométriques abordé qui a un jeu de propriétés descriptives de forme plus familier : courbe ou droite ? Longue ou courte ? N’oubliez pas que les points restent des blocs de construction permettant de définir n’importe quel élément d’une ligne à une spline et tous les types de courbes entre les deux.
Ligne
Polyligne
Arc
Cercle
Ellipse
Courbe NURBS
Polycourbe
NURBS est un modèle utilisé pour représenter les courbes et les surfaces avec précision. Une courbe sinusoïdale dans Dynamo à l’aide de deux méthodes différentes afin de créer des courbes NURBS et de comparer les résultats.
NurbsCurve.ByControlPoints utilise la liste de points comme points de contrôle.
NurbsCurve.ByPoints trace une courbe passant par la liste de points.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Le terme courbe est généralement un terme « fourre-tout » pour toutes les formes relativement courbes (même les droites). La courbe « C » en majuscule est la catégorisation parent de tous ces types de formes : lignes, cercles, splines, etc. Techniquement, une courbe décrit tous les points possibles qui peuvent être trouvés en saisissant « t » dans un ensemble de fonctions, pouvant aller des fonctions simples (x = -1.26*t, y = t
) aux fonctions comprenant du calcul. Quel que soit le type de courbe sur lequel vous travaillez, ce paramètre appelé « t » est une propriété que vous pouvez évaluer. En outre, quel que soit l’aspect de la forme, toutes les courbes ont également un point de départ et un point d’arrivée, qui, de manière fortuite, correspondent aux valeurs t minimale et maximale utilisées pour créer la courbe. Cela permet de comprendre sa direction.
Il est important de noter que Dynamo suppose que le domaine des valeurs « t » d’une courbe est compris entre 0.0 et 1.0.
Toutes les courbes possèdent également un certain nombre de propriétés ou de caractéristiques servant à les décrire ou à les analyser. Lorsque la distance entre les points de départ et d'arrivée est égale à zéro, la courbe est "fermée". De plus, chaque courbe comporte un certain nombre de points de contrôle. Si tous ces points sont situés sur le même plan, la courbe est "planaire". Certaines propriétés s'appliquent à la courbe dans son ensemble, tandis que d'autres s'appliquent uniquement à des points spécifiques situés le long de la courbe. Par exemple, la planéité est une propriété globale, tandis qu'un vecteur de tangente à une valeur t donnée est une propriété locale.
Les lignes sont la forme la plus simple des courbes. Elles ne semblent pas courbées, mais sont en fait des courbes (sans aucune courbure). Il existe plusieurs méthodes pour créer des lignes. La méthode la plus intuitive consiste à relier le point A au point B. La forme de la ligne AB est dessinée entre les points, mais mathématiquement, elle s’étend à l’infini dans les deux directions.
Lorsque vous connectez deux lignes, vous obtenez une polyligne. L’illustration ci-dessous est une représentation simple de ce qu’est un point de contrôle. Si vous modifiez l'un des emplacements de ces points, la forme de la polyligne change. Si vous fermez la polyligne, vous obtenez un polygone. Si les longueurs d’arête du polygone sont toutes égales, elles sont décrites comme régulières.
À mesure que vous ajoutez de la complexité aux fonctions paramétriques qui définissent une forme, vous pouvez aller plus loin qu’une ligne pour créer un arc, un cercle, un arc d’ellipse ou une ellipse en décrivant un ou deux rayons. Les différences entre la version arc et le cercle ou l’ellipse reposent uniquement sur le fait que la forme est fermée ou non.
Les NURBS (splines de base rationnelles non uniformes) sont des représentations mathématiques qui permettent de modéliser avec précision n’importe quelle forme d’une simple ligne, d’un cercle, d’un arc ou d’un rectangle 2D à la courbe organique de forme libre 3D la plus complexe. En raison de leur flexibilité (relativement peu de points de contrôle, mais une interpolation lisse en fonction des paramètres de degré) et de leur précision (liée à un calcul robuste), les modèles NURBS peuvent être utilisés dans n’importe quel processus, de l’illustration à la fabrication, en passant par l’animation.
Degré : le degré de la courbe détermine la plage d’influence des points de contrôle sur une courbe. Lorsque la valeur du degré est élevée, l’intervalle est plus important. Le degré est un nombre entier positif. Ce nombre est généralement 1, 2, 3 ou 5, mais il peut s'agir de n'importe quel nombre entier positif. Les lignes et les polylignes NURBS sont généralement de degré 1 et la plupart des courbes de forme libre de degré 3 ou 5.
Points de contrôle : les points de contrôle sont une liste de points de degrés+1 minimum. Pour modifier la forme d’une courbe NURBS, il suffit de déplacer ses points de contrôle.
Poids : les points de contrôle sont associés à un nombre appelé poids. Les poids sont généralement des nombres positifs. Lorsque les points de contrôle d'une courbe ont tous le même poids (généralement 1), la courbe est appelée non rationnelle. Dans le cas contraire, la courbe est appelée rationnelle. La plupart des courbes NURBS ne sont pas rationnelles.
Nœuds : les nœuds sont une liste de nombres (degré + N-1), où N représente le nombre de points de contrôle. Les nœuds sont utilisés conjointement avec les poids afin de contrôler l’influence des points de contrôle sur la courbe obtenue. L’une des utilisations possibles des nœuds consiste à créer des boucles à certains points de la courbe.
Degré = 1
Degré = 2
Degré = 3
Plus la valeur de degré est élevée, plus les points de contrôle sont utilisés pour interpoler la courbe obtenue.
La géométrie est le langage de conception. Lorsqu’un environnement ou un langage de programmation possède un noyau de géométrie, il est possible de concevoir des modèles précis et robustes, d’automatiser des routines de conception et de générer des itérations de conception avec des algorithmes.
La compréhension des types de géométrie et de leur relation vous permettra de naviguer dans l’ensemble des nœuds de géométrie disponibles dans la bibliothèque. Les nœuds de géométrie sont organisés par ordre alphabétique et non hiérarchisé. Ici, l’affichage des nœuds est similaire à leur présentation dans l’interface Dynamo.
De plus, la création de modèles dans Dynamo et la connexion de l’aperçu de ce qui est visible dans l’aperçu en arrière-plan avec le flux de données dans le graphique devraient devenir plus intuitives au fil du temps.
Observez le système de coordonnées spécifique rendu par la grille et les axes de couleur.
Les nœuds sélectionnés génèrent le rendu de la géométrie correspondante (si le nœud crée une géométrie) à l'arrière-plan (couleur de surbrillance).
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
La géométrie, au sens traditionnel, est l'étude de la forme, de la taille, de la position relative des figures et des propriétés de l'espace. Ce domaine a un riche passé qui remonte à des milliers d'années. L'avènement et la popularisation de l'ordinateur ont permis d'acquérir un outil puissant permettant de définir, d'explorer et de générer de la géométrie. Calculer le résultat d’interactions géométriques complexes est devenu extrêmement facile. Le fait même de le faire est presque transparent.
Si vous souhaitez savoir comment une géométrie complexe et diversifiée peut exploiter la puissance de votre ordinateur, recherchez « lapin de Stanford » sur le Web. Il s’agit d’un modèle canonique utilisé pour tester les algorithmes.
Les algorithmes, les calculs et la complexité peuvent entraver la compréhension de la géométrie. Toutefois, il existe quelques principes clés, et relativement simples, que vous pouvez établir comme fondamentaux pour commencer à aller vers des applications plus avancées :
La géométrie représente des données : pour l’ordinateur et Dynamo, un lapin n’est pas si différent d’un nombre.
La géométrie repose sur une abstraction : les éléments géométriques sont essentiellement décrits par des nombres, des relations et des formules dans un système de coordonnées spatiales donné.
La géométrie possède une hiérarchie : les points sont assemblés pour créer des lignes, des lignes pour créer des surfaces, etc.
La géométrie décrit simultanément la partie et l’ensemble : quand vous avez une courbe, c’est à la fois la forme et tous les points possibles le long de celle-ci.
En pratique, ces principes impliquent que nous devons être conscients de ce avec quoi nous travaillons (quel type de géométrie, comment elle a été créée, etc.) afin de pouvoir composer, décomposer et recomposer librement différentes géométries à mesure que nous développons des modèles plus complexes.
Prenez le temps d'observer la relation entre les descriptions abstraite et hiérarchique de la géométrie. Ces deux concepts étant liés, mais pas toujours évidents au début, vous pouvez vous heurter rapidement à un blocage conceptuel une fois que vous avez commencé à développer des workflows ou des modèles plus approfondis. Pour commencer, utilisez la cotation comme descripteur simple des "éléments" modélisés. Le nombre de cotes requises pour décrire une forme vous donne un aperçu de la façon dont la géométrie est organisée de façon hiérarchique.
Un point (défini par des coordonnées) ne possède pas de cotes ; il s’agit juste de nombres décrivant chaque coordonnée.
Une ligne (définie par deux points) possède désormais une cote : vous pouvez « déplacer » la ligne vers l’avant (direction positive) ou vers l’arrière (direction négative).
Un plan (défini par deux lignes) a deux cotes : vous pouvez désormais aller à gauche ou à droite.
Une boîte (définie par deux plans) comporte trois cotes : vous pouvez définir une position par rapport à la direction vers le haut ou vers le bas.
La cotation est un moyen pratique de commencer à catégoriser la géométrie, mais ce n’est pas nécessairement le meilleur. Après tout, vous ne modélisez pas uniquement des points, des lignes, des plans et des boîtes. Que faire si des courbes entrent en jeu ? En outre, il existe une toute autre catégorie de types géométriques complètement abstraits, c’est-à-dire qu’ils définissent des propriétés telles que l’orientation, le volume ou les relations entre les pièces. Il n’est pas réellement possible de saisir un vecteur. Comment le définir par rapport aux élément affichés l’espace ? Une catégorisation plus détaillée de la hiérarchie géométrique doit permettre de tenir compte de la différence entre les types abstraits ou les « assistants », que vous pouvez regrouper en fonction de ce qu’ils aident à faire et des types qui aident à décrire la forme des éléments du modèle.
La création de modèles dans Dynamo ne se limite pas à ce que vous pouvez générer avec des nœuds. Voici quelques méthodes essentielles pour faire passer votre processus à la phase suivante avec la géométrie :
Dynamo vous permet d'importer des fichiers : essayez d'utiliser un fichier CSV pour les nuages de points ou SAT pour importer des surfaces.
Lorsque vous travaillez avec Revit, vous pouvez référencer des éléments Revit à utiliser dans Dynamo.
Le gestionnaire de package Dynamo offre des fonctionnalités supplémentaires pour les types de géométrie étendus et les opérations : découvrez le package Mesh Toolkit.
Si la forme de données la plus simple est le nombre, la méthode la plus simple pour lier ces nombres est d'utiliser les mathématiques. Des opérateurs simples, tels que la division, aux fonctions trigonométriques et aux formules plus complexes, Math est un excellent moyen de commencer à explorer les relations numériques et les motifs.
Les opérateurs sont un ensemble de composants qui utilisent des fonctions algébriques avec deux valeurs numériques d'entrée, ce qui génère une valeur de sortie unique (addition, soustraction, multiplication, division, etc.). Ces commandes sont disponibles sous Opérateurs > Actions.
Icône | Nom (Syntaxe) | Entrées | Sorties |
---|---|---|---|
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Combinez les opérateurs et les variables pour créer une relation plus complexe à l’aide de formules. Utilisez les curseurs pour créer une formule qui peut être contrôlée à l’aide des paramètres d’entrée.
1. Créez une séquence de nombres qui représente le « t » dans l’équation paramétrique. Vous devez donc utiliser une liste suffisamment grande pour définir une clothoïde.
Number Sequence : définissez une séquence de nombres reposant sur les trois entrées start, amount et step.
2. L’étape ci-dessus a permis de créer une liste de nombres pour définir le domaine paramétrique. Ensuite, créez un groupe de nœuds représentant l’équation de la clothoïde dorée.
La clothoïde dorée est définie comme l’équation suivante :
L’image ci-dessous représente la spirale dorée sous forme de programmation visuelle. Lorsque vous parcourez le groupe de nœuds, essayez de faire le parallèle entre le programme visuel et l’équation écrite.
a. Number Slider : ajoutez deux curseurs de numérotation dans la zone de dessin. Ces curseurs représentent les variables a et b de l’équation paramétrique. Elles représentent une constante flexible, ou des paramètres que vous pouvez ajuster afin d’obtenir le résultat souhaité.
b. Multiplication (*) : le nœud de multiplication est représenté par un astérisque. Vous utiliserez ce nœud à plusieurs reprises pour connecter des variables de multiplication.
c. Math.RadiansToDegrees : les valeurs « t » doivent être converties en degrés pour être évaluées dans les fonctions trigonométriques. N’oubliez pas que Dynamo utilise par défaut les degrés pour évaluer ces fonctions.
d. Math.Pow : la fonction de « t » et le numéro « e » permettent de créer la séquence Fibonacci.
. Math.Cos et Math.Sin : ces deux fonctions trigonométriques différencient respectivement la coordonnée x et la coordonnée y de chaque point paramétrique.
f. Watch : le résultat obtenu se compose de deux listes. Elles représentent les coordonnées x et y des points utilisés pour générer la clothoïde.
Le bloc de nœuds de l’étape précédente fonctionne correctement, mais cela demande beaucoup de travail. Pour créer un workflow plus efficace, consultez la section DesignScript pour définir une chaîne d’expressions Dynamo en un nœud. Dans cette prochaine série d’étapes, vous allez utiliser l’équation paramétrique pour dessiner la clothoïde de Fibonacci.
Point.ByCoordinates : connectez le nœud de multiplication supérieur à l’entrée « x » et le nœud inférieur à l’entrée « y ». Une clothoïde paramétrique de points apparaît à l’écran.
Polycurve.ByPoints : connectez Point.ByCoordinates de l’étape précédente à points. Vous pouvez laisser connectLastToFirst sans entrée, car vous ne créez pas de courbe fermée. Cela permet de créer une spirale qui passe par chaque point défini à l’étape précédente.
La clothoïde de Fibonacci est désormais terminée. Vous allez désormais effectuer deux exercices distincts, appelés Nautilus et Tournesol. Ce sont des abstractions de systèmes naturels, mais qui représentent bien les deux applications différentes de la clothoïde de Fibonacci.
Circle.ByCenterPointRadius : utilisez un nœud circulaire avec les mêmes entrées que celles de l’étape précédente. Étant donné que la valeur du rayon par défaut est de 1,0, un réseau de cercles apparaît immédiatement. La façon dont les points divergent à partir du point d’origine est immédiatement lisible.
Number Sequence : réseau d’origine de « t ». Si vous connectez ceci à la valeur du rayon de Circle.ByCenterPointRadius, les centres des cercles divergent davantage à partir de l’origine, mais le rayon des cercles augmente, créant ainsi un super graphique circulaire de Fibonacci.
Et c’est encore mieux en 3D !
Maintenant que vous avez créé une coque Nautilus circulaire, passez aux grilles paramétriques. Vous allez utiliser une rotation de base sur la clothoïde Fibonacci pour créer une grille Fibonacci, et le résultat est modélisé après la croissance des graines de tournesol.
Comme point de départ, commencez par la même étape qu’à l’exercice précédent : la création d’un réseau de points en forme de spirale avec le nœud Point.ByCoordinates.
![](../images/5-3/2/math-part IV-01.jpg)
Ensuite, suivez ces courtes étapes pour générer une série de clothoïdes à différentes rotations.
a. Geometry.Rotate : il existe plusieurs options Geometry.Rotate. Assurez-vous d’avoir choisi le nœud avec les entrées geometry, basePlane et degrees. Connectez Point.ByCoordinates à l’entrée geometry. Cliquez avec le bouton droit de la souris sur ce nœud et assurez-vous que la combinaison est définie sur « Produit vectoriel ».
b. Plane.XY : connexion à l’entrée basePlane. Vous allez effectuer une rotation autour de l’origine, servant également de base pour la clothoïde.
c. Number Range : pour la saisie des degrés, vous devez créer plusieurs rotations. Pour ce faire, il suffit d’utiliser un composant Number Range. Connectez-le à l’entrée degrees.
d. Number : pour définir l’intervalle de nombres, ajoutez trois nœuds Number à la zone de dessin dans l’ordre vertical. De haut en bas, affectez respectivement les valeurs 0.0, 360.0 et 120.0. Elles pilotent la rotation de la clothoïde. Après avoir connecté les trois nœuds Number au nœud Range, observez les sorties du nœud Number Range.
Le résultat obtenu commence à ressembler à un tourbillon. Ajustez certains paramètres de Number Range et observez le changement des résultats.
Modifiez la taille du pas du nœud Number Range de 120.0 à 36.0. Cette action crée davantage de rotations et permet donc d’obtenir une grille plus dense.
Modifiez la taille du pas du nœud Number Range de 36.0 à 3.6. Vous obtenez une grille beaucoup plus dense, et la direction de la clothoïde n’est pas claire. Bravo, vous avez créé un tournesol.
Les données sont les éléments des programmes. Elles circulent par l'intermédiaire de fils, fournissant des entrées pour les nœuds où elles sont traitées dans une nouvelle forme de données de sortie. Vous trouverez ci-dessous des informations sur la définition des données, leur structure et leur utilisation dans Dynamo.
Les données sont un ensemble de valeurs de variables qualitatives ou quantitatives. La forme de données la plus simple est celle des nombres tels que 0
, 3.14
ou 17
. Cependant, les données peuvent également être de différents types : une variable représentant des nombres changeants (height
), des caractères (myName
), une géométrie (Circle
) ou une liste d’éléments de données (1,2,3,5,8,13,...
).
Dans Dynamo, ajoutez/transmettez des données aux ports d’entrée des nœuds. Vous pouvez avoir des données sans actions, mais vous avez besoin de données pour traiter les actions que les nœuds représentent. Lorsque vous avez ajouté un nœud à l’espace de travail, si aucune entrée n’est fournie, le résultat est une fonction, et non le résultat de l’action elle-même.
Données simples
Exécution réussie des données et des actions (nœud A)
Une action (nœud A) sans entrées de données renvoie une fonction générique
Attention aux valeurs nulles. Le type 'null'
représente l’absence de données. Bien qu'il s'agisse d'un concept abstrait, vous risquez de rencontrer ce phénomène lorsque vous travaillez avec la programmation visuelle. Si une action ne crée pas de résultat valide, le nœud renvoie une valeur nulle.
Il est crucial de tester les valeurs nulles et de les supprimer de la structure de données pour créer des programmes robustes.
Lorsque vous concevez des programmes visuels, vous pouvez générer très rapidement beaucoup de données, ce qui exige un moyen de gérer la hiérarchie. Il s'agit du rôle des structures de données, les schémas organisationnels dans lesquels sont stockées les données. Les spécificités des structures de données et leur utilisation varient d'un langage de programmation à un autre.
Dynamo permet de hiérarchiser les données via des listes. Vous allez explorer cela en détail dans les prochains chapitres, mais commençons simplement :
Une liste représente un ensemble d’éléments placés dans une structure de données :
J’ai cinq doigts (éléments) sur la main (liste).
Il y a dix maisons (éléments) dans ma rue (liste).
Un nœud Number Sequence définit une liste de nombres en utilisant les entrées start, amount et step. Ces nœuds permettent de créer deux listes distinctes de dix nombres, l’une qui va de 100 à 109 et l’autre qui va de 0 à 9.
Le nœud List.GetItemAtIndex sélectionne un élément dans une liste à un index spécifique. Lorsque vous choisissez 0, le premier élément de la liste est affiché (100 dans ce cas).
Si vous appliquez le même processus à la deuxième liste, vous obtenez la valeur 0, le premier élément de la liste.
Vous allez maintenant fusionner les deux listes en une seule à l’aide du nœud List.Create. Le nœud crée une liste de listes. Cette action modifie la structure des données.
Lorsque vous utilisez de nouveau List.GetItemAtIndex, avec un index défini sur 0, la première liste est répertoriée dans la liste de listes. C’est ce que signifie traiter une liste comme un élément, ce qui est légèrement différent dans d’autres langages de script. Les prochains chapitres vous permettront d’en savoir plus sur la manipulation des listes et la structure des données.
Voici le concept clé à retenir sur la hiérarchie des données dans Dynamo : en ce qui concerne la structure des données, les listes sont considérées comme des éléments. En d’autres termes, Dynamo fonctionne avec un processus descendant permettant de comprendre les structures de données. Que cela signifie-t-il ? Découvrez-le grâce à un exemple.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans ce premier exemple, vous allez assembler un cylindre en forme de coque qui traverse la hiérarchie de la géométrie abordée dans cette section.
1. Ajoutez Point.ByCoordinates : après l’ajout du nœud dans la zone de dessin, un point apparaît à l’origine de la grille d’aperçu Dynamo. Les valeurs par défaut des entrées x,y et z sont 0,0, ce qui vous donne un point à cet emplacement.
2. Plan.ByOriginNormal : l’étape suivante dans la hiérarchie de la géométrie est un plan. Il existe plusieurs façons de construire un plan. Pour l’entrée, utilisez une origine et une normale. L’origine est le nœud de point créé à l’étape précédente.
Vector.ZAxis : il s’agit d’un vecteur unifié dans la direction Z. Notez qu’il n’y a pas d’entrées, seulement un vecteur de valeur [0,0,1]. Utilisez-le comme entrée normal pour le nœud Plane.ByOriginNormal. Vous obtenez ainsi un plan rectangulaire dans l’aperçu Dynamo.
3. Circle.ByPlaneRadius : en avançant dans la hiérarchie, vous créez une courbe à partir du plan de l’étape précédente. Après avoir connecté le nœud, un cercle apparaît à l’origine. Le rayon par défaut sur le nœud est de 1.
4. Curve.Extrude : permet de faire apparaître cet élément en lui donnant une certaine profondeur et en allant dans la troisième dimension. Ce nœud crée une surface à partir d’une courbe par extrusion. La distance par défaut sur le nœud est 1 et un cylindre doit apparaître dans la fenêtre.
5. Surface.Thicken : ce nœud vous donne un solide fermé grâce au décalage de la surface d’une distance donnée et à la fermeture de la forme. La valeur d’épaisseur par défaut est de 1 et un cylindre en forme de coque s’affiche dans la fenêtre coformément à ces valeurs.
6. Number Slider : au lieu d’utiliser les valeurs par défaut pour toutes ces entrées, ajoutez un contrôle paramétrique au modèle.
Domain Edit : après avoir ajouté le curseur de numérotation à la zone de dessin, cliquez sur le curseur situé en haut à gauche pour afficher les options du domaine.
Min/Max/Step : remplacez les valeurs Min, Max et Step par 0, 2 et 0,01 respectivement. Ces valeurs servent à contrôler la taille de la géométrie globale.
7. Number Slider : dans toutes les entrées par défaut, copiez et collez ce curseur de numérotation (sélectionnez le curseur, appuyez plusieurs fois sur Ctrl+C, puis sur Ctrl+V), jusqu’à ce que toutes les entrées avec des valeurs par défaut disposent d’un curseur à la place. Certaines valeurs du curseur doivent être supérieures à zéro pour que la définition fonctionne (p.ex., vous devez disposer d’une profondeur d’extrusion pour disposer d’une surface à épaissir).
8. Vous avez maintenant créé un cylindre paramétrique en forme de coque avec ces curseurs. Ajustez certains de ces paramètres et observez la géométrie se mettre à jour dynamiquement dans la fenêtre Dynamo.
Number Slider : pour aller plus loin, ajoutez de nombreux curseurs dans la zone de dessin et nettoyez l’interface de l’outil que vous venez de créer. Cliquez avec le bouton droit de la souris sur un curseur, choisissez « Renommer… » et remplacez chaque curseur par le nom approprié pour son paramètre (Épaisseur, Rayon, Hauteur, etc.).
9. À ce stade, vous avez créé un élément cylindrique épaississant fantastique. Il s'agit d'un seul objet actuellement. Découvrez désormais comment créer un réseau de cylindres liés dynamiquement. Pour ce faire, vous allez créer une liste de cylindres, plutôt que de travailler avec un seul élément.
Ajout (+) : votre objectif est d’ajouter une ligne de cylindres à côté du cylindre créé. Si vous souhaitez ajouter un cylindre adjacent au cylindre en cours, vous devez prendre en compte à la fois le rayon du cylindre et l’épaisseur de sa coque. Pour obtenir ce nombre, ajoutez les deux valeurs des curseurs.
10. Étant donné que cette étape est plus importante, allez-y étape par étape : l’objectif final consiste à créer une liste de nombres qui définissent les emplacements de chaque cylindre dans une ligne.
a. Multiplication : tout d’abord, multipliez la valeur de l’étape précédente par 2. La valeur de l’étape précédente représente un rayon et il convient de déplacer le cylindre sur le diamètre complet.
b. Number Sequence : créez un réseau de nombres à l’aide de ce nœud. La première entrée est le nœud de multiplication de l’étape précédente vers la valeur step. Pour définir la valeur start sur 0,0, utilisez un nœud Number.
c. Integer Slider : connectez un curseur d’entier à la valeur amount. Cela permet de définir le nombre de cylindres créés.
d. Sortie : cette liste affiche la distance déplacée pour chaque cylindre du réseau et est paramétriquement définie par les curseurs d’origine.
11. Cette étape est relativement simple : connectez la séquence définie à l’étape précédente à l’entrée x du nœud Point.ByCoordinates d’origine. Cette action permet de remplacer le curseur pointX que vous pouvez supprimer. Un réseau de cylindres apparaît maintenant dans la fenêtre (assurez-vous que la valeur du curseur d’entier est supérieure à 0).
12. La chaîne de cylindres est toujours liée dynamiquement à tous les curseurs. Ajustez chaque curseur et observez la définition se mettre à jour.
Si vous voulez construire des modèles plus complexes qui ne peuvent pas être créés à partir d’une seule surface ou si vous voulez définir un volume explicite, vous devez maintenant vous aventurer dans le domaine des solides (et des polysurfaces). Même un cube simple est assez complexe pour avoir besoin de six surfaces, une par face. Les solides donnent accès à deux concepts clés qui n'existent pas dans les surfaces : une description topologique plus affinée (faces, arêtes, sommets) et les opérations booléennes.
Vous pouvez utiliser des opérations booléennes pour modifier des solides. Utilisez quelques opérations booléennes pour créer une balle hérisson.
Sphere.ByCenterPointRadius : permet de créer le solide de base.
Topology.Faces, Face.SurfaceGeometry : permet d’envoyer des requêtes aux faces du solide et de les convertir en géométrie de surface. Dans ce cas, la sphère ne possède qu’une seule face.
Cone.ByPointsRadii : permet de créer des cônes en utilisant des points sur la surface.
Solid.UnionAll : permet d’unir les cônes et la sphère.
Topology.Edges : permet d’envoyer des requêtes aux arêtes du nouveau solide.
Solid.Fillet : permet de raccorder les arêtes de la balle hérisson.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Les opérations booléennes sont complexes et peuvent être lentes à calculer. Vous pouvez utiliser la fonctionnalité Geler pour suspendre l’exécution des nœuds sélectionnés et affectés aux nœuds en aval.
1. Utilisez le menu contextuel du bouton droit de la souris pour geler l’opération d’union de solide.
2. Le nœud sélectionné et tous les nœuds en aval s’affichent en mode fantôme gris clair et les fils affectés en tant que lignes en pointillés. Le mode fantôme sera également appliqué à l'aperçu de la géométrie concernée. Vous pouvez maintenant modifier les valeurs en amont sans calculer l’union booléenne.
3. Pour dégeler les nœuds, cliquez avec le bouton droit de la souris et désactivez l’option Geler.
4. Tous les nœuds concernés et les aperçus de géométrie associés sont mis à jour et reviendront en mode d’aperçu standard.
Pour en savoir plus sur le gel des nœuds, consultez la section Nœuds et fils.
Les solides sont constitués d'une ou de plusieurs surfaces contenant un volume au moyen d'une limite fermée qui définit l'"intérieur" ou l'"extérieur". Quel que soit le nombre de surfaces, elles doivent former un volume "étanche" pour être considérées comme un solide. Vous pouvez créer des solides en joignant des surfaces ou des polysurfaces ou en utilisant des opérations telles que le lissage, le balayage et la révolution. Les primitives sphère, cube, cône et cylindre sont également des solides. Un cube dont au moins une face a été supprimée est considéré comme une polysurface qui possède des propriétés similaires, mais ce n’est pas un solide.
Un plan est constitué d’une surface unique et n’est pas un solide.
Une sphère est constituée d’une surface, mais est un solide.
Un cône est constitué de deux surfaces jointes pour créer un solide.
Un cylindre est constitué de trois surfaces jointes pour créer un solide.
Un cube est constitué de six surfaces jointes pour créer un solide.
Les solides sont constitués de trois types d'éléments : sommets, arêtes et faces. Les faces sont les surfaces qui constituent le solide. Les arêtes sont des courbes qui définissent la connexion entre des faces adjacentes et les sommets sont les points de départ et d'arrivée de ces courbes. Les nœuds Topology peuvent être utilisés pour envoyer des requêtes à ces éléments.
Faces
Arêtes
Sommets
Les solides peuvent être modifiés en raccordant ou en chanfreinant leurs arêtes pour éliminer les angles et les angles aigus. L’opération de chanfrein crée une surface réglée entre deux faces, tandis qu’un congé se mélange entre les faces pour maintenir la tangence.
Cube solide
Cube chanfreiné
Cube raccordé
Les opérations booléennes de solide sont des méthodes pour combiner deux solides ou plus. Une opération booléenne unique implique d’effectuer quatre opérations :
Entrecouper au moins deux objets.
Les scinder aux intersections.
Supprimer les portions indésirables de la géométrie.
Rassembler le tout.
Union : supprimez les parties des solides qui se chevauchent et joignez-les en un seul solide.
Différence : soustrayez un solide à un autre. Le solide à soustraire est appelé outil. Notez que vous pouvez redéfinir quel solide est l’outil pour conserver le volume inverse.
Intersection : conservez uniquement le volume d’intersection des deux solides.
UnionAll : opération d’union avec une sphère et des cônes orientés vers l’extérieur
DifferenceAll : opération de différence avec une sphère et des cônes orientés vers l’intérieur
Grâce à l’utilisation de la surface dans le modèle, vous pouvez représenter des objets dans un univers en trois dimensions. Bien que les courbes ne soient pas toujours planes, c’est-à-dire tridimensionnelles, l’espace qu’elles définissent est toujours lié à une cote. Les surfaces nous donnent une autre dimension et un ensemble de propriétés supplémentaires que vous pouvez utiliser dans d’autres opérations de modélisation.
Importez et évaluez une surface au niveau d’un paramètre dans Dynamo pour voir quel type d’informations vous pouvez extraire.
Surface.PointAtParameter renvoie le point à une coordonnée UV donnée.
Surface.NormalAtParameter renvoie le vecteur normal à une coordonnée UV donnée.
Surface.GetIsoline renvoie la courbe isoparamétrique à une coordonnée U ou V. Notez l’entrée isoDirection.
Téléchargez les fichiers d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Une surface est une forme mathématique définie par une fonction et deux paramètres. Au lieu de t
pour les courbes, vous utilisez U
et V
pour décrire l’espace de paramètre correspondant. Cela signifie que vous disposez de plus de données géométriques à partir desquelles dessiner lorsque vous utilisez ce type de géométrie. Par exemple, les courbes ont des vecteurs tangents et des plans normaux (qui peuvent pivoter ou se tordre le long de la courbe), alors que les surfaces ont des vecteurs normaux et des plans tangents qui seront cohérents dans leur orientation.
Surface
Isocourbe U
Isocourbe V
Coordonnées UV
Plan perpendiculaire
Vecteur normal
Domaine de surface : un domaine de surface est défini comme l’intervalle de paramètres (U,V) qui s’évaluent en un point tridimensionnel sur cette surface. Le domaine dans chaque dimension (U ou V) est généralement décrit par deux nombres (U Min à U Max) et (V Min à V Max).
Bien que la forme de la surface ne paraisse pas rectangulaire et qu’elle puisse avoir localement un ensemble d’isocourbes plus ou moins étroit, l’« espace » défini par son domaine est toujours en deux dimensions. Dans Dynamo, les surfaces sont toujours considérées comme ayant un domaine défini par un minimum de 0.0 et un maximum de 1.0 dans les directions U et V. Les surfaces planes ou ajustées peuvent avoir des domaines différents.
Isocourbe (ou courbe isométrique) : courbe définie par une valeur U ou V constante sur la surface et par un domaine de valeurs pour l’autre direction U ou V correspondante.
Coordonnée UV : point dans l’espace de paramètre UV défini par U, V et parfois W.
Plan perpendiculaire : plan perpendiculaire aux isocourbes U et V au niveau d’une coordonnée UV donnée.
Vecteur normal : vecteur définissant la direction vers le haut par rapport au plan perpendiculaire.
Les surfaces NURBS sont assez comparables aux courbes NURBS. Les surfaces NURBS peuvent être considérées comme une grille de courbes NURBS qui vont dans deux directions. La forme d'une surface NURBS est définie par un certain nombre de points de contrôle et le degré de cette surface dans les directions U et V. Les mêmes algorithmes sont utilisés pour calculer la forme, les normales, les tangentes, les courbures et d’autres propriétés par le biais de points de contrôle, de poids et de degrés.
Dans le cas des surfaces NURBS, il existe deux directions impliquées par la géométrie, car les surfaces NURBS sont, quelle que soit la forme que vous voyez, des grilles rectangulaires de points de contrôle. Et même si ces directions sont souvent arbitraires par rapport au système de coordonnées général, vous les utiliserez fréquemment pour analyser vos modèles ou générer d’autres géométries basées sur la surface.
Degré (U,V) = (3,3)
Degré (U,V) = (3,1)
Degré (U,V) = (1,2)
Degré (U,V) = (1,1)
Les polysurfaces sont composées de surfaces qui sont jointes sur une arête. Les polysurfaces offrent plus de deux définitions UV dimensionnelles, car vous pouvez maintenant parcourir les formes connectées au moyen de leur topologie.
Bien que le terme "topologie" décrive généralement un concept relatif à la façon dont les composants sont connectés et/ou la topologie associée, dans Dynamo, il s'agit également d'un type de géométrie. Il s’agit en particulier d’une catégorie parent pour les surfaces, les polysurfaces et les solides.
La jonction de surfaces, parfois appelée face de fermeture, de cette manière vous permet de créer des formes plus complexes et de définir des détails sur la jointure. Vous pouvez appliquer facilement une opération de congé ou de chanfrein aux arêtes d'une polysurface.
La logique, ou plus spécifiquement, la logique conditionnelle, vous permet de spécifier une action ou un jeu d’actions en fonction d’un test. Après avoir évalué le test, vous obtenez une valeur booléenne représentant True
ou False
que vous pouvez utiliser pour contrôler le flux du programme.
Les variables numériques peuvent stocker un intervalle entier de nombres différents. Les variables booléennes ne peuvent stocker que deux valeurs appelées True ou False, Yes ou No, 1 ou 0. Les valeurs booléennes sont rarement utilisées pour effectuer des calculs en raison de leur intervalle limité.
L’instruction « If » est un concept clé de la programmation : « If » cet élément a la valeur True, voici le résultat, sinon autre chose se produit. L’action résultant de l’instruction est déterminée par une valeur booléenne. Il existe plusieurs méthodes pour définir une instruction "If" dans Dynamo :
Icône | Nom (Syntaxe) | Entrées | Sorties |
---|---|---|---|
Voici un bref exemple de chacun de ces trois nœuds en action à l’aide de l’instruction conditionnelle « If ».
Dans cette image, la valeur booléenne est définie sur True, ce qui signifie que le résultat est une chaîne indiquant : « voici le résultat si True ». Les trois nœuds qui créent l’instruction If fonctionnent de la même manière ici.
Là encore, les nœuds fonctionnent de la même façon. Si la valeur booléenne est définie sur False, le résultat est le nombre Pi, tel que défini dans l’instruction If d’origine.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Utilisez la logique pour séparer une liste de nombres en une liste de nombres pairs et une liste de nombres impairs.
a. Number Range : ajoutez un intervalle de nombres dans la zone de dessin.
b. Number : ajoutez trois nœuds numériques dans la zone de dessin. La valeur de chaque nœud numérique doit être : 0.0 pour start, 10.0 pour end et 1.0 pour step.
c. Sortie : le résultat est une liste de 11 chiffres compris entre 0 et 10.
d. Module (%) : Number Range en x et 2.0 en y. Cela permet de calculer le reste pour chaque nombre de la liste divisé par 2. La sortie de cette liste vous donne une liste de valeurs alternant entre 0 et 1.
. Test d’égalité (==) : permet d’ajouter un test d’égalité à la zone de dessin. Connectez la sortie du module à l’entrée x et 0.0 à l’entrée y.
f. Watch : la sortie du test d’égalité est une liste de valeurs alternant entre true et false. Il s’agit des valeurs utilisées pour séparer les éléments de la liste. 0 (ou true) représente des nombres pairs et 1 (ou false) des nombres impairs.
g. List.FilterByBoolMask : ce nœud filtre les valeurs dans deux listes différentes en fonction de la valeur booléenne d’entrée. Connectez le nœud Number Range d’origine à l’entrée list et la sortie du test d’égalité à l’entrée mask. La sortie in représente des valeurs True, tandis que la sortie out représente des valeurs False.
h. Watch : le résultat est une liste de nombres pairs et une liste de nombres impairs. Vous avez utilisé des opérateurs logiques pour séparer des listes en modèles.
En partant de la logique établie dans le premier exercice, appliquez cette configuration dans une opération de modélisation.
2. Partez de l’exercice précédent avec les mêmes nœuds. Les seules exceptions (outre la modification du format) sont les suivantes :
a. Utilisez un nœud Sequence avec ces valeurs d’entrée.
b. L’entrée list de List.FilterByBoolMask est déconnectée. Pour l’instant, mettez ces nœuds de côté. Vous les utiliserez plus tard dans l’exercice.
3. Commencez par créer un groupe distinct de graphiques, comme illustré dans l’image ci-dessus. Ce groupe de nœuds représente une équation paramétrique permettant de définir une courbe de ligne. Remarques :
a. Le premier nœud Number Slider représente la fréquence de l’onde. Il doit avoir une valeur minimale de 1, une valeur maximale de 4 et un pas de 0,01.
b. Le second nœud Number Slider représente l’amplitude de l’onde. Il doit avoir une valeur minimale de 0, une valeur maximale de 1 et un pas de 0,01.
c. PolyCurve.ByPoints : si vous copiez le diagramme de nœud ci-dessus, vous obtenez une courbe sinusoïdale dans la fenêtre d’aperçu Dynamo.
Méthode utilisée ici pour les entrées : utilisez des nœuds Number pour obtenir davantage de propriétés statiques et des curseurs de numérotation sur les valeurs plus flexibles. Conservez l'intervalle de nombres d'origine défini au début de cette étape. Toutefois, la courbe sinusoïdale créée ici doit garder une certaine flexibilité. Vous pouvez déplacer ces curseurs pour observer la fréquence et l’amplitude de la courbe se mettre à jour.
4. Vous allez désormais passer à la définition. Examinez le résultat final pour pouvoir référencer ce que vous obtenez. Les deux premières étapes sont effectuées séparément, mais vous devez maintenant les connecter. Utilisez la courbe sinusoïdale de base pour déterminer l’emplacement des composants de zipper, et utilisez la logique True/False pour alterner entre les petites boîtes et les grandes boîtes.
a. Math.RemapRange : à l’aide de la séquence de nombres créée à l’étape 02, créez une nouvelle série de nombres en remappant l’intervalle. Les nombres d’origine de l’étape 1 sont compris entre 0 et 100. Ces nombres sont compris entre 0 et 1, respectivement par les entrées newMin et newMax.
5. Créez un nœud Curve.PointAtParameter, puis connectez la sortie Math.RemapRange de l’étape 4 en tant qu’entrée param.
Cette étape permet de créer des points le long de la courbe. Remappez les nombres entre 0 et 1, car l’entrée param recherche les valeurs dans cet intervalle. Une valeur de 0 représente le point de départ, une valeur de 1 représente les points de fin. Tous les nombres compris entre ces valeurs sont évalués dans l’intervalle [0,1].
6. Connectez la sortie de Curve.PointAtParameter à List.FilterByBoolMask pour séparer la liste des index impairs et pairs.
a. List.FilterByBoolMask : connectez Curve.PointAtParameter de l’étape précédente à l’entrée list.
b. Watch : un nœud Watch pour in et un nœud Watch pour out indique que deux listes représentent des index pairs et des index impairs. Ces points sont ordonnés de la même façon sur la courbe, illustrée à l’étape suivante.
7. Vous allez maintenant utiliser le résultat de la sortie de List.FilterByBoolMask à l’étape 5 pour générer des géométries avec des tailles en fonction de leurs index.
Cuboid.ByLengths : recréez les connexions illustrées à l’image ci-dessus pour obtenir un zipper le long de la courbe sinusoïdale. Ici, un cuboïde ne représente qu’une boîte, et vous définissez sa taille en fonction du point de courbe au centre de la boîte. La logique de la division paire/impaire doit maintenant être claire dans le modèle.
a. Liste de cuboïdes à des index pairs.
b. Liste de cuboïdes à des index impairs.
Voilà ! Vous venez de programmer un processus de définition de cotes de géométrie en fonction de l’opération logique présentée dans cet exercice.
Dans le domaine de la modélisation informatique, les maillages sont l’une des formes de représentation les plus répandues de la géométrie 3D. La géométrie de maillage est généralement un ensemble de quadrilatères ou de triangles. Elle représente une alternative simple et flexible à l’utilisation des NURBS. Les maillages sont utilisés dans tous les domaines : du rendu aux visualisations, jusqu’à la fabrication numérique et à l’impression 3D.
Dynamo définit les maillages à l'aide d'une structure de données Face-Sommet. À la base, cette structure est simplement un ensemble de points regroupés en polygones. Les points d'un maillage sont appelés sommets, tandis que les polygones de surface sont appelés faces.
Pour créer un maillage, vous avez besoin d’une liste de sommets et d’un système de regroupement de ces sommets en faces appelé groupe d’index.
Liste de sommets
Liste des groupes d'index permettant de définir les faces.
L’installation du package Mesh Toolkit permet d’étendre les fonctionnalités de maillage de Dynamo. Le package Mesh Toolkit de Dynamo fournit des outils permettant d’importer des maillages à partir de formats de fichiers externes, de créer un maillage à partir d’objets de géométrie Dynamo et de créer manuellement des maillages selon leurs sommets et leurs index.
La bibliothèque fournit également des outils permettant de modifier les maillages, de réparer les maillages ou d’extraire des sections horizontales à utiliser lors de la fabrication.
Consultez les études de cas Mesh Toolkit pour découvrir des exemples d’utilisation de ce package.
Un maillage est un ensemble de quadrilatères et de triangles représentant une géométrie de surface ou de solide. Comme pour les solides, la structure d'un objet maillé comprend des sommets, des arêtes et des faces. Il existe d’autres propriétés qui rendent les maillages uniques, telles que les normales.
Sommets de maillage.
Arêtes de maillage. *Les arêtes avec une seule face adjacente sont appelées "nues". Toutes les autres arêtes sont "habillées".
Faces de maillage.
Les sommets d'un maillage sont simplement une liste de points. L'index des sommets est très important lors de la construction d'un maillage ou de l'obtention d'informations sur la structure d'un maillage. Pour chaque sommet, il existe également une normale de sommet (vecteur) correspondante qui décrit la direction moyenne des faces attachées et vous aide à comprendre l’orientation « intérieure » et « extérieure » du maillage.
Sommets
Normales de sommet
Une face est une liste ordonnée de trois ou quatre sommets. La représentation de la "surface" d'une face maillée est donc implicite en fonction de la position des sommets indexés. Étant donné que vous avez déjà la liste des sommets qui constituent le maillage, au lieu de fournir des points individuels pour définir une face, utilisez simplement l'index des sommets. Cela vous permet également d’utiliser le même sommet dans plusieurs faces.
Une face quadrilatérale composée des index 0, 1, 2 et 3.
Une face triangulaire composée des index 1, 4 et 2. Les groupes d'index peuvent être modifiés dans leur ordre : tant que la séquence est ordonnée dans le sens trigonométrique, la face est correctement définie.
Quelles sont les différences entre la géométrie de maillage et la géométrie NURBS ? Quand utiliseriez-vous l'une ou l'autre ?
Dans le chapitre précédent, vous avez découvert que les surfaces NURBS sont définies par une série de courbes NURBS allant dans deux directions. Ces directions sont libellées U
et V
, et permettent de paramétrer une surface NURBS en fonction d’un domaine de surface 2D. Les courbes elles-mêmes sont stockées en tant qu'équations dans l'ordinateur, ce qui permet de calculer les surfaces qui en résultent dans un degré de précision arbitrairement petit. Il peut cependant être difficile de combiner plusieurs surfaces NURBS. La jonction de deux surfaces NURBS génère une polysurface, où différentes sections de la géométrie auront des définitions de courbe et des paramètres UV différents.
Surface
Courbe isoparamétrique (isoparm)
Point de contrôle de surface
Polygone de contrôle de surface
Point isoparamétrique
Cadre de surface
Maillage
Arête nue
Réseau de maillage
Arêtes de maillage
Normale de sommet
Face de maillage/Normale de face de maillage
Les maillages, en revanche, sont constitués d'un nombre distinct de sommets et de faces exactement définis. Le réseau de sommets ne peut généralement pas être défini par de simples coordonnéesUV
. En effet, étant donné que les faces sont distinctes, la précision est créée dans le maillage et ne peut être modifiée qu’en affinant le maillage et en ajoutant des faces supplémentaires. L'absence de descriptions mathématiques permet aux maillages de gérer plus facilement une géométrie complexe au sein d'un maillage unique.
Une autre différence importante est la mesure dans laquelle une modification locale de la géométrie de maillage ou NURBS affecte l'ensemble de la forme. Le déplacement d'un sommet d'un maillage affecte uniquement les faces adjacentes à ce sommet. Dans les surfaces NURBS, l'étendue de l'influence est plus complexe et dépend du degré de la surface ainsi que des poids et des noeuds des points de contrôle. En général, cependant, le déplacement d’un seul point de contrôle dans une surface NURBS crée un changement plus lisse et plus important de la géométrie.
Surface NURBS : le déplacement d’un point de contrôle a une influence qui s’étend sur toute la forme.
Géométrie de maillage : le déplacement d'un sommet a une influence uniquement sur les éléments adjacents.
Une analogie qui peut être utile consiste à comparer une image vectorielle (composée de lignes et de courbes) à une image raster (composée de pixels individuels). Si vous effectuez un zoom avant sur une image vectorielle, les courbes restent nettes et claires, tandis que si vous effectuez un zoom sur une image raster, les pixels individuels deviennent plus grands. Dans cette analogie, vous pouvez comparer les surfaces NURBS à une image vectorielle, car il existe une relation mathématique lisse, tandis qu'un maillage se comporte de la même façon qu'une image raster avec une résolution définie.
Une fois que vous serez prêt à aller plus loin dans le développement de programmes visuels, vous aurez besoin d'une meilleure compréhension des blocs de construction que vous utiliserez. Ce chapitre présente les concepts fondamentaux relatifs aux données, à savoir les éléments qui passent par les fils de votre programme Dynamo.
Cet index fournit des informations supplémentaires sur tous les nœuds utilisés dans ce guide, ainsi que sur les autres composants que vous trouverez utiles. Il s'agit juste d'une introduction de quelques-uns des 500 nœuds disponibles dans Dynamo.
*En d’autres termes, si vous créez un nœud Cuboid avec la largeur de l’axe X et la longueur 10, puis le transformez en CoordinateSystem avec une échelle de 2 dans X, la largeur sera toujours 10. ASM ne vous permet pas d’extraire les sommets d’un corps dans un ordre prévisible. Il est donc impossible de déterminer les cotes après une transformation.
Maintenant que vous avez établi une liste, il est temps de découvrir les opérations que vous pouvez effectuer sur celle-ci. Imaginez que la liste est un paquet de cartes de jeu. Un paquet est la liste et chaque carte de jeu représente un élément.
Quelles requêtes pouvez-vous faire à partir de la liste ? Elles permettent d’accéder aux propriétés existantes.
Nombre de cartes dans le paquet ? 52.
Nombre de couleurs ? 4.
Matériau ? Papier.
Longueur ? 3,5 pouces ou 89 mm.
Largeur ? 2,5 pouces ou 64 mm.
Quelles actions pouvez-vous effectuer dans la liste ? Elles permettent de modifier la liste en fonction d’une opération donnée.
Vous pouvez mélanger le paquet.
Vous pouvez trier le paquet par valeur.
Vous pouvez trier le paquet par couleur.
Vous pouvez diviser le paquet.
Vous pouvez diviser le paquet en distribuant les mains individuelles.
Vous pouvez sélectionner une carte spécifique dans le paquet.
Toutes les opérations répertoriées ci-dessus possèdent des nœuds Dynamo similaires qui permettent de travailler avec des listes de données génériques. Les leçons ci-dessous présentent certaines des opérations fondamentales que vous pouvez effectuer sur des listes.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
L’image ci-dessous est le graphique de base sur lequel vous dessinez des lignes entre deux cercles pour représenter les opérations de liste de base. Vous allez découvrir comment gérer les données dans une liste et afficher les résultats visuels à travers les actions de liste ci-dessous.
Commencez par un nœud Code Block avec une valeur de
500;
.Connectez-le à l’entrée x d’un nœud Point.ByCoordinates.
Connectez le nœud de l’étape précédente à l’entrée d’origine d’un nœud Plane.ByOriginNormal.
À l’aide d’un nœud Cercle.ByPlaneRadius, connectez le nœud de l’étape précédente à l’entrée plane.
À l’aide d’un nœud Code Block, désignez une valeur de
50;
pour le rayon. Il s’agit du premier cercle créé.À l’aide d’un nœud Geometry.Translate, déplacez le cercle de 100 unités vers le haut dans la direction Z.
À l’aide d’un nœud Code Block, définissez un intervalle de dix nombres entre 0 et 1 avec la ligne de code suivante :
0..1..#10;
Connectez le bloc de code de l’étape précédente à l’entrée param de deux nœuds Curve.PointAtParameter. Connectez Circle.ByPlaneRadius à l’entrée curve du nœud supérieur, puis Geometry.Translate à l’entrée curve du nœud situé en dessous.
À l’aide d’un nœud Line.ByStartPointEndPoint, connectez les deux nœuds Curve.PointAtParameter.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Le nœud List.Count est simple : il compte le nombre de valeurs dans une liste et renvoie ce nombre. Ce nœud devient plus subtil lorsque vous travaillez avec des listes de listes, mais vous le découvrirez dans les sections suivantes.
Le nœud **List.Count ****** renvoie le nombre de lignes dans le nœud Line.ByStartPointEndPoint. Dans ce cas, la valeur est de 10, ce qui correspond au nombre de points créés à partir du nœud Code Block d’origine.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
List.GetItemAtIndex est une méthode fondamentale pour interroger un élément de la liste.
Tout d’abord, cliquez avec le bouton droit sur le nœud Line.ByStartPointEndPoint pour désactiver son aperçu.
À l’aide du nœud List.GetItemAtIndex, sélectionnez l’index « 0 » ou le premier élément de la liste de lignes.
Modifiez la valeur du curseur entre 0 et 9 pour sélectionner un autre élément à l’aide de List.GetItemAtIndex.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
List.Reverse inverse l’ordre de tous les éléments d’une liste.
Pour visualiser correctement la liste inversée des lignes, créez plus de lignes en remplaçant le nœud Code Block par
0..1..#50;
.Dupliquez le nœud Line.ByStartPointEndPoint, insérez un nœud List.Reverse entre Curve.PointAtParameter et le deuxième nœud Line.ByStartPointEndPoint.
Utilisez les nœuds Watch3D pour afficher un aperçu de deux résultats différents. Le premier affiche le résultat sans liste inversée. Les lignes se connectent verticalement aux points voisins. Toutefois, la liste inversée connecte tous les points à l’ordre opposé dans l’autre liste.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
List.ShiftIndices est un bon outil pour créer des torsions ou des motifs hélicoïdaux, ou toute autre manipulation de données similaire. Ce nœud déplace les éléments d’une liste d’un certain nombre d’index.
Dans le même processus que la liste inversée, insérez un nœud List.ShiftIndices dans les nœuds Curve.PointAtParameter et Line.ByStartPointEndPoint.
À l’aide d’un nœud Code Block, définissez une valeur de « 1 » pour déplacer la liste d’un index.
Le changement est subtil, mais toutes les lignes du nœud Watch3D inférieur se sont déplacées d’un index lors de la connexion à l’autre jeu de points.
En remplaçant la valeur du nœud Code Block par une valeur plus élevée, « 30 » par exemple, vous pouvez observer une différence significative dans les lignes diagonales. Le décalage fonctionne comme l’objectif d’une caméra dans ce cas, créant une torsion dans la forme cylindrique d’origine.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
List.FilterByBooleanMask supprime certains éléments en fonction d’une liste de valeurs booléennes ou les valeurs « true » ou « false ».
Pour créer une liste de valeurs « true » ou « false », vous devez travailler un peu plus…
À l’aide d’un nœud Code Block, définissez une expression avec la syntaxe :
0..List.Count(list);
. Connectez le nœud Curve.PointAtParameter à l’entrée list. Vous allez découvrir davantage cette configuration dans le chapitre relatif aux blocs de code, mais la ligne de code dans ce cas présente une liste représentant chaque index du nœud Curve.PointAtParameter.À l’aide d’un nœud %** (module)**, connectez la sortie du nœud Code Block à l’entrée x, et une valeur de 4 à l’entrée y. Vous obtiendrez ainsi le reste lors de la division de la liste d’index par 4. Le module est un nœud très utile pour la création de réseaux. Toutes les valeurs sont lues comme étant les restes possibles de 4 : 0, 1, 2, 3.
Grâce au nœud %** (module)**, vous savez qu’une valeur de 0 signifie que l’index est divisible par 4 (0, 4, 8, etc.). À l’aide d’un nœud ==, vous pouvez tester la visibilité en effectuant un test sur une valeur de « 0 ».
Le nœud Watch montre que vous avez un motif true/false qui indique : true,false,false,false….
À l’aide de ce motif true/false, connectez-vous à l’entrée mask de deux nœuds List.FilterByBooleanMask.
Connectez le nœud Curve.PointAtParameter à chaque entrée list de List.FilterByBooleanMask.
La sortie de Filter.ByBooleanMask indique « in » et « out ». L’expression « in » représente les valeurs qui avaient une valeur de masque « true » et l’expression « out » représente les valeurs qui avaient la valeur « false ». En connectant les sorties « in » aux entrées startPoint et endPoint d’un nœud Line.ByStartPointEndPoint, vous avez créé une liste filtrée de lignes.
Le nœud Watch3D indique que vous avez moins de lignes que de points. Vous n’avez sélectionné que 25 % des nœuds en filtrant uniquement les valeurs réelles.
Une liste est un ensemble d'éléments. Par exemple, prenez une grappe de bananes. Chaque banane est un élément de la liste (ou grappe). Il est plus facile de ramasser une grappe de bananes plutôt que chaque banane individuellement. Il en est de même pour le regroupement d’éléments par relations paramétriques dans une structure de données.
Quand vous faites les courses, vous déposez tous vos achats dans un sac. Ce sac est aussi une liste. Si vous préparez un cake aux bananes, il vous faut 3 grappes de bananes (vous préparez plusieurs cakes aux bananes). Le sac représente une liste de grappes de bananes et chaque grappe représente une liste de bananes. Le sac est une liste de listes (bidimensionnelle) et la grappe de bananes est une liste (unidimensionnelle).
Dans Dynamo, les données de liste sont triées et le premier élément de chaque liste possède un index "0". Vous trouverez ci-dessous la définition des listes dans Dynamo et de leur rapport.
Aussi étrange que cela puisse paraître à première vue, le premier index d'une liste est toujours 0, et non 1. Lorsqu'il est question du premier élément d'une liste, il s'agit en fait de l'élément qui correspond à l'index 0.
Par exemple, si vous comptez le nombre de doigts de votre main droite, il y a de fortes chances que vous comptiez de 1 à 5. Cependant, si vous deviez placer vos doigts dans une liste, Dynamo leur aurait donné des index de 0 à 4. Bien que cela puisse paraître un peu étrange aux débutants en programmation, l'index de base 0 est une pratique courante dans la plupart des systèmes de calcul.
La liste contient toujours 5 éléments : elle utilise un système de comptage de base 0. Les éléments stockés dans la liste ne sont pas nécessairement des nombres. Il peut s’agir de tout type de données pris en charge par Dynamo, tel que des points, des courbes, des surfaces, des familles, etc.
a. Index
b. Point
c. Elément
Souvent, la méthode la plus simple pour examiner le type de données stockées dans une liste consiste à connecter un nœud Watch à la sortie d’un autre nœud. Par défaut, le nœud Watch affiche automatiquement tous les index sur le côté gauche de la liste et affiche les éléments de données sur la droite.
Ces index sont un élément crucial lorsque vous travaillez avec des listes.
En ce qui concerne les listes, les entrées et sorties varient en fonction du nœud Dynamo utilisé. Par exemple, utilisez une liste de 5 points et connectez cette sortie à deux nœuds Dynamo différents, PolyCurve.ByPoints et Circle.ByCenterPointRadius :
L’entrée points de PolyCurve.ByPoints recherche « Point[] ». Cela représente une liste de points.
La sortie de PolyCurve.ByPoints est une simple polycourbe créée à partir d’une liste de cinq points.
L’entrée centerPoint de Circle.ByCenterPointRadius demande « Point ».
La sortie de Circle.ByCenterPointRadius est une liste de cinq cercles, dont les centres correspondent à la liste de points d’origine.
Les données d’entrée de PolyCurve.ByPoints et de Circle.ByCenterPointRadius sont identiques. Cependant, le nœud Polycurve.ByPoints vous donne une polycourbe, tandis que le nœud Circle.ByCenterPointRadius vous donne 5 cercles dont les centres correspondent aux points. À première vue, ce résultat est logique : la polycourbe est dessinée en tant que courbe reliant les 5 points, tandis que les cercles créent un cercle différent à chaque point. Qu’est-ce qui se passe avec les données ?
Lorsque vous placez le curseur sur l’entrée points de Polycurve.ByPoints, vous pouvez constater que l’entrée recherche « Point[] ». Observez les crochets à la fin. Ils représentent une liste de points. Pour créer une polycourbe, l'entrée doit être une liste pour chaque polycourbe. Ce nœud va ainsi condenser chaque liste en une seule polycourbe.
En revanche, l’entrée centerPoint de Circle.ByCenterPointRadius demande « Point ». Ce nœud recherche un point, en tant qu’élément, pour définir le point central du cercle. C'est la raison pour laquelle vous obtenez cinq cercles à partir des données d'entrée. Reconnaître cette différence avec les entrées de Dynamo permet de mieux comprendre le fonctionnement des nœuds lors de la gestion des données.
Sans solution de nettoyage, la correspondance des données est un problème. C'est le cas lorsqu'un nœud a accès à des entrées de taille différente. La modification de l’algorithme de correspondance des données peut entraîner des résultats très différents.
Imaginez un nœud qui crée des segments de ligne entre les points (Line.ByStartPointEndPoint). Il comporte deux paramètres d’entrée qui définissent tous deux des coordonnées de point :
La méthode la plus simple consiste à connecter les entrées une par une jusqu'à ce que l'un des flux soit épuisé. Cette méthode s'appelle l'algorithme "Liste la plus courte". Il s’agit du comportement par défaut des nœuds Dynamo :
L’algorithme « Liste la plus longue » continue à connecter les entrées, réutilisant les éléments, jusqu’à ce que tous les flux soient épuisés :
Enfin, la méthode « Produit cartésien » permet d’établir toutes les connexions possibles :
Comme vous pouvez le voir, il existe différentes manières de dessiner des lignes entre ces jeux de points. Pour accéder aux options de combinaison, cliquez avec le bouton droit de la souris sur le centre d’un nœud et sélectionnez le menu « Combinaison ».
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Pour découvrir les opérations de liaison ci-dessous, vous allez utiliser ce fichier de base afin de définir la liste la plus courte, la liste la plus longue et le produit cartésien.
Vous allez modifier la combinaison sur Point.ByCoordinates, mais sans modifier d’autres paramètres du graphique ci-dessus.
Si vous choisissez l’option de liaison Liste la plus courte (également l’option par défaut), vous obtenez une ligne diagonale de base composée de cinq points. Étant donné que la liste la plus courte contient cinq points, la combinaison de la liste la plus courte s’arrête après avoir atteint la fin d’une liste.
En définissant la combinaison sur Le plus long, vous obtenez une ligne diagonale qui s’étend verticalement. De la même façon que pour le diagramme de concept, le dernier élément de la liste des 5 éléments sera répété pour atteindre la longueur de la liste la plus longue.
En définissant la liaison sur Produit cartésien, vous obtenez toutes les combinaisons entre chaque liste, ce qui vous donne une grille de points de 5 x 10. Il s’agit d’une structure de données équivalente au produit cartésien, comme illustré dans le schéma de concept ci-dessus, sauf que vos données sont désormais une liste de listes. Lorsque vous connectez une polycourbe, vous pouvez voir que chaque liste est définie par sa valeur X, ce qui vous donne une rangée de lignes verticales.
Ajoutons un autre niveau à la hiérarchie. Si vous prenez le paquet de cartes de l'exemple d'origine et si vous créez une boîte contenant plusieurs paquets, la case représente désormais une liste de paquets et chaque paquet représente une liste de cartes. Voici une liste de listes. Pour l’analogie de cette section, l’image ci-dessous contient une liste de rouleaux de pièces de monnaie, et chaque rouleau contient une liste de centimes.
Quelles requêtes pouvez-vous effectuer à partir de la liste de listes ? Elles permettent d’accéder aux propriétés existantes.
Nombre de pièces de monnaie ? 2.
Valeurs des type de pièce de monnaie ? 0,01 $ et 0,25 $.
Matériau des pièces de 0,25 $ ? 75 % de cuivre et 25 % de nickel.
Matériau des centimes ? 97,5 % de zinc et 2,5 % de cuivre.
Quelles actions pouvez-vous effectuer dans la liste de listes ? Cette action permet de modifier la liste de listes en fonction d’une opération donnée.
Sélectionnez une pile spécifique de pièces de 0,25 $ ou de centimes.
Sélectionnez une pièce de 0,25 $ ou un centime spécifique.
Réorganisez les piles de pièces de 0,25 $ et de centimes.
Mélangez les piles ensemble.
Pour rappel, Dynamo possède un nœud analogue pour chacune des opérations ci-dessus. Puisque vous travaillez avec des données abstraites et non des objets physiques, vous avez besoin d’un ensemble de règles pour gérer la façon dont vous vous déplacez vers le haut et vers le bas de la hiérarchie de données.
Lorsque vous travaillez sur des listes de listes, les données sont superposées et complexes, mais cela permet de réaliser des opérations paramétriques extraordinaires. Déterminons les fondamentaux et discutons de certaines autres opérations dans les leçons ci-dessous.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Voici le concept fondamental à retenir de cette section : Dynamo traite les listes comme des objets. Cette hiérarchie verticale est développée en tenant compte de la programmation orientée objet. Au lieu de sélectionner des sous-éléments à l’aide d’une commande telle que List.GetItemAtIndex, Dynamo sélectionne cet index de la liste principale dans la structure de données. Cet élément peut être une autre liste. Nous allons le décomposer avec une image d’exemple :
Grâce au nœud Code Block, vous avez défini deux intervalles :
0..2; 0..3;
Ces intervalles sont connectés à un nœud Point.ByCoordinates avec la combinaison définie sur « Produit vectoriel ». Cela crée une grille de points et renvoie également une liste de listes sous forme de sortie.
Le nœud Watch donne 3 listes contenant chacune 4 éléments.
Lorsque vous utilisez List.GetItemAtIndex avec un index de 0, Dynamo sélectionne la première liste et tout son contenu. D’autres programmes peuvent sélectionner le premier élément de chaque liste dans la structure de données, mais Dynamo utilise une hiérarchie verticale lorsque vous travaillez avec des données.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Le noeud Flatten permet de supprimer tous les niveaux de données d'une structure de données. Il est utile lorsque les hiérarchies de données ne sont pas nécessaires à votre opération, mais il comporte un risque car il supprime des informations. L’exemple ci-dessous montre le résultat de l’aplanissement d’une liste de données.
Insérez une ligne de code pour définir un intervalle dans le nœud Code Block :
-250..-150..#4;
En connectant le bloc de code aux entrées x et y d’un nœud Point.ByCoordinates, vous définissez la combinaison sur « Produit vectoriel » pour obtenir une grille de points.
Le nœud Watch indique que vous avez une liste de listes.
Un nœud PolyCurve.ByPoints référence chaque liste et crée une polycourbe respective. Dans l’aperçu Dynamo, notez que quatre polycourbes représentent chaque ligne de la grille.
En insérant un nœud Flatten avant le nœud de la polycourbe, vous créez une liste unique pour tous les points. Le nœud PolyCurve.ByPoints fait référence à une liste permettant de créer une courbe. Comme tous les points figurent sur une liste, une polycourbe en zigzag est générée pour l’ensemble de la liste de points.
Il existe également des options permettant d’aplanir les niveaux de données isolés. Le nœud List.Flatten permet de définir un nombre défini de niveaux de données à aplanir à partir du haut de la hiérarchie. Cet outil est très utile si vous avez des difficultés à gérer des structures de données complexes qui ne sont pas nécessairement pertinentes pour votre workflow. Une autre option consiste à utiliser le nœud Flatten comme fonction dans List.Map. Vous en découvrirez plus sur List.Map ci-dessous.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Lors de la modélisation paramétrique, vous pouvez ajouter la structure de données à une liste existante. Il existe également de nombreux nœuds disponibles pour cette opération. La commande Chop est la version la plus élémentaire. Celle-ci vous permet de partitionner une liste en sous-listes contenant un nombre défini d'éléments.
La commande Chop divise les listes en fonction d'une longueur de liste donnée. D'une certaine manière, la commande de découpage est l'opposé de l'aplanissement : au lieu de supprimer la structure de données, elle y ajoute de nouveaux niveaux. Cet outil est utile pour les opérations géométriques comme dans l’exemple ci-dessous.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
La commande List.Map/Combine applique une fonction définie à une liste d’entrées, mais à un niveau plus bas dans la hiérarchie. Les combinaisons correspondent aux mappages, à l’exception près que les combinaisons peuvent avoir plusieurs entrées correspondant à l’entrée d’une fonction donnée.
En guise d’introduction, examinons le nœud List.Count d’une section précédente.
Le nœud List.Count compte tous les éléments d’une liste. Vous allez l’utiliser pour montrer comment fonctionne List.Map.
Insérez deux lignes de code dans le nœud Code Block :
-50..50..#Nx; -50..50..#Ny;
Une fois le code saisi, le bloc de code créera deux entrées pour Nx et Ny.
Avec deux nœuds Integer Slider, définissez les valeurs Nx et Ny en les connectant au nœud Code Block.
Connectez chaque ligne du bloc de code aux entrées X et Y respectives d’un nœud Point.ByCoordinates. Cliquez avec le bouton droit de la souris sur le nœud, sélectionnez « Combinaison », puis « Produit vectoriel ». Cela crée une grille de points. Étant donné que vous avez défini l’intervalle de -50 à 50, élargissez la grille Dynamo par défaut.
Un nœud Watch révèle les points créés. Observez la structure des données. Vous avez créé une liste de listes. Chaque liste représente une ligne de points de la grille.
Attachez un nœud List.Count à la sortie du nœud Watch de l’étape précédente.
Connectez un nœud Watch à la sortie List.Count.
Le nœud List.Count donne une valeur de 5. Il s'agit de la variable "Nx" telle que définie dans le bloc de code. Pourquoi ?
Tout d’abord, le nœud Point.ByCoordinates utilise l’entrée « x » comme entrée principale pour la création de listes. Lorsque Nx est égale à 5 et Ny à 3, vous obtenez une liste de 5 listes, chacune comportant 3 éléments.
Étant donné que Dynamo traite les listes comme des objets, un nœud List.Count est appliqué à la liste principale de la hiérarchie. Le résultat est une valeur de 5 ou le nombre de listes dans la liste principale.
En utilisant un nœud List.Map, vous descendez d’un niveau dans la hiérarchie et effectuez une « fonction » à ce niveau.
Le nœud List.Count n’a pas d’entrée. Il est utilisé en tant que fonction, de sorte que le nœud List.Count sera appliqué à chaque liste individuelle d’un niveau vers le bas dans la hiérarchie. L’entrée vide de List.Count correspond à l’entrée de liste de List.Map.
Les résultats de List.Count donnent désormais une liste de 5 éléments, chacun d’entre eux ayant une valeur égale à 3. Cela représente la longueur de chaque sous-liste.
Dans cet exercice, vous allez utiliser le nœud List.Combine pour montrer comment il peut être utilisé pour appliquer une fonction à des listes d’objets distinctes.
Commencez par configurer deux listes de points.
Utilisez le nœud Sequence pour générer 10 valeurs, chacune avec un incrément de 10 pas.
Connectez le résultat à l’entrée x d’un nœud Point.ByCoordinates. Cela permet de créer une liste de points dans Dynamo.
Ajoutez un deuxième nœud Point.ByCoordinates à l’espace de travail, utilisez la même sortie Sequence que son entrée x, mais utilisez un nœud Integer Slider comme entrée y et définissez sa valeur sur 31 (il peut s’agir de n’importe quelle valeur, à condition qu’elle ne chevauche pas le premier jeu de points) de sorte que les deux jeux de points ne se chevauchent pas.
Ensuite, utilisez le nœud List.Combine pour appliquer une fonction aux objets dans deux listes distinctes. Dans ce cas, il s’agit d’une fonction de dessin de ligne simple.
Ajoutez un nœud List.Combine à l’espace de travail et connectez les deux jeux de points comme entrées list0 et list1.
Utilisez Line.ByStartPointEndPoint comme fonction d’entrée pour le nœud List.Combine.
Une fois l’opération terminée, les deux jeux de points sont compressés/associés via une fonction Line.ByStartPointEndPoint et renvoient 10 lignes dans Dynamo.
Reportez-vous à l’exercice dans Listes à n dimensions pour découvrir un autre exemple d’utilisation du nœud List.Combine.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
À privilégier par rapport List.Map, la fonctionnalité List@Level vous permet de sélectionner le niveau de liste que vous souhaitez utiliser directement au niveau du port d’entrée du nœud. Cette fonction peut être appliquée à toute entrée entrante d’un nœud et vous permet d’accéder aux niveaux de vos listes plus rapidement et plus facilement que d’autres méthodes. Indiquez simplement au nœud le niveau de la liste que vous souhaitez utiliser comme entrée et laissez le nœud faire le reste.
Dans cet exercice, vous allez utiliser la fonction List@Level pour isoler un niveau de données spécifique.
Nous allons commencer par une grille de points 3D simple.
Puisque la grille est construite avec un intervalle pour X, Y et Z, vous savez que les données sont structurées avec trois niveaux : une liste X, une liste Y et une liste Z.
Ces niveaux existent à différents niveaux. Les niveaux sont indiqués en bas de la bulle d’aperçu. Les colonnes de niveaux de la liste correspondent aux données de liste ci-dessus pour vous aider à identifier le niveau à utiliser.
Les niveaux de liste sont organisés dans l’ordre inverse de sorte que les données de niveau le plus bas soient toujours dans « L1 ». Cela permet de garantir le fonctionnement de vos graphiques tels qu’ils seront planifiés, même si tout est modifié en amont.
Pour utiliser la fonction List@Level , cliquez sur « > ». Dans ce menu, vous verrez deux cases à cocher.
Utiliser les niveaux : permet d’activer la fonctionnalité List@Level. Après avoir cliqué sur cette option, vous pourrez sélectionner les niveaux de liste d’entrée que le nœud doit utiliser. Ce menu vous permet de tester rapidement différentes options de niveau en cliquant sur les boutons haut ou bas.
Conserver la structure de la liste : si cette option est activée, vous pouvez conserver la structure de niveau de cette entrée. Parfois, vous avez peut-être délibérément organisé vos données en sous-listes. En cochant cette option, vous pouvez conserver votre organisation de liste intacte et ne perdre aucune information.
La grille 3D simple vous permet d'accéder à la structure de la liste et de la visualiser en passant par les niveaux de liste. Chaque combinaison de niveau de liste et d’index renvoie un jeu de points différent de votre jeu 3D d’origine.
Dans DesignScript, "@L2" permet de sélectionner uniquement la liste au niveau 2. La liste au niveau 2 avec l'index 0 inclut uniquement le premier jeu de points Y, renvoyant uniquement la grille XZ.
Si vous définissez le filtre de niveaux sur "L1", vous pourrez voir l'intégralité du contenu du premier niveau de la liste. La liste au niveau 1 avec l'index 0 inclut tous vos points 3D dans une liste simple.
Si vous essayez de la même façon pour "L3", vous ne verrez que les troisièmes points de niveau de liste. La liste au niveau 3 avec l'index 0 inclut uniquement le premier jeu de points Z, renvoyant uniquement une grille XY.
Si vous essayez de la même façon pour "L4", vous ne verrez que les troisième points de niveau de liste. La liste au niveau 4 avec l’index 0 inclut uniquement le premier jeu de points X, renvoyant uniquement une grille YZ.
Bien que cet exemple particulier puisse également être créé avec List.Map, List@Level simplifie grandement l’interaction, ce qui facilite l’accès aux données de nœud. Comparez les méthodes List.Map et List@Level ci-dessous :
Bien que les deux méthodes vous donnent accès aux mêmes points, la méthode List@Level vous permet de basculer facilement entre les couches de données au sein d’un nœud unique.
Pour accéder à une grille de points avec List.Map, vous avez besoin d’un nœud List.GetItemAtIndex avec List.Map. Pour chaque niveau de liste que vous allez décaler vers le bas, utilisez un nœud List.Map supplémentaire. Selon la complexité de vos listes, vous devrez peut-être ajouter une quantité importante de nœuds List.Map à votre graphique pour accéder au niveau d’informations approprié.
Dans cet exemple, un nœud List.GetItemAtIndex avec un nœud List.Map renvoie le même jeu de points avec la même structure de liste que List.GetItemAtIndex avec « @L3 » sélectionné.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
La fonction Transposer est une fonction fondamentale lorsque vous travaillez avec des listes de listes. Tout comme dans les programmes de feuille de calcul, une transposition inverse les colonnes et les lignes d'une structure de données. Nous allons le démontrer avec une matrice de base ci-dessous. Dans la section suivante, nous allons montrer comment une transposition peut être utilisée pour créer des relations géométriques.
Supprimez les nœuds List.Count de l’exercice précédent et passez à une géométrie pour voir comment les données sont structurées.
Connectez un nœud PolyCurve.ByPoints à la sortie du nœud Watch à partir de Point.ByCoordinates.
Le résultat affiche 5 polycourbes et les courbes sont visibles dans l’aperçu Dynamo. Le nœud Dynamo recherche une liste de points (ou une liste de listes de points dans ce cas) et crée une polycourbe à partir de ces points. Chaque liste a en fait été convertie en une courbe dans la structure de données.
Un nœud List.Transpose permet de remplacer l’ensemble des éléments par toutes les listes dans une liste de listes. Cette opération semble compliquée, mais la logique est la même que pour la fonction Transposer dans Microsoft Excel : remplacer des colonnes par des lignes dans une structure de données.
Observez le résultat abstrait : la transposition a modifié la structure de la liste d’une liste de 5 listes comportant chacune 3 éléments en 3 listes contenant 5 éléments.
Observez le résultat géométrique : à l’aide du nœud PolyCurve.ByPoints, vous obtenez 3 polycourbes perpendiculaires aux courbes d’origine.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Cet exercice utilise une partie de la logique établie dans l'exercice précédent pour modifier une surface. Votre objectif ici est intuitif, mais la navigation dans la structure de données sera plus importante. Nous voulons articuler une surface en déplaçant un point de contrôle.
Commencez par la chaîne de nœuds ci-dessus. Vous allez créer une surface de base qui s’étend sur la grille Dynamo par défaut.
À l’aide du nœud Code Block, insérez ces deux lignes de code et connectez-les aux entrées u et v de Surface.PointAtParameter, respectivement :
-50..50..#3;
-50..50..#5;
Veillez à définir la combinaison de Surface.PointAtParameter sur « Produit vectoriel ».
Le nœud Watch indique que vous avez une liste de 3 listes, chacune comportant 5 éléments.
Dans cette étape, vous allez interroger le point central de la grille créée. Pour ce faire, sélectionnez le point central dans la liste centrale. Logique, non ?
Pour confirmer qu’il s’agit du bon point, vous pouvez également cliquer sur les éléments du nœud Watch pour confirmer que vous ciblez le bon point.
À l’aide du nœud Code Block, écrivez une ligne de code de base afin d’interroger une liste de listes :
points[1][2];
À l’aide de Geometry.Translate, vous allez déplacer le point sélectionné vers le haut dans la direction Z de 20 unités.
Sélectionnez également la ligne centrale des points avec un nœud List.GetItemAtIndex. Remarque : comme lors de l’étape précédente, vous pouvez également interroger la liste avec le nœud Code Block, à l’aide d’une ligne de
points[1];
.
Jusqu’à présent, vous avez interrogé le point central et l’avez déplacé vers le haut. Vous devez à présent insérer ce point déplacé dans la structure de données d’origine.
Vous devez d’abord remplacer l’élément de la liste isolé à l’étape précédente.
À l’aide de List.ReplaceItemAtIndex, remplacez l’élément central à l’aide d’un index de « 2 » par l’élément de remplacement connecté au point déplacé (Geometry.Translate).
La sortie montre que vous avez saisi le point déplacé dans l’élément central de la liste.
Maintenant que vous avez modifié la liste, vous devez la réinsérer dans la structure de données d’origine : la liste de listes.
En suivant la même logique, utilisez List.ReplaceItemAtIndex pour remplacer la liste centrale par la liste modifiée.
Les nœuds Code Blocks définissant l’index de ces deux nœuds sont 1 et 2, ce qui correspond à la requête d’origine du nœud Code Block (points[1][2]).
En sélectionnant la liste à l’index 1, la structure de données s’affiche en surbrillance dans l’aperçu Dynamo. Vous avez fusionné le point déplacé dans la structure de données d’origine.
Il existe plusieurs façons de créer une surface à partir de cet ensemble de points. Dans ce cas, vous allez créer une surface en lissant des courbes.
Créez un nœud NurbsCurve.ByPoints et connectez la nouvelle structure de données pour créer trois courbes NURBS.
Connectez une surface Surface.ByLoft à la sortie de NurbsCurve.ByPoints. Vous avez maintenant une surface modifiée. Vous pouvez modifier la valeur Z d’origine de la géométrie. Effectuez la conversion et observez la mise à jour de la géométrie.
Un est défini uniquement par une ou plusieurs valeurs, appelées coordonnées. Le nombre de valeurs de coordonnées requises pour définir le point dépend du système de coordonnées ou du contexte dans lequel il se trouve.
Le type de point le plus courant dans Dynamo existe dans notre système de coordonnées général en trois dimensions et possède trois coordonnées [X,Y,Z] (Points 3D dans Dynamo).
Un point 2D dans Dynamo possède deux coordonnées [X, Y].
Les paramètres des courbes et des surfaces sont continus et s’étendent au-delà de l’arête de la géométrie donnée. Étant donné que les formes qui définissent l’espace des paramètres résident dans un système de coordonnées général en trois dimensions, vous pouvez toujours convertir une coordonnée paramétrique en coordonnée « universelle ». Le point [0.2, 0.5] sur la surface, par exemple, est le même que le point [1.8, 2.0, 4.1] en coordonnées universelles.
Point dans les coordonnées XYZ universelles supposées
Point relatif à un système de coordonnées donné (cylindrique)
Point comme coordonnée UV sur une surface
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Si la géométrie est la langue d'un modèle, les points en sont l'alphabet. Les points constituent la base sur laquelle est créée la géométrie. Il faut au moins deux points pour créer une courbe, au moins trois points pour créer un polygone ou une face maillée, etc. La définition de la position, de l’ordre et de la relation entre les points (essayez une fonction de sinus) nous permet de définir une géométrie d’ordre supérieur, comme des cercles ou des courbes.
Un cercle utilisant les fonctions
x=r*cos(t)
ety=r*sin(t)
Une courbe sinusoïdale utilisant les fonctions
x=(t)
ety=r*sin(t)
Les points peuvent également exister dans un système de coordonnées bidimensionnel. La convention comporte différentes lettres de notation selon le type d’espace avec lequel vous travaillez. Il se peut que vous utilisiez [X,Y] sur un plan ou [U,V] pour une surface.
Un point dans un système de coordonnées euclidien : [X,Y,Z]
Un point dans un système de coordonnées de paramètres de courbe : [t]
Un point dans un système de coordonnées de paramètres de surface : [U,V]
Les listes servent à organiser les données. Dans le système d'exploitation de votre ordinateur, vous disposez de fichiers et de dossiers. Dans Dynamo, vous pouvez les considérer respectivement comme des éléments et des listes. Comme dans votre système d'exploitation, il existe de nombreuses façons de créer et de modifier des données, ainsi que de leur envoyer des requêtes. Dans ce chapitre, nous allons détailler la façon dont les listes sont gérées dans Dynamo.
Officiellement, une chaîne est une séquence de caractères représentant une constante littérale ou un type de variable. Officieusement, dans le jargon de la programmation, une chaîne est du texte. Vous avez travaillé avec des nombres entiers et des nombres décimaux pour définir les paramètres et vous pouvez faire de même avec du texte.
Les chaînes peuvent être utilisées pour une large gamme d'applications, y compris la définition de paramètres personnalisés, l'annotation de jeux de documentation et l'analyse via des jeux de données textuelles. Le nœud String se trouve dans la catégorie Core > Input.
Les exemples de nœuds ci-dessus sont des chaînes. Un nombre peut être représenté sous forme de chaîne, de lettre ou de tableau complet de texte.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Interroger les chaînes vous permet d'analyser rapidement de grandes quantités de données. Vous allez découvrir certaines opérations de base qui peuvent accélérer un workflow et aider à l'interopérabilité des logiciels.
L'image ci-dessous prend en compte une chaîne de données provenant d'une feuille de calcul externe. La chaîne représente les sommets d'un rectangle dans le plan XY. Effectuez quelques opérations de fractionnement de chaînes dans un petit exercice :
Le séparateur « ; » sépare chaque sommet du rectangle. Cette opération permet de créer une liste comportant 3 éléments pour chaque sommet.
Pour créer un séparateur, appuyez sur « + » au milieu du nœud.
Ajoutez une chaîne « , » à la zone de dessin et connectez-la à la nouvelle entrée de séparateur.
Vous obtenez maintenant une liste de dix éléments. Le nœud se divise d’abord en fonction de separator0, puis en fonction de separator1.
Bien que la liste d’éléments ci-dessus puisse ressembler à des nombres, ils restent considérés comme des chaînes individuelles dans Dynamo. Pour créer des points, leur type de données doit être converti d’une chaîne en nombre. Cette opération est effectuée à l’aide du nœud String.ToNumber.
Ce nœud est simple. Connectez les résultats String.Split à l’entrée. La sortie ne semble pas différente, mais le type de données est maintenant un nombre au lieu d’une chaîne.
Avec certaines opérations supplémentaires de base, vous avez maintenant un triangle dessiné à l’origine en fonction de l’entrée de chaîne d’origine.
Étant donné qu'une chaîne est un objet texte générique, elle héberge une large gamme d'applications. Examinez certaines des principales actions de la catégorie Core > String dans Dynamo :
Il s'agit d'une méthode de fusion de deux chaînes dans l'ordre. Cette opération consiste à prendre chaque chaîne littérale dans une liste et à créer une chaîne fusionnée.
L’image suivante représente la concaténation de trois chaînes :
Pour ajouter ou soustraire des chaînes à la concaténation, cliquez sur les boutons +/- au centre du nœud.
La sortie produit une chaîne concaténée, avec des espaces et des signes de ponctuation inclus.
La méthode de jonction est très similaire à la concaténation, sauf qu'elle comporte une couche de ponctuation supplémentaire.
Si vous avez travaillé dans Excel, vous connaissez peut-être les fichiers CSV. Il s’agit de valeurs séparées par des virgules. Vous pouvez utiliser une virgule (ou dans ce cas, deux tirets) comme séparateur avec le nœud String.Join pour créer une structure de données similaire.
L’image suivante représente la jointure de deux chaînes :
L’entrée separator permet de créer une chaîne qui divise les chaînes jointes.
Commencez par une division de chaîne de base de la strophe. Tout d'abord, remarquez que l'écriture est formatée par des virgules. Utilisez ce format pour séparer chaque ligne en éléments individuels.
La chaîne de base est collée dans un nœud String.
Un autre nœud String est utilisé pour désigner le séparateur. Dans ce cas, utilisez une virgule.
Ajoutez un nœud String.Split à la zone de dessin et connectez-le aux deux chaînes.
Le résultat montre que vous avez séparé les lignes en éléments individuels.
Passez désormais à la meilleure partie du poème : les deux dernières lignes. La strophe d'origine était un élément de données. Vous avez divisé ces données en éléments individuels lors de la première étape. Vous devez maintenant trouver le texte que vous recherchez. Bien que vous puissiez faire cela en sélectionnant les deux derniers éléments de la liste, s’il s’agissait d’un livre entier, vous ne pourriez pas tout lire et isoler manuellement les éléments.
Au lieu d’effectuer une recherche manuelle, utilisez le nœud String.Contains pour rechercher un ensemble de caractères. Cette opération est similaire à la commande « Rechercher » dans un traitement de texte. Dans ce cas, vous obtenez le retour de « true » ou de « false » si cette sous-chaîne se trouve dans l’élément.
Dans l’entrée searchFor, définissez une sous-chaîne à rechercher dans la strophe. Utilisez un nœud String avec le texte « And miles ».
La sortie vous donne une liste des valeurs true et false. Vous allez utiliser cette logique booléenne pour filtrer les éléments à l’étape suivante.
List.FilterByBoolMask est le nœud à utiliser pour éliminer les valeurs true et false. La sortie « in » renvoie les instructions avec une entrée « mask » ayant la valeur « true », tandis que la sortie « out » renvoie celles qui sont « false ».
Le résultat de l'entrée "in" est tel qu'attendu, vous donnant ainsi les deux dernières lignes de la strophe.
À présent, pour obtenir la répétition de la strophe, vous devez fusionner les deux lignes. Si vous observez la sortie de l’étape précédente, vous pouvez remarquer que la liste contient deux éléments :
À l’aide de deux nœuds List.GetItemAtIndex, vous pouvez isoler les éléments en utilisant les valeurs 0 et 1 comme entrée d’index.
La sortie de chaque nœud vous donne, dans l’ordre, les deux dernières lignes.
Pour fusionner ces deux éléments en un seul, utilisez le nœud String.Join :
Après avoir ajouté le nœud String.Join, vous remarquez que vous avez besoin d’un séparateur.
Pour créer le séparateur, ajoutez un nœud String dans la zone de dessin et entrez une virgule.
Le résultat final a fusionné les deux derniers éléments en un seul élément.
Isoler les deux dernières lignes semble représenter beaucoup de travail ; et il est vrai que les opérations de chaîne nécessitent souvent un peu de travail en amont. Cependant, ces opérations sont évolutives et peuvent être appliquées à de grands jeux de données avec une certaine facilité. Si vous travaillez de manière paramétrique avec des feuilles de calcul et l'interopérabilité, n'oubliez pas les opérations relatives aux chaînes.
La couleur est un excellent type de donnée permettant de créer des visuels convaincants et de restituer la différence dans le résultat obtenu à partir de votre programme visuel. Lorsque vous travaillez avec des données abstraites et des nombres variables, il est parfois difficile de remarquer les changements. Cette application est idéale pour les couleurs.
Dans Dynamo, les couleurs sont créées à l’aide des entrées ARVB. Cet acronyme correspond aux canaux Alpha, Rouge, Vert et Bleu. L’alpha représente la transparence de la couleur, tandis que les trois autres couleurs sont utilisées comme couleurs primaires pour générer de concert l’ensemble du spectre de couleurs.
Icône | Nom (Syntaxe) | Entrées | Sorties |
---|
Les couleurs du tableau ci-dessous recherchent les propriétés utilisées pour définir la couleur : Alpha, Rouge, Vert et Bleu. Étant donné que le nœud Color.Components donne les quatre sorties différentes, ce nœud est préférable pour l'interrogation des propriétés d'une couleur.
Icône | Nom (Syntaxe) | Entrées | Sorties |
---|
Les couleurs du tableau ci-dessous correspondent à l’espace de couleurs HSB. Diviser la couleur en teinte, en saturation et en luminosité permet probablement de l’interpréter de façon plus intuitive : quelle couleur choisir ? Quel niveau de saturation de la couleur choisir ? Et quel niveau d'intensité de la couleur choisir ? Il s'agit respectivement de la répartition de la teinte, de la saturation et de la luminosité.
Icône | Nom (Syntaxe) | Entrées | Sorties |
---|
L’intervalle de couleurs est semblable au nœud Remap Range de l’exercice : il remappe une liste de nombres dans un autre domaine. Au lieu d’effectuer le mappage vers un domaine nombre, il mappe vers un dégradé de couleurs basé sur des numéros d’entrée allant de 0 à 1.
Le nœud actuel fonctionne bien, mais il peut être un peu délicat de tout faire fonctionner la première fois. La meilleure façon de se familiariser avec le dégradé de couleurs est de le tester de manière interactive. Vous allez faire un exercice rapide pour découvrir comment configurer un dégradé avec des couleurs de sortie correspondant aux nombres.
Définir trois couleurs : à l’aide d’un nœud Code Block, définissez rouge, vert et bleu en connectant les combinaisons appropriées de 0 et 255.
Créer une liste : fusionnez les trois couleurs dans une liste.
Définir les index : créez une liste pour définir les positions des poignées de chaque couleur (de 0 à 1). Notez la valeur 0.75 pour le vert. La couleur verte est ainsi placée aux trois quarts du dégradé horizontal dans le curseur de l’intervalle de couleurs.
Code Block : valeurs d’entrée (entre 0 et 1) pour convertir en couleurs.
Le nœud Display.ByGeometry permet de colorer la géométrie dans la fenêtre Dynamo. Ce nœud est utile pour séparer différents types de géométrie, présenter un concept paramétrique ou définir une légende d’analyse pour la simulation. Les entrées sont simples : geometry et color. Pour créer un dégradé comme l’image ci-dessus, l’entrée color est connectée au nœud Color Range.
Le nœud Display.BySurfaceColors permet de mapper des données sur une surface grâce à la couleur. Cette fonctionnalité présente de nombreuses possibilités pour visualiser des données obtenues par analyse discrète, comme le soleil, l’énergie et la proximité. Dans Dynamo, l'application d'une couleur à une surface revient à appliquer une texture à un matériau dans d'autres environnements de CAO. Dans le court exercice ci-dessous, vous allez découvrir comment utiliser cet outil.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Cet exercice est axé sur le contrôle paramétrique de la couleur parallèlement à la géométrie. La géométrie est une hélice de base, définie ci-dessous à l’aide d’un nœud Code Block. C’est une méthode simple et rapide servant à créer une fonction paramétrique. Étant donné que vous vous intéressez à la couleur (plutôt qu’à la géométrie), le bloc de code vous permet de créer efficacement l’hélice sans encombrer la zone de dessin. Vous utiliserez le bloc de code plus fréquemment lorsque le guide traitera de matériaux plus avancés.
Bloc de code : définissez les deux blocs de code avec les formules susmentionnées. Il s’agit d’une méthode paramétrique rapide de création d’une clothoïde.
Point.ByCoordinates : connectez les trois sorties du nœud Code Block aux coordonnées du nœud.
Un réseau de points est maintenant visible, créant une hélice. L’étape suivante consiste à créer une courbe passant par les points afin de pouvoir visualiser l’hélice.
PolyCurve.ByPoints : connectez la sortie Point.ByCoordinates à l’entrée points du nœud. Vous obtenez une courbe hélicoïdale.
Curve.PointAtParameter : connectez la sortie PolyCurve.ByPoints à l’entrée curve. L’objectif de cette étape est de créer un point d’attraction paramétrique qui glisse le long de la courbe. Puisque la courbe évalue un point au paramètre, vous devez entrer une valeur param comprise entre 0 et 1.
Number Slider : après l’ajout à la zone de dessin, remplacez la valeur min par 0.0, la valeur max par 1.0 et la valeur step par .01. Connectez la sortie du curseur à l’entrée param pour Curve.PointAtParameter. Un point apparaît désormais sur la longueur de l’hélice, représenté par un pourcentage du curseur (0 au point de départ, 1 au point d’arrivée).
Une fois le point de référence créé, vous allez maintenant comparer la distance entre le point de référence et les points d'origine définissant l'hélice. Cette valeur de distance détermine la géométrie ainsi que la couleur.
Geometry.DistanceTo : connectez la sortie Curve.PointAtParameter à l’entrée. Connectez Point.ByCoordinates à l’entrée geometry.
Watch : la sortie obtenue affiche une liste des distances entre chaque point hélicoïdal et le point de référence le long de la courbe.
L’étape suivante consiste à piloter les paramètres avec la liste des distances entre les points hélicoïdaux et le point de référence. Ces valeurs de distance permettent de définir les rayons d’une série de sphères le long de la courbe. Pour conserver une taille adaptée aux sphères, vous devez remapper les valeurs de distance.
Math.RemapRange : connectez la sortie Geometry.DistanceTo à l’entrée numbers.
Bloc de code : connectez un bloc de code avec une valeur de 0.01 à l’entrée newMin et un bloc de code avec une valeur de 1 à l’entrée newMax.
Watch : connectez la sortie Math.RemapRange à un nœud et la sortie Geometry.DistanceTo à un autre nœud. Comparez les résultats.
Cette étape a permis de remapper la liste de distance pour qu’elle soit plus petite. Vous pouvez modifier les valeurs newMin et newMax comme bon vous semble. Les valeurs sont remappées et auront le même rapport de distribution sur le domaine.
Sphere.ByCenterPointRadius : connectez la sortie Math.RemapRange à l’entrée radius et la sortie Point.ByCoordinates d’origine à l’entrée centerPoint.
Modifiez la valeur du curseur de numérotation et observez la mise à jour de la taille des sphères. Vous avez désormais un gabarit paramétrique.
La taille des sphères montre le réseau paramétrique défini par un point de référence le long de la courbe. Utilisez le même concept pour le rayon des sphères afin de contrôler leur couleur.
Color Range : à ajouter en haut de la zone de dessin. Lorsque vous passez le curseur sur l’entrée value, vous remarquez que les nombres demandés sont compris entre 0 et 1. Vous devez remapper les numéros de la sortie Geometry.DistanceTo afin qu’ils soient compatibles avec ce domaine.
Sphere.ByCenterPointRadius : pour le moment, désactivez l’aperçu sur ce nœud (cliquez avec le bouton droit de la souris > Aperçu).
Math.RemapRange : ce processus devrait vous sembler familier. Connectez la sortie Geometry.DistanceTo à l’entrée numbers.
Bloc de code : comme lors d’une étape précédente, créez une valeur de 0 pour l’entrée newMin et une valeur de 1 pour l’entrée newMax. Dans ce cas, vous pouvez définir deux sorties à partir d’un bloc de code.
Color Range : connectez la sortie Math.RemapRange à l’entrée value.
Color.ByARGB : cette action permet de créer deux couleurs. Bien que ce processus puisse paraître délicat, il est identique aux couleurs RVB d’un autre logiciel. Vous allez simplement utiliser la programmation visuelle pour le faire.
Bloc de code : créez deux valeurs de 0 et 255. Connectez les deux sorties aux deux entrées Color.ByARGB conformément à l’image ci-dessus (ou créez vos deux couleurs préférées).
Color Range : l’entrée colors demande une liste de couleurs. Vous devez créer cette liste à partir des deux couleurs créées à l’étape précédente.
List.Create : fusionnez les deux couleurs dans une liste. Connectez la sortie à l’entrée colors pour Color Range.
Display.ByGeometryColor : connectez Sphere.ByCenterPointRadius à l’entrée geometry et Color Range à l’entrée color. Vous avez maintenant un dégradé lisse sur le domaine de la courbe.
Si vous modifiez la valeur de Number Slider lors d’une étape précédente de la configuration, les couleurs et les tailles sont mises à jour. Dans ce cas, les couleurs et la taille du rayon sont directement liées : vous avez désormais un lien visuel entre deux paramètres !
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Tout d’abord, créez (ou référencez) une surface à utiliser comme entrée pour le nœud Display.BySurfaceColors. Dans cet exemple, vous allez effectuer un lissage entre une courbe sinus et cosinus.
Ce groupe de nœuds crée des points le long de l’axe Z, puis les déplace selon les fonctions de sinus et cosinus. Les deux listes de points sont ensuite utilisées pour générer des courbes NURBS.
Surface.ByLoft : générez une surface interpolée entre la liste des courbes NURBS.
File Path : sélectionnez un fichier image à échantillonner pour les données de pixel en aval.
Utilisez File.FromPath pour convertir le chemin d’accès au fichier en fichier, puis le transmettre à Image.ReadFromFile pour générer une image à des fins d’échantillonnage.
Image.Pixels : entrez une image et indiquez une valeur d’exemple à utiliser le long des dimensions x et y de l’image.
Curseur : fournit des valeurs d’exemple pour Image.Pixels.
Display.BySurfaceColors : mappez le réseau de valeurs de couleur sur la surface le long de X et Y respectivement.
Aperçu rapproché de la surface de sortie avec résolution des échantillons de 400 x 300
Pour compliquer la tâche, vous allez ajouter encore plus de niveaux à la hiérarchie. La structure des données peut s'étendre au-delà d'une liste bidimensionnelle de listes. Étant donné que les listes sont des éléments dans Dynamo, vous pouvez créer des données avec autant de dimensions que possible.
L'analogie utilisée ici est celle des poupées russes. Chaque liste peut être considérée comme un conteneur contenant plusieurs éléments. Chaque liste possède ses propres propriétés et est considérée comme son propre objet.
L’ensemble de poupées russes (photo de ) est une analogie pour les listes dimensionnelles. Chaque couche représente une liste et chaque liste contient des éléments. Dans le cas de Dynamo, chaque conteneur peut contenir plusieurs conteneurs (représentant les éléments de chaque liste).
Les listes à n dimensions sont difficiles à expliquer visuellement, mais vous allez découvrir dans ce chapitre quelques exercices axés sur des listes de plus de deux dimensions.
Le mappage est sans doute la partie la plus complexe de la gestion des données dans Dynamo, et est particulièrement utile lorsque vous travaillez avec des hiérarchies de listes complexes. Grâce à la série d’exercices ci-dessous, vous allez découvrir quand utiliser le mappage et les combinaisons à mesure que les données deviennent multidimensionnelles.
Les nœuds List.Map et List.Combine sont présentés dans la section précédente. Dans le dernier exercice ci-dessous, vous allez utiliser ces nœuds sur une structure de données complexe.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Cet exercice est le premier d'une série de trois exercices axés sur l'articulation de la géométrie importée. Chaque partie de cette série d’exercices va accroître la complexité de la structure des données.
Commencez par le fichier .sat dans le dossier des fichiers d’exercice. Vous pouvez sélectionner ce fichier à l’aide du nœud File Path.
Avec Geometry.ImportFromSAT, la géométrie est importée dans l’aperçu Dynamo en tant que deux surfaces.
Dans le cadre de cet exercice, utilisez l’une des surfaces pour faire simple.
Sélectionnez l’index de 1 pour sélectionner la surface supérieure. Pour ce faire, utilisez le nœud List.GetItemAtIndex.
Désactivez l’aperçu de la géométrie à partir de l’aperçu de Geometry.ImportFromSAT.
L’étape suivante consiste à diviser la surface en une grille de points.
1. À l’aide d’un nœud Code Block, insérez les deux lignes de code suivantes :
0..1..#10;
0..1..#5;
2. Avec le nœud Surface.PointAtParameter, connectez les deux valeurs de Code Block à u et v. Définissez la combinaison de ce nœud sur « Produit vectoriel ».
3. La sortie révèle la structure des données, également visible dans l’aperçu Dynamo.
Ensuite, utilisez les points de la dernière étape pour générer dix courbes le long de la surface.
Pour voir comment la structure de données est organisée, connectez un nœud NurbsCurve.ByPoints à la sortie de Surface.PointAtParameter.
Vous pouvez désactiver l’aperçu du nœud List.GetItemAtIndex pour obtenir un résultat plus clair.
Un nœud List.Transpose de base permet d’inverser les colonnes et les lignes d’une liste de listes.
Lorsque vous connectez la sortie de List.Transpose à NurbsCurve.ByPoints, vous obtenez cinq courbes placées horizontalement sur la surface.
Vous pouvez désactiver l’aperçu du nœud NurbsCurve.ByPoints à l’étape précédente pour obtenir le même résultat dans l’image.
Passons aux choses sérieuses. Imaginez que vous souhaitiez effectuer une opération sur les courbes créées lors de l'exercice précédent. Vous devrez peut-être lier ces courbes à une autre surface et effectuer un lissage entre elles. Pour ce faire, il convient d’accorder une plus grande attention à la structure des données, même si la logique sous-jacente est la même.
Commencez par une étape de l’exercice précédent : isolez la surface supérieure de la géométrie importée grâce au nœud List.GetItemAtIndex.
À l’aide du nœud Surface.Offset, décalez la surface par une valeur de 10.
De la même façon que dans l’exercice précédent, définissez un nœud Code Block avec les deux lignes de code suivantes :
0..1..#10;
0..1..#5;
Connectez ces sorties à deux nœuds Surface.PointAtParameter dont la combinaison est définie sur « Produit vectoriel ». L’un de ces nœuds est connecté à la surface d’origine, tandis que l’autre est connecté à la surface décalée.
Désactivez l’aperçu de ces surfaces.
Comme dans l’exercice précédent, connectez les sorties à deux nœuds NurbsCurve.ByPoints. Le résultat affiche les courbes correspondant à deux surfaces.
Le nœud List.Create vous permet de combiner les deux jeux de courbes en une liste de listes.
La sortie affiche deux listes contenant chacune dix éléments, représentant chaque ensemble de connexions de courbes NURBS.
Grâce au nœud Surface.ByLoft, vous pouvez visualiser cette structure de données. Le nœud lisse toutes les courbes de chaque sous-liste.
Désactivez l’aperçu du nœud Surface.ByLoft à l’étape précédente.
Si vous utilisez le nœud List.Transpose, n’oubliez pas qu’il permet de retourner toutes les colonnes et les lignes. Ce nœud convertit deux listes de dix courbes en dix listes de deux courbes. Chaque courbe NURBS est désormais liée à la courbe voisine sur l’autre surface.
Le nœud Surface.ByLoft vous permet d’obtenir une structure nervurée.
Vous allez ensuite découvrir un autre processus pour atteindre ce résultat.
Avant de commencer, désactivez l’aperçu de Surface.ByLoft à l’étape précédente pour éviter toute confusion.
Le nœud List.Combine constitue une alternative au nœud List.Transpose. Il exécute un « combinateur » sur chaque sous-liste.
Dans ce cas, vous utilisez List.Create en tant que « combinateur » qui va créer une liste de chaque élément dans les sous-listes.
Le nœud Surface.ByLoft vous permet d’obtenir les mêmes surfaces que lors de l’étape précédente. L’option Transposer est plus facile à utiliser dans ce cas, mais lorsque la structure de données devient encore plus complexe, le nœud List.Combine s’avère plus fiable.
Si vous souhaitez inverser l’orientation des courbes dans la structure nervurée, utilisez un nœud List.Transpose avant de les connecter à NurbsCurve.ByPoints. Cette action permet d’inverser les colonnes et les lignes et d’obtenir 5 nervures horizontales.
Vous allez désormais aller encore un peu plus loin. Dans cet exercice, vous allez travailler avec les deux surfaces importées et créer une hiérarchie de données complexe. L'objectif est néanmoins d'effectuer la même opération avec la même logique sous-jacente.
Commencez par le fichier importé de l’exercice précédent.
Comme dans l’exercice précédent, utilisez le nœud Surface.Offset pour effectuer un décalage d’une valeur de 10.
Dans la sortie, vous pouvez voir que le nœud de décalage a créé deux surfaces.
De la même façon que dans l’exercice précédent, définissez un nœud Code Block avec les deux lignes de code suivantes :
0..1..#20;
0..1..#20;
Connectez ces sorties à deux nœuds Surface.PointAtParameter dont la combinaison est définie sur « Produit vectoriel ». L’un de ces nœuds est connecté aux surfaces d’origine, tandis que l’autre est connecté aux surfaces décalées.
Comme dans l’exercice précédent, connectez les sorties à deux nœuds NurbsCurve.ByPoints.
Observez la sortie de NurbsCurve.ByPoints : il s’agit d’une liste de deux listes, ce qui est plus complexe que l’exercice précédent. Étant donné que les données sont classées par la surface sous-jacente, un autre niveau a été ajouté à la structure des données.
Les choses deviennent plus complexes dans le nœud Surface.PointAtParameter. Dans ce cas, vous avez une liste de listes de listes.
Avant de continuer, désactivez l’aperçu des surfaces existantes.
À l’aide du nœud List.Create, fusionnez les courbes NURBS en une structure de données, créant ainsi une liste de listes de listes.
Lorsque vous connectez un nœud Surface.ByLoft, vous obtenez une version des surfaces d’origine, car elles restent toutes dans leur propre liste telle qu’elle a été créée à partir de la structure de données d’origine.
Dans l’exercice précédent, le fichier List.Transpose a été utilisé pour créer une structure nervurée. Ce ne sera pas possible ici. Vous devez utiliser une transposition sur une liste bidimensionnelle. Étant donné que vous avez une liste tridimensionnelle, une opération de « basculement des colonnes et des lignes » ne fonctionnera pas aussi facilement. N’oubliez pas que les listes sont des objets. Par conséquent, le nœud List.Transpose inverse vos listes sans les sous-listes, mais n’inverse pas les courbes NURBS d’une liste plus bas dans la hiérarchie.
Le nœud List.Combine fonctionne mieux ici. Lorsque vous obtenez des structures de données plus complexes, utilisez les nœuds List.Map et List.Combine.
L’utilisation du nœud List.Create comme « combinateur » vous permet de créer une structure de données plus appropriée.
La structure de données doit toujours être transposée à une étape inférieure de la hiérarchie. Pour ce faire, utilisez List.Map. Ce nœud fonctionne comme List.Combine, sauf qu’il utilise une liste d’entrées, au lieu de deux listes ou plus.
La fonction appliquée à List.Map est List.Transpose, permettant d’inverser les colonnes et les lignes des sous-listes dans la liste principale.
Enfin, vous pouvez lisser les courbes NURBS avec une hiérarchie de données correcte. Vous obtenez ainsi une structure nervurée.
Ajoutez de la profondeur à la géométrie à l’aide d’un nœud Surface.Thicken avec les paramètres d’entrée, comme indiqué.
Il peut être utile d’ajouter un support de surface à deux de ces structures. Ajoutez un autre nœud Surface.ByLoft et utilisez la première sortie de NurbsCurve.ByPoints d’une étape précédente comme entrée.
Comme l’aperçu est de plus en plus encombré, désactivez l’aperçu de ces nœuds en cliquant avec le bouton droit sur chacun d’eux et désélectionnez l’option « Aperçu » pour mieux voir le résultat.
L’articulation se termine lorsque vous avez épaissi les surfaces sélectionnées.
Ce n’est pas la chaise à bascule la plus confortable au monde, mais elle contient de nombreuses données.
Pour la dernière étape, inversez la direction des éléments striés. Dans l’exercice précédent, vous avez utilisé l’option Transposer. La procédure à suivre est similaire ici.
Étant donné qu’un niveau supplémentaire a été ajouté à la hiérarchie, vous devez utiliser List.Map avec une fonction List.Tranpose pour modifier la direction des courbes Nurbs.
Augmentez le nombre de girons de façon à pouvoir modifier le nœud Code Block comme suit :
0..1..#20;
0..1..#30;
La première version de la chaise à bascule était lisse. Le second modèle propose une chaise à bascule sportive originale.
Créer : créez ou construisez une géométrie à partir de zéro, par exemple, un cercle.
Action : effectuez une action sur un objet, par exemple, mettre un cercle à l’échelle.
Requête : permet d’obtenir une propriété d’un objet qui existe déjà, par exemple, obtenir le rayon d’un cercle.
Noeud | Nœud | ||
---|---|---|---|
La ligne est un ensemble de points. Chaque ligne contient au moins 2 points. L’une des méthodes les plus courantes pour créer une ligne dans Dynamo consiste à utiliser Line.ByStartPointEndPoint
.
Icône | Nom/Syntaxe | Entrées | Sorties |
---|---|---|---|
Cela rend les objets booléens solides extrêmement efficaces. Il existe trois opérations booléennes de solide qui permettent de distinguer les parties de la géométrie qui sont conservées.
Outre ces trois opérations, Dynamo dispose des nœuds Solid.DifferenceAll et Solid.UnionAll pour effectuer des opérations de différence et d’union avec plusieurs solides.
Photo de
Photo de .
Photo de .
Remarque : cet exercice a été créé avec une version précédente de Dynamo. La plupart des fonctionnalités List.Map ont été résolues par l’ajout de la fonctionnalité List@Level . Pour plus d’informations, reportez-vous à la rubrique ci-dessous.
Remarque : cet exercice a été créé avec une version précédente de Dynamo. La plupart des fonctionnalités List.Combine ont été résolues avec l’ajout de la fonction List@Level. _ Pour plus d’informations, reportez-vous à la rubrique_ ci-dessous.
Le raccourci de bloc de code utilise « [] » pour définir une liste. Cette méthode est beaucoup plus rapide et fluide pour créer une liste que le nœud List.Create. Le nœud Code Block est abordé plus en détail dans la rubrique . Consultez l’image ci-dessous pour découvrir comment définir une liste contenant plusieurs expressions à l’aide d’un bloc de code.
Le raccourci de Code Block utilise « [] » pour sélectionner facilement et rapidement des éléments spécifiques à partir d’une structure de données complexe. Les nœuds Code Block sont abordés plus en détail dans le chapitre . Consultez l’image ci-dessous pour découvrir comment interroger une liste contenant plusieurs types de données à l’aide d’un bloc de code.
Dans cet exercice, vous allez utiliser les méthodes de requête et de manipulation des chaînes pour déconstruire la dernière strophe du poème de Robert Frost . Ce n’est pas l’application la plus pratique, mais elle vous aidera à comprendre les actions de chaînes conceptuelles lorsque vous les appliquez aux lignes lisibles de rythme et de rime.
Boolean
Number
String
Number Slider
Directory Path
Integer Slider
File Path
Object.IsNull
obj
bool
CREER |
Color.ByARGB Créer une couleur au moyen de composants alpha, rouges, verts et bleus. |
Intervalles de couleurs Obtenir une couleur à partir d'un dégradé de couleurs entre une couleur de départ et une couleur de fin. |
ACTIONS |
Color.Brightness Obtient la valeur de luminosité de cette couleur. |
Color.Components Répertorie les composants de la couleur dans l’ordre suivant : alpha, rouge, vert, bleu. |
Color.Saturation Obtient la valeur de saturation de cette couleur. |
Color.Hue Obtient la valeur de teinte de cette couleur. |
REQUETE |
Color.Alpha Rechercher le composant alpha d’une couleur, de 0 à 255. |
Color.Blue Rechercher le composant bleu d’une couleur, de 0 à 255. |
Color.Green Rechercher le composant vert d’une couleur, de 0 à 255. |
Color.Red Rechercher le composant rouge d’une couleur, de 0 à 255. |
CREER |
GeometryColor.ByGeometryColor Affiche la géométrie à l'aide d'une couleur. |
ACTIONS |
View.Watch Visualiser la sortie du nœud. |
View.Watch 3D Affiche un aperçu dynamique de la géométrie. |
ACTIONS |
Opération booléenne Sélection entre True et False. |
Code Block Permet de créer le code DesignScript directement. |
Directory Path Permet de sélectionner un répertoire sur le système pour obtenir son chemin d’accès |
File Path Permet de sélectionner un fichier sur le système de façon à obtenir son nom de fichier. |
Curseur d’entier Curseur qui génère des valeurs entières. |
Nombre Permet de créer un nombre. |
Number Slider Curseur qui génère des valeurs numériques. |
Chaîne Crée une chaîne. |
Object.IsNull Détermine si l’objet indiqué est nul. |
CREER |
List.Create Permet de créer une liste des entrées indiquées. |
List.Combine Applique un combinateur à chaque élément en deux séquences |
Number Range Crée une séquence de nombres dans l’intervalle spécifié |
Number Sequence Crée une série de numéros. |
ACTIONS |
List.Chop Couper une liste en un ensemble de listes contenant chacune le nombre donné d’éléments. |
List.Count Renvoie le nombre d’éléments stockés dans la liste indiquée. |
List.Flatten Aplanit une liste imbriquée de listes en fonction d’une quantité spécifique. |
List.FilterByBoolMask Filtre une séquence en recherchant les index correspondants dans une liste distincte de booléens. |
List.GetItemAtIndex Obtient un élément de la liste indiquée qui se trouve au niveau de l’index spécifié. |
List.Map Applique une fonction sur tous les éléments d’une liste, générant une nouvelle liste à partir des résultats |
List.Reverse Crée une liste contenant les éléments de la liste indiquée, mais dans l’ordre inverse |
List.ReplaceItemAtIndex Remplacer un élément de la liste indiquée qui se trouve au niveau de l’index spécifié |
List.ShiftIndices Décale les index dans la liste vers la droite en fonction de la quantité indiquée |
List.TakeEveryNthItem Récupère les éléments de la liste indiquée aux index qui sont des multiples de la valeur indiquée, après le décalage indiqué. |
List.Transpose Permute les lignes et les colonnes d’une liste de listes. Si certaines lignes sont plus courtes que d’autres, des valeurs nulles sont insérées en tant qu’espaces réservés dans le réseau résultant afin qu’il soit toujours rectangulaire |
ACTIONS |
Si Instruction conditionnelle. Vérifie la valeur booléenne de l'entrée de test. Si l’entrée de test est True, le résultat génère la valeur True, sinon le résultat génère la valeur False. |
ACTIONS |
Math.Cos Trouve le cosinus d’un angle. |
Math.DegreesToRadians Convertit un angle en degrés en angle en radians. |
Math.Pow Élève un nombre à la puissance spécifiée. |
Math.RadiansToDegrees Convertit un angle en radians en angle en degrés. |
Math.RemapRange Ajuste l’intervalle d’une liste de nombres, tout en conservant le rapport de distribution. |
Math.Sin Détermine le sinus d’un angle. |
Formule Évalue les formules mathématiques. Utilise NCalc pour l’évaluation. Reportez-vous à la rubrique http://ncalc.codeplex.com |
Carte Mappe une valeur dans un intervalle d’entrée |
ACTIONS |
String.Concat Concatène plusieurs chaînes en une seule chaîne. |
String.Contains Détermine si la chaîne indiquée contient la sous-chaîne indiquée. |
String.Join Concatène plusieurs chaînes en une seule chaîne et insère le séparateur indiqué entre chaque chaîne jointe. |
String.Split Divise une chaîne unique en une liste de chaînes, les chaînes de séparation indiquées déterminant les divisions. |
String.ToNumber Convertit une chaîne en nombre entier ou double. |
CREER |
Circle.ByCenterPointRadius Crée un Circle à l'aide d'un point central d'entrée et un rayon dans le plan XY univers, avec l'univers Z standard. |
Circle.ByPlaneRadius Créer un Circle centré au niveau de l'origine du plan d'entrée (racine), dans le plan d'entrée, avec un rayon donné. |
CREER |
CoordinateSystem.ByOrigin Créer un CoordinateSystem avec une origine au point d’entrée, avec les axes X et Y définis en tant qu’axes X et Y SCG. |
CoordinateSystem.ByCyclindricalCoordinates Crée un CoordinateSystem en fonction des paramètres de coordonnées cylindriques spécifiés par rapport au système de coordonnées spécifié |
CREER |
Cuboid.ByLengths Permet de créer un nœud Cuboid centré au niveau de l’origine SCG, avec une largeur, une longueur et une hauteur. |
Cuboid.ByLengths (origine) Créer un Cuboid centré au point d'entrée, en fonction de la largeur, de la longueur et de la hauteur spécifiées. |
Cuboid.ByLengths (coordinateSystem) Permet de créer un nœud Cuboid centré au niveau de l’origine SCG, avec une largeur, une longueur et une hauteur. |
Cuboid.ByCorners Permet de créer un nœud Cuboid compris entre un point bas et un point haut. |
Cuboid.Length Permet de renvoyer les cotes d’entrée du nœud Cuboid, et NON les cotes réelles de l’espace univers. ** |
Cuboid.Width Permet de renvoyer les cotes d’entrée du nœud Cuboid, et NON les cotes réelles de l’espace univers. ** |
Cuboid.Height Permet de renvoyer les cotes d’entrée du nœud Cuboid, et NON les cotes réelles de l’espace univers. ** |
BoundingBox.ToCuboid Permet d’obtenir la zone de délimitation en tant que cuboïde solide. |
ACTIONS |
Curve.Extrude (distance) Extrude une Curve dans la direction du vecteur de la normale. |
Curve.PointAtParameter Obtenir un point sur la Curve à un paramètre spécifié entre StartParameter() et EndParameter(). |
ACTIONS |
Geometry.DistanceTo Obtenir la distance entre cette Geometry et une autre. |
Geometry.Explode Sépare les éléments composés ou non séparés dans leurs composants |
Geometry.ImportFromSAT Liste des géométries importées |
Geometry.Rotate (basePlane) Fait pivoter l’objet autour de l’origine et de la normale du plan en fonction d’un degré spécifié. |
Geometry.Translate Convertit tout type de géométrie selon la distance donnée dans la direction donnée. |
CREER |
Line.ByBestFitThroughPoints Crée une ligne représentant au mieux un diagramme de dispersion de points. |
Line.ByStartPointDirectionLength Créer une ligne droite partant du point, s’étendant dans la direction du vecteur en fonction de la longueur spécifiée. |
Line.ByStartPointEndPoint Crée une ligne droite entre deux points d’entrée. |
Line.ByTangency Créer une ligne tangente à la Curve d’entrée, située sur le point paramétrique de la Curve d’entrée. |
REQUETE |
Line.Direction Direction de la Curve. |
Créer |
NurbsCurve.ByControlPoints Crée une BSplineCurve à l’aide de points de contrôle explicites. |
NurbsCurve.ByPoints Créer une BSplineCurve par interpolation entre des points |
Créer |
NurbsSurface.ByControlPoints Créer une NurbsSurface en utilisant des points de contrôle explicites avec les degrés U et V indiqués. |
NurbsSurface.ByPoints Crée une NurbsSurface avec des points interpolés et des degrés U et V spécifiés. La surface résultante passera par tous les points. |
CREER |
Plane.ByOriginNormal Créer un plan centré au niveau du point d’origine, avec le vecteur de la normal d’entrée. |
Plane.XY Crée un plan dans l’univers XY |
CREER |
Point.ByCartesianCoordinates Former un point dans le système de coordonnées indiqué avec trois coordonnées cartésiennes |
Point.ByCoordinates (2d) Former un point dans le plan XY en fonction de deux coordonnées cartésiennes. Le composant Z est défini sur 0. |
Point.ByCoordinates (3d) Former un point en fonction de 3 coordonnées cartésiennes. |
Point.Origin Obtenir le point d’origine (0,0,0) |
ACTIONS |
Point.Add Ajouter un vecteur à un point. Il en va de même pour l’option Conversion (vecteur). |
REQUETE |
Point.X Obtenir le composant X d’un point |
Point.Y Obtenir le composant Y d’un point |
Point.Z Obtenir le composant Z d’un point |
CREER |
Polycurve.ByPoints Créer une polycourbe à partir d’une séquence de lignes connectant des points. Pour la courbe fermée, le dernier point doit être au même endroit que le point de départ. |
CREER |
Rectangle.ByWidthLength (Plane) Créer un rectangle centré au niveau de la racine du plan d'entrée, avec la largeur d'entrée (longueur de l'axe X du plan) et la longueur d'entrée (longueur de l'axe Y du plan). |
CREER |
Sphere.ByCenterPointRadius Créer une sphère solide centrée au niveau du point d’entrée, avec un rayon donné. |
CREER |
Surface.ByLoft Créer un nœud Surface par lissage entre les nœuds Curves de profil de coupe d’entrée |
Surface.ByPatch Créer un nœud Surface en remplissant l’intérieur d’un contour fermé défini par les nœuds Curves d’entrée. |
ACTIONS |
Surface.Offset Décaler la surface dans la direction de la normale de surface selon une distance spécifiée |
Surface.PointAtParameter Renvoyer le point avec les paramètres U et V indiqués. |
Surface.Thicken Épaissir la surface dans un solide, en réalisant une extrusion dans la direction des normales de la surface sur les deux côtés de la surface. |
CREER |
UV.ByCoordinates Créer un UV à partir de deux doubles. |
CREER |
Vector.ByCoordinates Former un vecteur à l’aide de 3 coordonnées euclidiennes |
Vector.XAxis Obtient le vecteur d’axe X canonique (1,0,0) |
Vector.YAxis Obtient le vecteur d’axe Y canonique (0,1,0) |
Vector.ZAxis Obtient le vecteur d’axe Z canonique (0,0,1) |
ACTIONS |
Vector.Normalized Obtenir la version normalisée d’un vecteur |
CREER |
CoordinateSystem.ByOrigin Créer un CoordinateSystem avec une origine au point d’entrée, avec les axes X et Y définis en tant qu’axes X et Y SCG. |
CoordinateSystem.ByCyclindricalCoordinates Crée un CoordinateSystem en fonction des paramètres de coordonnées cylindriques spécifiés par rapport au système de coordonnées spécifié |
+ Addition |
- Soustraction |
* Multiplication |
/ Division |
% La division modulaire recherche le reste de la première entrée après la division par la deuxième entrée |
< Inférieur à |
> Supérieur à |
== L’égalité des deux valeurs est un test d’égalité. |
Couleur ARVB (Color.ByARGB) | A,R,G,B | color |
Alpha (Color.Alpha) | color | A |
Rouge (Color.Red) | color | R |
Vert (Color.Green) | color | G |
Bleu (Color.Blue) | color | B |
Composants (Color.Components) | color | A,R,G,B |
Teinte (Color.Hue) | color | Teinte |
Saturation (Color.Saturation) | color | Saturation |
Luminosité (Color.Brightness) | color | Luminosité |
Ajouter (+)
var[]…[], var[]…[]
var[]…[]
Soustraire (-)
var[]…[], var[]…[]
var[]…[]
Multiplier (*)
var[]…[], var[]…[]
var[]…[]
Diviser (/)
var[]…[], var[]…[]
var[]…[]
If (If)
test, true, false
résultat
Formula (IF(x,y,z))
x, y, z
résultat
Code Block ((x?y:z);)
x ? y, z
résultat
Dynamo offre de nombreuses fonctionnalités prêtes à l'emploi, stockées dans sa bibliothèque de nœuds. Les packages et nœuds personnalisés, quant à eux, constituent un excellent moyen d’étendre les fonctionnalités de Dynamo pour les adapter à vos habitudes de travail ou pour concevoir un graphique spécial que vous souhaitez partager avec la communauté.
Dynamo 2.0 introduit non seulement les nœuds précédemment abordés dans les dictionnaires, mais aussi les blocs de code.
Vous pouvez utiliser une syntaxe semblable à celle présentée ci-dessous ou des représentations de nœuds basées sur DesignScript.
Étant donné qu’un dictionnaire est un type d’objet dans Dynamo, nous pouvons lui appliquer les actions suivantes.
La gestion de ce type d’interactions est particulièrement utile lorsque vous associez des données Revit à des chaînes. Nous allons maintenant examiner certains cas d'utilisation de Revit.
Les nœuds personnalisés sont construits en imbriquant d'autres nœuds et nœuds personnalisés dans un "nœud personnalisé Dynamo", que vous pouvez comparer à un conteneur. Lorsque ce nœud conteneur est exécuté dans votre graphique, tous les éléments qu'il contient sont exécutés pour vous permettre de réutiliser et de partager une combinaison utile de nœuds.
Lorsque votre graphique contient plusieurs copies d'un nœud personnalisé, vous pouvez tous les mettre à jour en modifiant le nœud personnalisé de base. Cela vous permet de mettre à jour votre graphique de manière fluide en l'adaptant aux modifications susceptibles de se produire dans le workflow ou la conception.
La meilleure fonctionnalité des nœuds personnalisés est sans doute leur capacité de partage de travail. Si un "utilisateur avancé" crée un graphique Dynamo complexe et le transmet à un concepteur qui débute avec Dynamo, il peut condenser le graphique en ne gardant que l'essentiel pour l'interaction. Le nœud personnalisé peut être ouvert pour modifier le graphique interne, mais le "conteneur" peut rester simple. Avec ce processus, les nœuds personnalisés permettent aux utilisateurs de Dynamo de concevoir un graphique propre et intuitif.
Il existe de nombreuses façons de créer des nœuds personnalisés dans Dynamo. Dans les exemples de ce chapitre, vous allez créer des nœuds personnalisés directement à partir de l’interface utilisateur de Dynamo. Si vous êtes programmeur et que vous souhaitez utiliser le formatage C# ou Zero Touch, vous pouvez consulter cette page sur le wiki Dynamo pour des informations plus approfondies.
Passez maintenant à l'environnement de nœud personnalisé et créez un nœud simple pour calculer un pourcentage. L'environnement de nœud personnalisé est différent de l'environnement graphique Dynamo, mais l'interaction est similaire. Cela étant dit, vous allez maintenant créer votre premier nœud personnalisé.
Pour créer un nœud personnalisé à partir de zéro, lancez Dynamo et choisissez Nœud personnalisé, ou tapez Ctrl + Maj + N dans la zone de dessin.
Ajoutez un nom, une description et une catégorie dans la boîte de dialogue Propriétés du nœud personnalisé.
Nom : Pourcentage
Description : Calcule le pourcentage d’une valeur par rapport à une autre.
Catégorie : Math.Functions
Une zone de dessin s’ouvre avec un arrière-plan jaune, indiquant que vous travaillez dans un nœud personnalisé. Dans cette zone de dessin, vous avez accès à tous les nœuds Dynamo de base, ainsi qu'aux nœuds Input et Output, qui définissent le flux de données entrant et sortant du nœud personnalisé. Ils se trouvent sous Input > Basic.
Input : les nœuds Input créent des ports d’entrée sur le nœud personnalisé. La syntaxe d’un nœud d’entrée est nom_entrée : typededonnées = valeur_défaut (facultatif).
Outputs: semblables aux entrées, elles créent et nomment des ports de sortie sur le nœud personnalisé. Ajoutez un commentaire personnalisé aux ports d’entrée et de sortie pour indiquer les types d’entrée et de sortie. Cette opération est décrite plus en détail dans la section Création de nœuds personnalisés.
Vous pouvez enregistrer ce nœud personnalisé en tant que fichier .dyf (par opposition au fichier .dyn standard) et il sera automatiquement ajouté à votre session et aux sessions ultérieures. Le nœud personnalisé se trouve dans votre bibliothèque, dans la section Compléments.
Maintenant que vous avez créé votre premier nœud personnalisé, les sections suivantes approfondiront la fonctionnalité des nœuds personnalisés et la publication de workflows génériques. Dans la section suivante, vous allez développer un nœud personnalisé qui transfère la géométrie d'une surface à une autre.
Les dictionnaires représentent un ensemble de données liées à un autre élément de données appelé clé. Les dictionnaires permettent de rechercher, de supprimer et d'insérer des données dans une collection.
En fait, nous pouvons considérer un dictionnaire comme une manière vraiment intelligente de rechercher quelque chose.
Bien que la fonctionnalité de dictionnaire soit disponible dans Dynamo depuis un certain temps déjà, Dynamo 2.0 propose une nouvelle méthode de gestion de ce type de données.
Image originale avec l’autorisation de : sixtysecondrevit.com
Dynamo propose de nombreux nœuds clés pour une large gamme de tâches de programmation visuelle. Parfois, la création de vos propres nœuds est une solution plus rapide, plus élégante ou plus facilement partageable. Ces nœuds peuvent être réutilisés dans différents projets, ils rendent vos graphiques plus clairs et plus propres, et ils peuvent être transférés vers le gestionnaire de packages et partagés avec la communauté Dynamo mondiale.
Dynamo 2.0 introduit le concept de séparation du type de données de dictionnaire du type de données de liste. Ce changement peut entraîner des modifications importantes de la façon dont vous créez et utilisez les données dans vos workflows. Avant la version 2.0, les dictionnaires et les listes étaient combinés en tant que type de données. En résumé, les listes étaient en fait des dictionnaires avec des clés d’entier.
Un dictionnaire est un type de données composé d’un ensemble de paires clé-valeur, où chaque clé est unique dans chaque ensemble. Un dictionnaire n’a pas d’ordre et vous pouvez, en fait, rechercher des éléments à l’aide d’une clé au lieu d’une valeur d’index, comme dans une liste. Dans Dynamo 2.0, les clés peuvent uniquement être des chaînes.
Une liste est un type de données composé d’un ensemble de valeurs ordonnées. Dans Dynamo, les listes utilisent des entiers comme valeurs d’index.
La séparation des dictionnaires et des listes place les dictionnaires comme citoyens de première classe que vous pouvez utiliser pour stocker et rechercher rapidement et facilement des valeurs, sans avoir à mémoriser une valeur d’index ou à maintenir une structure de listes stricte tout au long de votre workflow. Lors des tests utilisateur, nous avons constaté une réduction significative de la taille du graphique lorsque les dictionnaires étaient utilisés à la place de plusieurs nœuds GetItemAtIndex
.
Des modifications de syntaxe ont été apportées. Elles changent la façon dont vous allez initialiser et utiliser les dictionnaires et les listes dans les blocs de code.
Les dictionnaires utilisent la syntaxe suivante : {key:value}
Les listes utilisent la syntaxe suivante : [value,value,value]
De nouveaux nœuds ont été introduits dans la bibliothèque pour vous aider à créer et à modifier les dictionnaires, ainsi qu’à leur envoyer des requêtes.
Les listes créées dans les nœuds Code Block v1.x seront automatiquement migrées au chargement du script vers la nouvelle syntaxe de liste qui utilise des crochets [ ]
au lieu des accolades { }
\
En informatique, les dictionnaires, comme les listes, sont des collections d’objets. Tandis que les listes suivent un ordre spécifique, les dictionnaires sont des ensembles non ordonnés. Ils ne dépendent pas des numéros séquentiels (index), mais utilisent des clés.
Dans l’image ci-dessous, nous présentons un cas d’utilisation potentiel d’un dictionnaire. Souvent, les dictionnaires servent à relier deux types de données qui ne possèdent pas de corrélation directe. Dans notre cas, nous connectons la version espagnole d’un mot à la version anglaise pour une recherche ultérieure.
Créez un dictionnaire pour relier les deux types de données.
Obtenez la valeur avec la clé donnée.
Avez-vous déjà voulu rechercher quelque chose dans Revit à partir d'un élément de données qu'il contient ?
Il y a des chances si vous avez procédé comme dans l’exemple suivant.
Dans l’image ci-dessous, vous allez rassembler toutes les pièces dans le modèle Revit, obtenir l’index de la pièce souhaitée (par numéro de pièce), puis sélectionner la pièce au niveau de l’index.
Rassemblez toutes les pièces du modèle.
Numéro de pièce à rechercher.
Obtenez le numéro de chambre et trouvez l’index correspondant.
Obtenez la pièce au niveau de l’index.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Recréez maintenant cette idée à l'aide de dictionnaires. Vous devez d’abord rassembler toutes les pièces dans votre modèle Revit.
Choisissez la catégorie Revit avec laquelle vous voulez travailler (dans le cas présent, vous travaillez avec des pièces).
Vous indiquez à Dynamo de collecter tous ces éléments.
Ensuite, vous devez décider des clés que vous allez utiliser pour rechercher ces données. (Pour plus d’informations sur les clés, consultez la section Qu’est-ce qu’un dictionnaire ?).
Les données que vous utilisez sont les numéros de pièce.
Vous allez maintenant créer le dictionnaire avec les clés et les éléments donnés.
Le nœud Dictionary.ByKeysValues crée un dictionnaire en fonction des entrées appropriées.
Keys
doit être une chaîne, tandis quevalues
peut être une variété de types d’objets.
Enfin, vous pouvez extraire une pièce du dictionnaire avec son numéro de pièce.
String
est la clé que vous utilisez pour rechercher un objet dans le dictionnaire.Désormais, Dictionary.ValueAtKey obtiendra l’objet à partir du dictionnaire.
Cette logique de dictionnaire permet également de créer des dictionnaires contenant des objets groupés. Si vous voulez rechercher toutes les pièces à un niveau donné, vous pouvez modifier le graphique ci-dessus comme suit.
Au lieu d’utiliser le numéro de pièce comme clé, vous pouvez maintenant utiliser une valeur de paramètre (dans le cas présent, vous allez utiliser le niveau).
Maintenant, vous pouvez regrouper les pièces selon le niveau sur lequel elles résident.
Avec les éléments regroupés par niveau, vous pouvez désormais utiliser les clés partagées (clés uniques) comme clés de votre dictionnaire, ainsi que les listes de pièces comme éléments.
Enfin, en utilisant les niveaux du modèle Revit, vous pouvez rechercher les pièces qui résident sur ce niveau dans le dictionnaire.
Dictionary.ValueAtKey
prend le nom du niveau et renvoie les objets de pièce à ce niveau.
Les possibilités d’utilisation du dictionnaire sont infinies. La possibilité de lier vos données BIM dans Revit à l'élément lui-même offre une variété de cas d'utilisation.
Dynamo 2.0 présente une variété de nœuds de dictionnaire à notre disposition. Cela inclut les nœuds create, action et query.
1.Dictionary.ByKeysValues
crée un dictionnaire avec les valeurs et les clés fournies. (Le nombre d’entrées correspond à la liste d’entrées la plus courte possible)
Dictionary.Components
produit les composants du dictionnaire d’entrée. (Il s’agit de l’inverse du nœud create.)
Dictionary.RemoveKeys
crée un objet de dictionnaire dont les clés d’entrée ont été supprimées.
Dictionary.SetValueAtKeys
crée un dictionnaire basé sur les clés d’entrée et les valeurs pour remplacer la valeur en cours au niveau des clés correspondantes.
Dictionary.ValueAtKey
renvoie la valeur à la clé d’entrée.
Dictionary.Count
vous indique le nombre de paires clés-valeurs dans le dictionnaire.
Dictionary.Keys
renvoie les clés actuellement stockées dans le dictionnaire.
Dictionary.Values
renvoie les valeurs actuellement stockées dans le dictionnaire.
Le fait de pouvoir lier les données de manière globale avec les dictionnaires constitue une excellente solution de remplacement, par rapport à la méthode de travail classique avec les index et les listes.
Une fois que vous avez créé quelques nœuds personnalisés, l’étape suivante consiste à les organiser et à les publier au moyen de packages, une méthode pratique pour stocker et partager vos nœuds avec la communauté Dynamo.
Dynamo offre de nombreuses méthodes de création de package en vue d'un usage personnel ou d'un partage avec la communauté Dynamo. Dans l'étude de cas ci-dessous, vous allez découvrir comment un package est configuré en déconstruisant un package existant. Cette étude de cas s'appuie sur les leçons du chapitre précédent, fournissant un ensemble de nœuds personnalisés pour la géométrie de mappage, en fonction des coordonnées UV, d'une surface Dynamo à une autre.
Vous allez travailler avec un exemple de package qui illustre le mappage UV des points d’une surface à une autre. Vous avez déjà intégré les concepts de base de l’outil dans la section Création d’un nœud personnalisé de ce guide. Les fichiers ci-dessous montrent comment vous pouvez utiliser le concept du mappage UV et développer un jeu d’outils pour une bibliothèque publiable.
Dans cette image, un point d'une surface est mappé sur une autre surface à l'aide des coordonnées UV. Le package est fondé sur ce concept, mais avec une géométrie plus complexe.
Dans le chapitre précédent, vous avez étudié les méthodes de contruction de panneaux sur une surface dans Dynamo en fonction des courbes définies dans le plan XY. Cette étude de cas étend ces concepts pour davantage de cotes de géométrie. Vous allez installer ce package tel qu'il a été conçu pour montrer comment il a été développé. Dans la section suivante, vous allez découvrir comment ce package a été publié.
Dans Dynamo, cliquez sur Packages > Gestionnaire de package et recherchez le package « MapToSurface » (en un mot). Cliquez sur Installer pour lancer le téléchargement et ajouter le package à votre bibliothèque.
Une fois l’installation terminée, les nœuds personnalisés sont disponibles sous la section Compléments > DynamoPrimer.
Une fois le package installé, voyons comment il est configuré.
Le package créé utilise cinq nœuds personnalisés créés pour référence. Vous découvrirez ci-dessous le fonctionnement de chaque nœud. Certains nœuds personnalisés sont créés à partir d'autres nœuds personnalisés, et la disposition des graphiques permet aux autres utilisateurs de comprendre rapidement.
Il s'agit d'un package simple de cinq nœuds personnalisés. Les étapes ci-dessous présentent brièvement la configuration de chaque nœud personnalisé.
Il s’agit d’un nœud personnalisé de base, sur lequel tous les autres nœuds de mappage reposent. Autrement dit, le nœud mappe un point à partir d'une coordonnée UV de la surface source vers l'emplacement de la coordonnée UV de la surface cible. Étant donné que les points constituent la géométrie la plus basique à partir de laquelle une géométrie plus complexe est créée, vous pouvez utiliser cette logique pour mapper une géométrie 2D, voire 3D, d’une surface à une autre.
La logique d’extension des points mappés de la géométrie 1D à la géométrie 2D est simplement présentée ici avec des polygones. Le nœud « PointsToSurface » est imbriqué dans ce nœud personnalisé. De cette manière, vous pouvez mapper les points de chaque polygone sur la surface, puis régénérer le polygone à partir de ces points mappés. En conservant la structure de données appropriée (une liste de listes de points), vous pouvez conserver les polygones séparés une fois réduits à un ensemble de points.
La même logique s’applique ici, ainsi que dans le nœud « PolygonsToSurface ». Au lieu de mapper des points polygonaux, vous allez mapper les points de contrôle d’une courbe NURBS.
OffsetPointsToSurface
Ce nœud devient un peu plus complexe, mais le concept est simple. Comme le nœud « PointsToSurface », ce nœud mappe des points d’une surface à une autre. Toutefois, il prend également en compte les points qui ne sont pas sur la surface source d’origine, extrait leur distance par rapport au paramètre UV le plus proche et mappe cette distance par rapport à la normale de surface cible au niveau des coordonnées UV correspondantes. Regardez les fichiers d’exemple pour comprendre.
Il s’agit d’un nœud simple qui crée une surface paramétrique à mapper de la grille source à une surface ondulée dans les fichiers d’exemple.
Les fichiers d’exemple se trouvent dans le dossier racine du package. Cliquez sur Gestionnaire de package > onglet Packages installés.
En regard de MapToSurface, cliquez sur le menu des trois points verticaux > Afficher le répertoire racine.
Ensuite, ouvrez le dossier « extra », qui contient tous les fichiers du package qui ne sont pas des nœuds personnalisés. C’est là que sont stockés les fichiers d’exemple (s’ils existent) des packages Dynamo. Les captures d’écran ci-dessous décrivent les concepts présentés dans chaque fichier d’exemple.
Ce fichier d’exemple montre comment vous pouvez utiliser « PointsToSurface » pour créer des panneaux sur une surface en fonction d’une grille de rectangles. Ce processus vous paraît sûrement familier, car un workflow similaire est présenté dans le chapitre précédent.
À l’aide d’un workflow similaire, ce fichier d’exercice présente une configuration permettant de mapper des cercles (ou des polygones représentant des cercles) d’une surface à une autre. Cette option utilise le nœud PolygonsToSurface.
Ce fichier d’exemple ajoute de la complexité en exploitant le nœud « NurbsCrvToSurface ». La surface cible est décalée d'une distance donnée, et la courbe NURBS est mappée sur la surface cible d'origine et la surface décalée. À partir de là, les deux courbes mappées sont lissées pour créer une surface, qui est ensuite épaissie. Le solide qui en résulte comporte une ondulation représentative des normales de la surface cible.
Ce fichier d’exemple montre comment mapper une polysurface plissée entre une surface source et une surface cible. Les surfaces source et cible sont une surface rectangulaire qui s’étend sur la grille et une surface de révolution, respectivement.
Polysurface source mappée entre la surface source et la surface cible.
Puisque les nœuds personnalisés sont en mesure de mapper différents types de courbes, ce dernier fichier fait référence à un fichier SVG exporté à partir d’Illustrator et mappe les courbes importées avec une surface cible.
L’analyse de la syntaxe d’un fichier .svg permet de convertir les courbes au format .xml en polycourbes Dynamo.
Les courbes importées sont mappées avec une surface cible. Cela vous permet de concevoir de manière explicite (pointer-cliquer) une contruction de panneaux dans Illustrator, de l’importer dans Dynamo et de l’appliquer à une surface cible.
Dynamo propose plusieurs méthodes de création de nœuds personnalisés. Vous pouvez créer des nœuds personnalisés à partir de zéro, à partir d'un graphique existant ou de façon explicite en C#. Dans cette section, vous allez découvrir comment créer un nœud personnalisé dans l'interface utilisateur de Dynamo à partir d'un graphique existant. Cette méthode est idéale pour nettoyer l'espace de travail, ainsi que pour regrouper une séquence de nœuds à réutiliser ailleurs.
Dans l'image ci-dessous, un point d'une surface est mappé sur une autre surface à l'aide des coordonnées UV. Ce concept va vous permettre de créer une surface de panneaux qui référence des courbes dans le plan XY. Dans le cadre de la construction de panneaux, vous allez créer ici des panneaux quadrilatéraux. En utilisant la même logique, vous pouvez créer un grand nombre de panneaux avec le mappage UV. C’est une excellente opportunité pour le développement de nœuds personnalisés, car vous pourrez répéter un processus similaire plus facilement dans ce graphique ou dans d’autres workflows Dynamo.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Commencez par créer un graphique à imbriquer dans un nœud personnalisé. Dans cet exemple, vous allez créer un graphique qui mappe des polygones d'une surface de base vers une surface cible, à l'aide de coordonnées UV. Ce processus de mappage UV est fréquemment utilisé, ce qui en fait un bon candidat pour un nœud personnalisé. Pour plus d’informations sur les surfaces et l’espace UV, reportez-vous à la page Surface. Le graphique complet est UVmapping_Custom-Node.dyn à partir du fichier .zip téléchargé ci-dessus.
Code Block : utilisez cette ligne pour créer une plage de 10 nombres entre -45 et 45
45..45..#10;
Point.ByCoordinates : connectez la sortie du nœud Code Block aux entrées « x » et « y » et définissez la liaison sur Référence croisée. Vous devez maintenant avoir une grille de points.
Plane.ByOriginNormal : connectez la sortie « Point » à l’entrée « origin » pour créer un plan au niveau de chacun des points. Le vecteur normal par défaut de (0,0,1) est utilisé.
Rectangle.ByWidthLength : connectez les plans de l’étape précédente à l’entrée « plan », puis utilisez un nœud Code Block avec une valeur de 10 pour spécifier la largeur et la longueur.
Vous devez maintenant voir une grille de rectangles. Mappez ces rectangles sur une surface cible à l’aide des coordonnées UV.
Polygon.Points : connectez la sortie du nœud Rectangle.ByWidthLength de l’étape précédente à l’entrée « polygon » pour extraire les points de coin de chaque rectangle. Il s’agit des points que vous allez mapper sur la surface cible.
Rectangle.ByWidthLength : utilisez un nœud Code Block avec une valeur de 100 pour spécifier la largeur et la longueur d’un rectangle. Il s’agit de la limite de la surface de base.
Surface.ByPatch : connectez le nœud Rectangle.ByWidthLength de l’étape précédente à l’entrée « closedCurve » pour créer une surface de base.
Surface.UVParameterAtPoint : connectez la sortie « Point » du nœud Polygon.Points et la sortie « Surface » du nœud Surface.ByPatch pour renvoyer le paramètre UV à chaque point.
Maintenant que vous avez une surface de base et un ensemble de coordonnées UV, importez une surface cible et mappez les points entre les surfaces.
File Path : sélectionnez le chemin d’accès au fichier de la surface à importer. Le type de fichier doit être .SAT. Cliquez sur le bouton « Parcourir… » et accédez au fichier UVmapping_srf.sat à partir du fichier .zip téléchargé ci-dessus.
Geometry.ImportFromSAT : connectez le chemin d’accès au fichier pour importer la surface. Vous devez voir la surface importée dans l’aperçu de la géométrie.
UV : connectez la sortie du paramètre UV à un nœud UV.U et à un nœud UV.V.
Surface.PointAtParameter : connectez la surface importée ainsi que les coordonnées u et v. Vous devez maintenant voir une grille de points 3D sur la surface cible.
La dernière étape consiste à utiliser les points 3D pour construire des corrections de surface rectangulaires.
PolyCurve.ByPoints : connectez les points de la surface pour construire une polycourbe à travers les points.
Boolean : ajoutez un nœud Boolean à l’espace de travail, connectez-le à l’entrée « connectLastToFirst » et sélectionnez True pour fermer les polycourbes. Vous devez maintenant voir des rectangles mappés sur la surface.
Surface.ByPatch : connectez les polycourbes à l’entrée « closedCurve » pour construire des corrections de surface.
Sélectionnez les nœuds à imbriquer dans un nœud personnalisé, en choisissant les entrées et les sorties de votre nœud. Étant donné que votre nœud personnalisé doit être aussi flexible que possible, il doit être en mesure de mapper des polygones, pas seulement des rectangles.
Sélectionnez les nœuds suivants (en commençant par le nœud Polygon.Points), cliquez avec le bouton droit de la souris sur l’espace de travail et choisissez « Créer un nœud personnalisé ».
Dans la boîte de dialogue Propriétés du nœud personnalisé, attribuez un nom, une description et une catégorie au nœud personnalisé.
Nom : MapPolygonsToSurface
Description : mapper le ou les polygones d’une surface de base à une surface cible
Catégorie des packages complémentaires : Geometry.Curve
Le nœud personnalisé a considérablement nettoyé l'espace de travail. Notez que les entrées et les sorties ont été nommées en fonction des nœuds d'origine. Modifiez le nœud personnalisé pour rendre les noms plus descriptifs.
Cliquez deux fois sur le nœud personnalisé pour le modifier. Un espace de travail à l’arrière-plan jaune représentant l’intérieur du nœud s’affiche.
Entrées : remplacez les noms d’entrée par baseSurface et targetSurface.
Sorties : ajoutez une sortie supplémentaire pour les polygones mappés.
Enregistrez le nœud personnalisé et revenez à l’espace de travail de base. Notez que le nœud MapPolygonsToSurface reflète les modifications apportées.
Vous pouvez également renforcer la robustesse du nœud personnalisé en ajoutant des commentaires personnalisés. Les commentaires peuvent vous aider à indiquer les types d’entrée et de sortie ou à expliquer la fonctionnalité du nœud. Des commentaires s'affichent lorsque l'utilisateur place le curseur sur une entrée ou une sortie d'un nœud personnalisé.
Cliquez deux fois sur le nœud personnalisé pour le modifier. Cette action permet de rouvrir l’espace de travail à l’arrière-plan jaune.
Commencez par modifier le bloc de code Input. Pour commencer un commentaire, saisissez « // » suivi du texte du commentaire. Tapez tout ce qui peut aider à clarifier le nœud : ici, c’est la surface cible qui est décrite.
Définissez également la valeur par défaut pour inputSurface en définissant le type d’entrée sur une valeur équivalente. Ici, la valeur par défaut est définie sur le jeu Surface.ByPatch d’origine.
Vous pouvez également appliquer les commentaires aux sorties.
Modifiez le texte dans le bloc de code Output. Saisissez « // » suivi du texte du commentaire. Ici, une description plus détaillée est ajoutée pour clarifier les sorties de Polygons et de surfacePatches.
Placez le curseur sur les entrées de nœud personnalisé pour afficher les commentaires.
Étant donné que la valeur par défaut est définie sur inputSurface, vous pouvez également exécuter la définition sans entrée de surface.
Le package Dynamo Mesh Toolkit fournit des outils permettant d'importer des maillages à partir de formats de fichiers externes, de créer un maillage à partir d'objets de géométrie Dynamo et de créer manuellement des maillages à partir de leurs sommets et index. La bibliothèque fournit également des outils permettant de modifier et de réparer les maillages, ainsi que d’extraire des sections horizontales à utiliser lors de la fabrication.
Le package Dynamo Mesh Toolkit s’inscrit dans le cadre des recherches en cours d’Autodesk sur les maillages, et il continuera à évoluer au cours des prochaines années. Attendez-vous à voir apparaître fréquemment de nouvelles méthodes applicables à ce package, et n'hésitez pas à faire parvenir à l'équipe de Dynamo vos commentaires, bogues et suggestions en vue d'intégrer de nouvelles fonctionnalités.
L'exercice ci-dessous présente certaines opérations de maillage de base à l'aide de Mesh Toolkit. Dans l'exercice, nous allons entrecouper un maillage avec une série de plans, une opération qui peut s'avérer coûteuse en ressources informatiques si elle est effectuée avec des solides. Contrairement à un solide, un maillage a une « résolution » établie et n’est pas défini sur un plan mathématique, mais topologique. Cette résolution peut être définie sur la base de la tâche en cours. Pour plus d’informations sur les relations entre les maillages et les solides, reportez-vous au chapitre Géométrie pour la conception informatique de ce guide. Pour en savoir plus sur le package Mesh Toolkit, vous pouvez consulter la page wiki de Dynamo. Nous allons aborder le package dans l’exercice ci-dessous.
Dans Dynamo, allez dans Packages > Gestionnaire de package... dans la barre de menu supérieure. Dans le champ de recherche, tapez MeshToolkit, en un mot. Cliquez sur Installer et confirmez pour lancer le téléchargement. C’est aussi simple que ça !
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans cet exemple, nous allons examiner le nœud Intersect dans Mesh Toolkit. Nous allons importer un maillage et l'entrecouper avec une série de plans d'entrée pour créer des sections. Il s’agit du point de départ pour préparer le modèle pour la fabrication sur un découpeur au laser, une machine de coupe à jet d’eau ou une fraiseuse commandée par ordinateur.
Commencez par ouvrir Mesh-Toolkit_Intersect-Mesh.dyn dans Dynamo.
Chemin d’accès au fichier : recherchez le fichier de maillage à importer (stanford_bunny_tri.obj). Les types de fichiers pris en charge sont .mix et .obj.
Mesh.ImportFile : associez le chemin d’accès au fichier pour importer le maillage.
Point.ByCoordinates : crée un point. Il s’agit du centre d’un arc.
Arc.ByCenterPointRadiusAngle : crée un arc autour du point. Cette courbe sera utilisée pour positionner une série de plans. __ Les paramètres sont les suivants : __
radius: 40, startAngle: -90, endAngle:0
Créez une série de plans orientés le long de l’arc.
Code Block : créez 25 nombres compris entre 0 et 1.
Curve.PointAtParameter : connectez l’arc à l’entrée « curve » et le bloc de code de sortie à l’entrée « param » pour extraire une série de points le long de la courbe.
Curve.TangentAtParameter : connectez les mêmes entrées que le nœud précédent.
Plan.ByOriginNormal : connectez les points à l’entrée « origin » et les vecteurs à l’entrée « normal » pour créer une série de plans à chaque point.
Vous allez ensuite utiliser ces plans pour entrecouper le maillage.
Mesh.Intersect : entrecoupez les plans avec le maillage importé, ce qui crée une série de contours de polycourbe. Cliquez avec le bouton droit de la souris sur Nœud et définissez la liaison sur la plus longue.
PolyCurve.Curves : divisez les polycourbes en fragments de courbe.
Curve.EndPoint : extrayez les points de fin de chaque courbe.
NurbsCurve.ByPoints : utilisez les points pour construire une courbe Nurbs. Utilisez un nœud booléen défini sur Vrai (True) pour fermer les courbes.
Avant de continuer, désactivez l’aperçu de certains nœuds, tels que Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal et Arc.ByCenterPointRadiusAngle, pour mieux voir le résultat.
Surface.ByPatch : créez des corrections de surface pour chaque contour afin de créer des « sections » du maillage.
Ajoutez un deuxième jeu de sections pour un effet gaufré/alvéolé.
Vous avez peut-être remarqué que les opérations d’intersection sont calculées plus rapidement avec un maillage plutôt qu’avec un solide comparable. Les workflows tels que ceux présentés dans cet exercice se prêtent bien à l'utilisation de maillages.
Dynamo offre un grand nombre de fonctionnalités prêtes à l’emploi et dispose également d’une bibliothèque de packages complète qui permet d’étendre considérablement les capacités de Dynamo. Un package est un ensemble de nœuds personnalisés ou de fonctionnalités supplémentaires. Le gestionnaire de package Dynamo est un portail permettant à la communauté de télécharger tout package publié en ligne. Ces jeux d’outils sont développés par des tiers afin d’étendre les fonctionnalités clés de Dynamo, accessibles à tous, et prêts à être téléchargés en un clic.
Un projet Open Source comme Dynamo s’appuie sur ce type d’implication de la communauté. Avec ses développeurs tiers dédiés, Dynamo peut étendre sa portée aux workflows dans différents secteurs d’activité. Par conséquent, l'équipe de Dynamo a entrepris de rationaliser le développement et la publication des packages (sujets abordés plus en détail dans les sections suivantes).
La méthode la plus simple pour installer un package consiste à utiliser l’option de menu Packages de l’interface Dynamo. Passez à présent au vif du sujet et installez un package. Dans cet exemple rapide, vous allez installer un package très utilisé pour créer des panneaux quadrilatéraux sur une grille.
Dans Dynamo, accédez à Packages > Gestionnaire de package...
Dans la barre de recherche, recherchez « quadrilatères à partir de la grille rectangulaire ». Au bout de quelques instants, l'ensemble des packages correspondants à cette demande de recherche apparaissent. Sélectionnez le premier package avec le nom correspondant.
Cliquez sur Installer pour ajouter ce package à votre bibliothèque, puis acceptez la confirmation. Terminé !
Vous avez maintenant un autre groupe appelé « buildz » dans la bibliothèque Dynamo. Son nom fait référence au développeur du package. Le nœud personnalisé est placé dans ce groupe. Vous pouvez commencer à l’utiliser immédiatement.
Utilisez un nœud Code Blockpour définir rapidement une grille rectangulaire, générer le résultat sur un nœud Polygon.ByPoints, puis sur un nœud Surface.ByPatch pour afficher la liste des panneaux rectangulaires que vous venez de créer.
L'exemple ci-dessus est axé sur un package avec un nœud personnalisé, mais vous utilisez le même processus pour télécharger des packages avec plusieurs nœuds personnalisés et des fichiers de données de prise en charge. Démontrez-le maintenant avec un package plus complet : Dynamo Unfold.
Comme dans l’exemple ci-dessus, commencez par sélectionner Packages > Gestionnaire de package...
Cette fois, recherchez « DynamoUnfold », en un mot. Lorsque les packages s’affichent, cliquez sur Installer pour ajouter Dynamo Unfold à votre bibliothèque Dynamo.
La bibliothèque Dynamo contient un groupe DynamoUnfold avec plusieurs catégories et nœuds personnalisés.
Examinez maintenant la structure de fichiers du package.
Tout d’abord, accédez à Packages > Gestionnaire de package > Packages installés.
Cliquez ensuite sur Afficher le répertoire racine pour ouvrir le dossier racine de ce package.
Cette action permet d’accéder au répertoire racine du package. Il contient trois dossiers et un fichier.
Le dossier bin contient les fichiers .dll. Ce package Dynamo a été développé à l’aide de la commande Zero Touch, de sorte que les nœuds personnalisés sont conservés dans ce dossier.
Le dossier dyf contient les nœuds personnalisés. Ce package n’a pas été développé à l’aide de nœuds personnalisés Dynamo. Ce dossier est donc vide pour ce package.
Le dossier supplémentaire contient tous les fichiers supplémentaires, y compris les fichiers d'exemple.
Le fichier pkg est un fichier texte de base qui définit les paramètres du package. Pour l'instant, vous pouvez l'ignorer.
Lorsque vous ouvrez le dossier "extra", vous découvrez la présence de fichiers d'exemple téléchargés lors de l'installation. Les packages ne possèdent pas tous des fichiers d'exemple, mais lorsque ces derniers font partie d'un package, ils sont enregistrés ici.
Ouvrez « SphereUnfold ».
Après avoir ouvert le fichier et cliqué sur « Exécuter » dans le solveur, vous obtenez une sphère dépliée. Les fichiers d’exemple comme ceux-ci sont utiles pour apprendre à utiliser un nouveau package Dynamo.
Dans le gestionnaire de package, vous pouvez rechercher des packages à l’aide des options de tri et de filtrage de l’onglet Rechercher des packages. Plusieurs filtres sont disponibles pour le programme hôte, l’état (nouveau, obsolète ou non obsolète) et si le package possède des dépendances.
En triant les packages, vous pouvez identifier les packages les mieux notés ou les plus téléchargés, ou trouver les packages ayant fait l’objet de mises à jour récentes.
Vous pouvez également obtenir plus de détails sur chaque paquet en cliquant sur Afficher les détails. Cela ouvre un panneau latéral dans le Gestionnaire de package, où vous pouvez trouver des informations telles que la version et les dépendances, l’URL du site Web ou du dépôt, les informations sur la licence, etc.
Une autre façon de découvrir les packages Dynamo est d’explorer le site Web du gestionnaire de package Dynamo. Vous y trouverez des statistiques sur les packages et les classements des auteurs. Vous pouvez également télécharger les fichiers de package à partir du gestionnaire de package Dynamo, mais le processus de Dynamo est plus simple.
Si vous souhaitez voir où vos fichiers de package sont conservés, dans la barre de navigation supérieure, cliquez sur Dynamo > Préférences > Paramètres de package > Emplacement des fichiers de nœuds et de packages. Vous pouvez trouver le répertoire de votre dossier racine actuel à partir d’ici.
Par défaut, les packages sont installés dans un emplacement semblable à celui du dossier suivant : C:/Utilisateurs/[nom d’utilisateur]/AppData/Itinérance/Dynamo/[Version Dynamo].
La communauté Dynamo est en constante évolution. Explorez le gestionnaire de package Dynamo de temps en temps : vous y découvrirez de nouvelles avancées intéressantes. Dans les sections suivantes, vous allez examiner les packages de manière plus approfondie, du point de vue de l'utilisateur final à la création de votre propre package Dynamo.
Vous venez de créer un nœud personnalisé et de l'appliquer à un processus spécifique dans le graphique Dynamo. Vous souhaitez en outre conserver ce nœud dans la bibliothèque Dynamo pour établir des références à d'autres graphiques. Pour ce faire, vous allez publier le nœud localement. Cette procédure est semblable à celle utilisée pour publier un package, que vous verrez plus en détail dans le chapitre suivant.
Avec la publication locale, le nœud sera accessible dans votre bibliothèque Dynamo lorsque vous ouvrirez une nouvelle session. Si le nœud n’est pas publié, un graphique Dynamo qui fait référence à un nœud personnalisé doit également comporter ce nœud personnalisé dans son dossier (ou le nœud personnalisé doit être importé dans Dynamo à l’aide de l’option Fichier > Importer une bibliothèque).
Vous pouvez publier des nœuds et des packages personnalisés à partir de Dynamo Sandbox dans la version 2.17 et les versions ultérieures, tant qu’ils n’ont pas de dépendances de l’API hôte. Dans les versions plus anciennes, la publication de nœuds et de packages personnalisés n’est possible que dans Dynamo for Revit et Dynamo for Civil 3D.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Nous allons avancer à l'aide du nœud personnalisé que vous avez créé dans la section précédente. Une fois le nœud PointsToSurface personnalisé ouvert, le graphique s’affiche dans l’éditeur de nœuds personnalisés Dynamo. Vous pouvez également ouvrir un nœud personnalisé en double-cliquant dessus dans l’éditeur graphique Dynamo.
Pour publier un nœud personnalisé localement, cliquez simplement avec le bouton droit de la souris sur la zone de dessin et choisissez « Publier ce nœud personnalisé… ».
Remplissez les informations pertinentes comme dans l’image ci-dessus et choisissez « Publier localement » Notez que le champ Groupe définit l’élément principal accessible à partir du menu Dynamo.
Choisissez un dossier pour héberger tous les nœuds personnalisés que vous envisagez de publier localement. Dynamo consultera ce dossier à chaque chargement. Par conséquent, assurez-vous que le dossier réside dans un emplacement permanent. Accédez à ce dossier et choisissez « Sélectionner un dossier ». Votre nœud Dynamo est désormais publié localement et restera dans votre bibliothèque Dynamo chaque fois que vous chargez le programme.
Pour vérifier l’emplacement du dossier de nœud personnalisé, accédez à Dynamo > Préférences > Paramètres de package > Chemins d’accès de nœud et de package
Cette fenêtre contient une liste de chemins.
Documents\DynamoCustomNodes… fait référence à l’emplacement des nœuds personnalisés publiés localement.
AppData\Roaming\Dynamo… fait référence à l’emplacement par défaut des packages Dynamo installés en ligne.
Vous pouvez déplacer le chemin du dossier local vers le bas dans l’ordre de la liste (en cliquant sur la flèche vers le bas située à gauche des noms de chemin). Le dossier racine est le chemin par défaut des installations de package. Ainsi, en conservant le chemin d'installation par défaut du package Dynamo comme dossier par défaut, les packages en ligne sont séparés des nœuds publiés localement.
Nous avons changé l’ordre des noms de chemin pour que le chemin par défaut de Dynamo devienne l’emplacement d’installation du package.
En accédant à ce dossier local, vous trouvez le nœud personnalisé d’origine dans le dossier « .dyf », qui est l’extension d’un fichier de nœud personnalisé Dynamo. Vous pouvez modifier le fichier dans ce dossier et le nœud sera mis à jour dans l’interface utilisateur. Vous pouvez également ajouter des nœuds au dossier DynamoCustomNode principal et Dynamo les ajoutera à votre bibliothèque au redémarrage.
Dynamo se charge désormais à chaque fois avec « PointsToSurface » dans le groupe « DynamoPrimer » de votre bibliothèque Dynamo.
Dynamo pour Revit étend la modélisation des données du bâtiment à l’environnement de données et de logique d’un éditeur d’algorithmes graphiques. Sa flexibilité, associée à une base de données Revit robuste, offre une nouvelle perspective pour le BIM.
Ce chapitre se concentre sur les workflows Dynamo pour le BIM. Les coupes sont principalement basées sur des exercices, car le passage immédiat à un projet est le meilleur moyen de se familiariser avec un éditeur d'algorithmes graphiques pour le BIM. Mais d'abord, voici les débuts du programme.
Comme Revit et Dynamo évoluent encore, il se peut que vous constatiez que la version de Revit sur laquelle vous travaillez n'est pas compatible avec la version de Dynamo pour Revit que vous avez installée sur votre ordinateur. Les versions de Dynamo pour Revit compatibles avec Revit sont répertoriées ci-dessous.
Avec une équipe de développeurs dédiée et une communauté passionnée, le projet est loin de ses débuts timides.
Dynamo a été créé à l'origine pour rationaliser les workflows AEC dans Revit. Bien que Revit crée une base de données solide pour chaque projet, il peut être difficile pour un utilisateur lambda d'accéder à ces informations en dehors des contraintes de l'interface. Revit héberge une API (Application Program Interface) complète, permettant aux développeurs tiers de créer des outils personnalisés. Les programmeurs utilisent cette API depuis des années, mais les scripts basés sur du texte ne sont pas accessibles à tous. Dynamo vise à démocratiser les données Revit via un éditeur d'algorithmes graphiques abordable.
En utilisant les principaux nœuds Dynamo conjointement avec des nœuds Revit personnalisés, un utilisateur peut considérablement étendre les workflows paramétriques pour l'interopérabilité, la documentation, l'analyse et la génération. Avec Dynamo, les workflows fastidieux peuvent être automatisés tandis que les explorations de conception peuvent se développer.
Dans un projet Revit ou un éditeur de familles, accédez à Compléments et cliquez sur Dynamo.*
*Dynamo s’exécute uniquement dans le fichier dans lequel il a été ouvert.
Lors de l’ouverture de Dynamo dans Revit, une nouvelle catégorie appelée Revit apparaît. Il s’agit d’un ajout complet à l’interface utilisateur qui offre des nœuds spécifiquement conçus pour les workflows Revit.*
*En utilisant la famille de nœuds propre à Revit, le graphique Dynamo fonctionne uniquement lorsqu’il est ouvert dans Dynamo pour Revit. Si un graphique Dynamo pour Revit est ouvert dans Dynamo Sandbox par exemple, les nœuds Revit sont manquants.
Revit étant une plate-forme qui fournit une gestion de projet robuste, les opérations paramétriques dans Dynamo peuvent être complexes et lentes à calculer. Si Dynamo prend du temps pour calculer des nœuds, vous pouvez utiliser la fonctionnalité de nœud « geler » pour interrompre l’exécution des opérations Revit lorsque vous développez votre graphique.
Depuis que Dynamo a été créé pour le secteur AEC, sa vaste communauté dynamique est une excellente ressource pour apprendre et créer des liens avec des experts du secteur. La communauté de Dynamo est constituée d'architectes, d'ingénieurs, de programmeurs et de concepteurs dont la passion commune est de partager ce qu'ils font.
Dynamo maintient également un blog actif. Lisez les articles récents pour en savoir plus sur les derniers développements.
La modification des paramètres de la documentation suit les leçons apprises dans les sections précédentes. Dans cette section, vous allez découvrir les paramètres de modification qui n'affectent pas les propriétés géométriques d'un élément, mais qui permettent de préparer un fichier Revit pour la documentation.
Dans l'exercice ci-dessous, vous allez utiliser un écart de base par rapport au nœud Plane pour créer une feuille Revit pour la documentation. Chaque panneau de la structure de toit définie de façon paramétrique possède une valeur d'écart différente. L'objectif est de définir l'intervalle de valeurs à l'aide de couleurs et en planifiant les points adaptatifs à transmettre à un consultant, un ingénieur ou un entrepreneur responsable de la façade.
L'écart par rapport au nœud Plane permet de calculer la distance à laquelle l'ensemble de quatre points varie par rapport au plan ajusté au mieux entre eux. Il s'agit d'une méthode simple et rapide pour étudier la constructibilité.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Commencez par utiliser le fichier Revit pour cette section (ou continuez à partir de la section précédente). Ce fichier contient un réseau de panneaux ETFE sur le toit. Faites référence à ces panneaux pour cet exercice.
Ajoutez un nœud Family Types à la zone de dessin et sélectionnez « ROOF-PANEL-4PT ».
Connectez ce nœud à un nœud de sélection All Elements of Family Type pour transférer tous les éléments de Revit dans Dynamo.
Recherchez l’emplacement des points adaptatifs pour chaque élément à l’aide du nœud AdaptiveComponent.Locations.
Créez un polygone à partir de ces quatre points avec le nœud Polygon.ByPoints. Vous avez maintenant une version abstraite du système à panneaux dans Dynamo sans avoir à importer la géométrie complète de l'élément Revit.
Calculez l'écart planaire grâce au nœud Polygon.PlaneDeviation.
Juste pour voir, comme dans l’exercice précédent, définissez le rapport d’ouverture de chaque panneau en fonction de son écart planaire.
Ajoutez un nœud Element.SetParameterByName à la zone de dessin et connectez les composants adaptatifs à l’entrée element. Connectez un nœud Code Block indiquant "Aperture Ratio" à l'entrée parameterName.
Vous ne pouvez pas connecter directement les résultats de l’écart à l’entrée value, car vous devez remapper les valeurs avec l’intervalle de paramètres.
A l’aide de Math.RemapRange, remappez les valeurs d’écart avec un domaine compris entre 0.15 et 0_._45 en saisissant
0.15; 0.45;
dans le nœud Code Bloc.Connectez ces résultats à l'entrée value de Element.SetParameterByName.
Dans Revit, vous pouvez donner un sens au changement d'ouverture sur la surface.
En zoomant, il apparaît plus clairement que les panneaux fermés sont orientés vers les coins de la surface. Les coins ouverts sont orientés vers le haut. Les coins représentent les zones de plus grand écart, tandis que le renflement présente logiquement une courbure minimale.
La définition du rapport d'ouverture n'indique pas clairement l'écart des panneaux sur le toit, et vous modifiez également la géométrie de l'élément réel. Imaginez que vous souhaitiez simplement étudier l'écart du point de vue de la faisabilité de la fabrication. Il conviendrait de colorer les panneaux en fonction de l'intervalle d'écart de la documentation. Pour ce faire, utilisez la série d’étapes ci-dessous et suivez un procédé très similaire à celui susmentionné.
Supprimez Element.SetParameterByName et ses nœuds d’entrée et ajoutez Element.OverrideColorInView.
Ajoutez un nœud Color Range à la zone de dessin et connectez-le à l'entrée color de Element.OverrideColorInView. Vous devez toujours connecter les valeurs d'écart à l'intervalle de couleurs pour créer le dégradé.
Placez le curseur sur l'entrée value. Vous pouvez voir que les valeurs d'entrée doivent être comprises entre 0 et 1 pour mapper une couleur avec chaque valeur. Vous devez remapper les valeurs d’écart avec cet intervalle.
À l’aide de Math.RemapRange, remappez les valeurs d’écart planaire sur un intervalle compris entre * 0* et 1 (remarque : vous pouvez utiliser le nœud "MapTo" pour définir également un domaine source).
Connectez les résultats à un nœud Color Range.
La sortie est un intervalle de couleurs, et non un intervalle de nombres.
Si vous avez défini le paramètre sur Manuel, cliquez sur Exécuter. À partir de ce point, vous devez être en mesure de choisir l'option Automatique.
Dans Revit, le dégradé est bien plus lisible, qui est représentatif de l'écart planaire basé sur l'intervalle de couleurs. Mais que faire si vous voulez personnaliser les couleurs ? Les valeurs d'écart minimal sont représentées en rouge, ce qui semble aller à contre-courant du résultat attendu. L'écart maximal doit être rouge, avec un écart minimal représenté par une couleur plus douce. Retournez dans Dynamo et corrigez le problème.
À l’aide d’un nœud Code Block, ajoutez deux nombres sur deux lignes différentes :
0;
et255;
.Pour créer une couleur rouge et une couleur bleue, connectez les valeurs appropriées à deux nœuds Color.ByARGB.
Créez une liste à partir de ces deux couleurs.
Connectez cette liste à l'entrée colors de Color Range et observez l'intervalle de couleurs personnalisé se mettre à jour.
Dans Revit, vous pouvez désormais mieux comprendre les zones d'écart maximal dans les coins. Rappelez-vous que ce nœud permet de remplacer une couleur dans une vue. Il serait donc utile si vous aviez une feuille particulière dans le jeu de dessins, axée sur un type particulier d’analyse.
Dans Revit, sélectionnez un panneau ETFE. Quatre paramètres d'occurrence sont disponibles : XYZ1, XYZ2, XYZ3 et XYZ4. Ils sont tous vides après leur création. Il s'agit de paramètres basés sur du texte et des valeurs requises. Utilisez Dynamo pour écrire les emplacements de points adaptatifs sur chaque paramètre. Cela permet d’assurer l’interopérabilité si la géométrie doit être envoyée à un ingénieur consultant en façade.
Voici une feuille d’exemple qui contient une nomenclature volumineuse et vide. Les paramètres XYZ sont des paramètres partagés dans le fichier Revit, ce qui vous permet de les ajouter à la nomenclature.
En zoomant, les paramètres XYZ restent à remplir. Les deux premiers paramètres sont pris en charge par Revit.
L’écriture de ces valeurs requiert une opération de liste complexe. Le graphique lui-même est simple, mais les concepts sont très élaborés à partir du mappage de liste, comme décrit dans le chapitre de liste.
Sélectionnez tous les composants adaptatifs à l’aide de deux nœuds.
Extrayez l'emplacement de chaque point à l'aide de AdaptiveComponent.Locations.
Convertissez ces points en chaînes. N'oubliez pas que le paramètre est basé sur du texte. Vous devez donc saisir le type de données correct.
Créez une liste des quatre chaînes qui définissent les paramètres à modifier : XYZ1, XYZ2, XYZ3 et XYZ4.
Connectez cette liste à l'entrée parameterName de Element.SetParameterByName.
Connectez Element.SetParameterByName à l'entrée combinator de List.Combine. Connectez les composants adaptatifs à list1. Connectez l'élément String d'Object à list2.
Vous obtenez ici une correspondance de liste, car vous écrivez quatre valeurs pour chaque élément, ce qui crée une structure de données complexe. Le nœud List.Combine définit une opération d'un pas vers le bas dans la hiérarchie de données. Par conséquent, les entrées element et value de Element.SetParameterByName restent vides. List.Combine connecte les sous-listes de ses entrées aux entrées vides de Element.SetParameterByName, en fonction de l'ordre dans lequel elles sont connectées.
Lorsque vous sélectionnez un panneau dans Revit, il y a désormais des valeurs de chaîne pour chaque paramètre. En réalité, vous créeriez un format plus simple pour écrire un point (X, Y, Z). Cela peut être effectué avec des opérations de chaîne dans Dynamo, mais ce thème n’est pas abordé ici pour ne pas sortir du cadre de ce chapitre.
Vue de l’exemple de nomenclature avec des paramètres remplis.
Chaque panneau ETFE possède désormais les coordonnées XYZ écrites pour chaque point adaptatif, représentant les coins de chaque panneau pour la fabrication.
Une puissante fonction de Dynamo est la possibilité de modifier les paramètres d'un niveau paramétrique. Par exemple, un algorithme génératif ou les résultats d'une simulation peuvent être utilisés pour piloter les paramètres d'un réseau d'éléments. Ainsi, un jeu d'occurrences de la même famille peut posséder des propriétés personnalisées dans votre projet Revit.
Les paramètres d'occurence définissent l'ouverture des panneaux sur la surface du toit, allant d'un rapport d'ouverture de 0,1 à 0,4.
Les paramètres basés sur le type sont appliqués à chaque élément de la surface, car ils appartiennent au même type de famille. Le matériau de chaque panneau, par exemple, peut être piloté par un paramètre basé sur le type.
Si vous avez déjà configuré une famille Revit, n'oubliez pas d'affecter un type de paramètre (chaîne, nombre, cote, etc.) Veillez à utiliser le type de données correct lors de l'affectation de paramètres à partir de Dynamo.
Vous pouvez également utiliser Dynamo en combinaison avec les contraintes paramétriques définies dans les propriétés d'une famille Revit.
Pour rappel, Revit comprend des paramètres de type et des paramètres d'occurrence. Les deux peuvent être modifiés à partir de Dynamo, mais vous allez utiliser les paramètres d'occurrence dans l'exercice ci-dessous.
À partir de la version 0.8, Dynamo est fondamentalement sans unité. Dynamo reste ainsi un environnement de programmation visuel abstrait. Les nœuds Dynamo qui interagissent avec les cotes Revit font référence aux unités du projet Revit. Par exemple, si vous définissez un paramètre de longueur dans Revit à partir de Dynamo, le numéro de la valeur dans Dynamo correspondra aux unités par défaut dans le projet Revit. L'exercice ci-dessous utilise les mètres.
Pour une conversion rapide des unités, utilisez le nœud "Convert Between Units". Cet outil est pratique pour convertir des unités de longueur, de surface et de volume à la volée.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
L'exercice ci-dessous utilise les mètres.
Cet exercice est consacré à la modification d'éléments Revit sans effectuer d'opération géométrique dans Dynamo. Vous n'importez pas la géométrie Dynamo ici, mais modifiez simplement les paramètres dans un projet Revit. Il s'agit d'un exercice de base et pour les utilisateurs de Revit les plus avancés, notez qu'il s'agit de paramètres d'occurrence d'un volume, mais la même logique peut être appliquée à un réseau d'éléments à personnaliser à grande échelle. Cette opération est effectuée à l'aide du nœud "Element.SetParameterByName".
Commencez par utiliser l'exemple de fichier Revit pour cette section. Les éléments structurels et les fermes adaptatives de la section précédente ont été supprimés. Dans cet exercice, vous allez travailler sur une ossature paramétrique dans Revit et la manipuler dans Dynamo.
Lorsque vous sélectionnez le bâtiment dans Volume dans Revit, un réseau de paramètres d’occurrence s’affiche dans le groupe de fonctions Propriétés.
Dans Dynamo, vous pouvez récupérer les paramètres en sélectionnant l’élément de ciblage.
Sélectionnez le volume du bâtiment à l’aide du nœud « Select Model Element ».
Vous pouvez rechercher tous les paramètres de ce volume à l'aide du nœud "Element.Parameters". Cela inclut les paramètres de type et d’occurrence.
Faites référence au nœud Element. Parameters pour trouver les paramètres cibles. Vous pouvez également afficher le groupe de fonctions Propriétés de l'étape précédente pour choisir les noms de paramètres à modifier. Dans ce cas, vous recherchez les paramètres qui ont une incidence sur les grands déplacements géométriques sur le volume du bâtiment.
Modifiez l'élément Revit à l'aide du nœud Element.SetParameterByName.
Utilisez le nœud Code Block pour définir une liste de paramètres, avec des guillemets autour de chaque élément pour indiquer une chaîne. Vous pouvez aussi utiliser le nœud List.Create avec une série de nœuds "String" connectés à plusieurs entrées, mais le nœud Code Block est plus rapide et plus simple. Assurez-vous que la chaîne correspond au nom exact dans Revit, en respectant la casse :
{"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};
Vous devez également désigner des valeurs pour chaque paramètre. Ajoutez six "curseurs d'entier" à la zone de dessin et renommez-les en fonction du paramètre correspondant dans la liste. Définissez également les valeurs de chaque curseur tel qu'illustré ci-dessus. Dans l'ordre de haut en bas : 62,92,25,22,8,12
Définissez un autre bloc de code avec une liste de la même longueur que les noms des paramètres. Dans ce cas, nommez les variables (sans guillemets) qui créent des entrées pour le bloc de code. Connectez les curseurs à chaque entrée respective :
{bw,bl,bh,ao,io,lu};
Connectez le nœud Code Block à la valeur d'entrée "Element.SetParameterByName". Lorsque l'option Exécuter automatiquement est activée, les résultats sont automatiquement affichés.
* Cette démonstration fonctionne avec les paramètres d'occurrence, mais pas avec les paramètres de type.
Tout comme dans Revit, la plupart de ces paramètres sont dépendants les uns des autres. Il existe bien entendu des combinaisons dans lesquelles la géométrie peut être rompue. Vous pouvez résoudre ce problème avec des formules définies dans les propriétés des paramètres, ou bien configurer une logique similaire avec des opérations mathématiques dans Dynamo (ce défi supplémentaire est nécessaire si vous souhaitez développer l’exercice).
Cette combinaison donne une superbe nouvelle conception au volume du bâtiment : 100, 92, 100, 25, 13, 51
Découvrez maintenant comment modifier la façade à l’aide d’un processus similaire.
Copiez le graphique et concentrez-vous sur le vitrage de la façade qui va abriter le système de ferme. Dans ce cas, isolez quatre paramètres :
{"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};
De plus, créez des curseurs de numérotation et renommez-les en fonction des paramètres appropriés. Les trois premiers curseurs, de haut en bas, doivent être remappés avec un domaine de [0,10], tandis que le curseur final, "Facade Bend Location", doit être remappé avec un domaine de [0,1]. Ces valeurs, de haut en bas, doivent commencer par les valeurs suivantes (bien qu'elles soient arbitraires) : 2.68, 2.64, 2.29, 0.5
Définissez un nouveau nœud Code Block et connectez les curseurs :
{so,mo,no,fbl};
En modifiant les curseurs dans cette partie du graphique, vous pouvez rendre le vitrage de la façade beaucoup plus important : 9.98, 10.0, 9.71, 0.31
Dans les sections précédentes, vous avez découvert en détail comment configurer le package MapToSurface avec des nœuds personnalisés et des fichiers d’exemple. Mais comment publier un package développé localement ? Cette étude de cas montre comment publier un package à partir d’un ensemble de fichiers dans un dossier local.
Il existe plusieurs façons de publier un package. Voici le processus recommandé :publier localement, développer localement, puis publier en ligne. Vous allez commencer par un dossier contenant tous les fichiers du package.
Avant de commencer la publication du package MapToSurface, si vous avez installé le package à partir de la leçon précédente, désinstallez-le afin de ne pas utiliser les mêmes packages.
Commencez par aller dans Packages > Gestionnaire de package > onglet Packages installés > à côté de MapToSurface, cliquez sur le menu des points verticaux > Supprimer.
Ensuite, redémarrez Dynamo. Lors de la réouverture, vérifiez la fenêtre « Gérer les packages » : le package MapToSurface ne doit plus être présent. Vous pouvez désormais commencer !
Vous pouvez publier des nœuds et des packages personnalisés à partir de Dynamo Sandbox dans la version 2.17 et les versions ultérieures, tant qu’ils n’ont pas de dépendances de l’API hôte. Dans les versions plus anciennes, la publication de nœuds et de packages personnalisés n’est possible que dans Dynamo for Revit et Dynamo for Civil 3D.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Il s'agit de la première soumission du package, et tous les fichiers d'exemple et les nœuds personnalisés sont placés dans un dossier unique. Maintenant que ce dossier est prêt, vous pouvez effectuer le chargement dans le gestionnaire de package Dynamo.
Ce dossier contient cinq nœuds personnalisés (.dyf).
Ce dossier contient également cinq fichiers d'exemple (.dyn) et un fichier vectoriel importé (.svg). Ces fichiers serviront d’exercices préliminaires pour montrer à l’utilisateur comment utiliser les nœuds personnalisés.
Dans Dynamo, commencez par cliquer sur l’onglet Packages > Gestionnaire de package > Publier un nouveau package.
Dans l’onglet Publier un package, remplissez les champs pertinents dans la partie gauche de la fenêtre.
Ensuite, nous allons ajouter des fichiers de package. Vous pouvez ajouter des fichiers un par un ou des dossiers entiers en sélectionnant Ajouter un répertoire (1). Pour ajouter des fichiers qui ne sont pas des fichiers .dyf, veillez à modifier le type de fichier dans la fenêtre du navigateur en « Tous les fichiers(.) ». Notez que nous ajouterons chaque fichier, nœud personnalisé (.dyf) ou fichier d’exemple (.dyn), sans distinction. Dynamo classe ces éléments lors de la publication du package.
Une fois que vous avez sélectionné le dossier MapToSurface, le gestionnaire de package vous montre le contenu du dossier. Si vous chargez votre propre package avec une structure de dossiers complexe, et que vous ne voulez pas que Dynamo apporte des changements à votre structure de dossiers, vous pouvez cocher la case « Conserver la structure des dossiers ». Cette option est destinée aux utilisateurs avancés, et si votre package n’est pas délibérément configuré d’une manière spécifique, il est préférable de laisser cette option désactivée et de permettre à Dynamo d’organiser les fichiers selon les besoins. Cliquez sur Suivant pour continuer.
Ici, vous avez la possibilité de voir comment Dynamo organisera vos fichiers de package avant de les publier. Cliquez sur Terminer pour continuer.
Publiez en cliquant sur « Publier localement » (1). Si vous suivez, veillez à cliquer sur « Publier localement » et non « Publier en ligne » pour éviter d’avoir un groupe de packages en double dans le gestionnaire de package.
Une fois la publication terminée, les nœuds personnalisés doivent être disponibles sous le groupe « DynamoPrimer » ou votre bibliothèque Dynamo.
Examinez maintenant le répertoire racine pour découvrir comment Dynamo a mis en forme le package créé. Pour ce faire, allez dans l’onglet Packages installés > à côté de MapToSurface, cliquez sur le menu des points verticaux > sélectionnez Afficher le répertoire racine.
Le répertoire racine se trouve à l’emplacement local de votre package (n’oubliez pas que vous avez publié le package « localement »). Dynamo utilise actuellement ce dossier pour lire les nœuds personnalisés. Il est donc important de publier localement le répertoire dans un emplacement permanent (par exemple, pas sur votre bureau). Voici la répartition du dossier du package Dynamo :
Le dossier bin contient les fichiers .dll créés avec des bibliothèques C# ou Zero Touch. Étant donné qu’il n’en existe pas pour ce package, ce dossier est vide pour cet exemple.
Le dossier dyf contient les nœuds personnalisés. L’ouverture de ce dossier permet d’afficher tous les nœuds personnalisés (fichiers .dyf) de ce package.
Le dossier supplémentaire contient tous les fichiers supplémentaires. Il est probable que ces fichiers soient des fichiers Dynamo (.dyn) ou d'autres fichiers requis (.svg, .xls, .jpeg, .sat, etc.).
Le fichier pkg est un fichier texte de base qui définit les paramètres du package. Cette opération est automatisée dans Dynamo, mais elle peut être modifiée si vous souhaitez obtenir des détails.
Remarque : ne suivez pas cette étape, sauf si vous publiez réellement un package de votre choix.
Lorsque vous êtes prêt à publier, dans la fenêtre Packages > Gestionnaire de package > Packages installés, sélectionnez le bouton situé à droite du package que vous souhaitez publier et choisissez Publier.
Si vous mettez à jour un package qui a déjà été publié, choisissez « Publier la version » et Dynamo mettra à jour votre package en ligne en fonction des nouveaux fichiers contenus dans le répertoire racine de ce package. C'est aussi simple que ça !
Lorsque vous mettez à jour les fichiers dans le dossier racine de votre package publié, vous pouvez également publier une nouvelle version du package en sélectionnant « Publier la version… » dans l’onglet Mes packages. Cette méthode vous permet d’apporter les mises à jour nécessaires à votre contenu et de le partager en toute transparence avec la communauté. La version de publication fonctionne uniquement si vous êtes le gestionnaire du package.
Revit est un environnement riche en données. Cet environnement vous offre de nombreuses possibilités de sélection allant bien au-delà du "pointer-cliquer". Vous pouvez interroger la base de données Revit et lier dynamiquement des éléments Revit à la géométrie Dynamo tout en effectuant des opérations paramétriques.
La bibliothèque Revit de l’interface utilisateur propose une catégorie « Selection » qui permet d’explorer plusieurs méthodes de sélection de géométrie.
Pour sélectionner correctement des éléments Revit, il est important de bien comprendre la hiérarchie des éléments Revit. Vous souhaitez sélectionner tous les murs d'un projet ? Effectuez une sélection par catégorie. Vous voulez sélectionner toutes les chaises Eames dans votre hall moderne du milieu du siècle ? Effectuez une sélection par famille.
Examinez rapidement la hiérarchie de Revit.
Vous vous souvenez de la taxinomie en biologie ? Règne, Embranchement, Classe, Ordre, Famille, Genre, Espèces ? Les éléments Revit sont classés de la même manière. À la base, la hiérarchie Revit peut être divisée en catégories, familles, types* et instances. Une instance est un élément de modèle individuel (avec un ID unique), tandis qu'une catégorie définit un groupe générique (tel que "murs" ou "sols"). La base de données Revit étant organisée de cette manière, vous pouvez sélectionner un élément et choisir tous les éléments similaires en fonction d'un niveau spécifié dans la hiérarchie.
* Les types définis dans Revit diffèrent des types de programmation. Dans Revit, un type fait référence à une branche de la hiérarchie plutôt qu'à un "type de données".
Les trois images ci-dessous décrivent les principales catégories pour la sélection d'éléments Revit dans Dynamo. Ces outils sont très utiles en association. Vous allez en découvrir certains dans les exercices suivants.
Pointer-cliquer est la méthode la plus simple pour sélectionner directement un élément Revit. Vous pouvez sélectionner un élément de modèle complet ou des parties de sa topologie (une face ou une arête, par exemple). Il reste lié dynamiquement à cet objet Revit, de sorte que lorsque l’emplacement ou les paramètres du fichier Revit sont mis à jour, l’élément Dynamo référencé est mis à jour dans le graphique.
Les menus déroulants permettent de créer une liste de tous les éléments accessibles dans un projet Revit. Vous pouvez utiliser cette option pour référencer des éléments Revit qui ne sont pas nécessairement visibles dans une vue. C’est un outil formidable pour rechercher des éléments existants ou en créer d’autres dans un projet Revit ou l’Éditeur de familles.
![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)
Vous pouvez également sélectionner des éléments Revit en fonction de niveaux spécifiques dans la hiérarchie Revit. Cette option est puissante pour personnaliser des réseaux de données volumineux en vue de la documentation ou de l'instanciation et de la personnalisation génératives.
Tout en gardant les trois images ci-dessus, vous allez étudier un exercice qui sélectionne les éléments d'un projet Revit de base en vue de les préparer aux applications paramétriques créées dans les autres sections de ce chapitre.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Ce fichier d'exemple Revit contient trois types d'éléments d'un bâtiment simple. Utilisez ce fichier comme exemple pour sélectionner des éléments Revit dans le contexte de la hiérarchie Revit.
Volume de bâtiment
Poutres (ossature)
Fermes (composants adaptatifs)
Quelles conclusions pouvez-vous tirer des éléments affichés actuellement dans la vue du projet Revit ? Jusqu'à quelle distance de la hiérarchie devez-vous aller pour sélectionner les éléments appropriés ? Cette tâche est évidemment plus complexe lorsque vous travaillez sur un projet volumineux. De nombreuses options sont disponibles : vous pouvez sélectionner des éléments par catégories, niveaux, familles, instances, etc.
Puisque vous travaillez avec une configuration de base, sélectionnez le volume du bâtiment en choisissant « Mass » dans le nœud déroulant Categories. Vous le trouverez dans l'onglet Revit > Selection.
La sortie de la catégorie Mass est uniquement la catégorie elle-même. Vous devez sélectionner les éléments. Pour ce faire, utilisez le nœud "All Elements of Category".
À ce stade, aucune géométrie n'est visible dans Dynamo. Un élément Revit a été sélectionné, mais il n'a pas encore été converti en géométrie Dynamo. Il s'agit d'une distinction importante. Si vous sélectionnez un grand nombre d'éléments, vous ne souhaitez pas afficher un aperçu de tous ces éléments dans Dynamo, sous peine de ralentir le programme. Dynamo est un outil permettant de gérer un projet Revit sans avoir à effectuer des opérations de géométrie. Vous allez le découvrir dans la section suivante de ce chapitre.
Dans ce cas, vous travaillez avec une géométrie simple. Vous devez donc importer la géométrie dans l'aperçu Dynamo. Le nœud Watch ci-dessus affiche un numéro vert en regard de l’élément "BldgMass". Il représente l'ID de l'élément et vous indique que vous travaillez avec un élément Revit et non avec une géométrie Dynamo. L’étape suivante consiste à convertir cet élément Revit en géométrie dans Dynamo.
Le nœud Element.Faces vous permet d’obtenir une liste de surfaces représentant chaque face du volume Revit. Vous pouvez désormais voir la géométrie dans la fenêtre Dynamo et commencer à référencer la face pour les opérations paramétriques.
Voici une autre méthode : dans ce cas, vous ne pouvez pas effectuer de sélection via la hiérarchie Revit (« All Elements of Category ») et choisissez de sélectionner explicitement la géométrie dans Revit.
Utilisez le nœud "Select Model Element" et cliquez sur le bouton *"Select" *(ou "Change"). Dans la fenêtre Revit, sélectionnez l'élément souhaité. Dans ce cas, l'élément sélectionné est le volume du bâtiment.
Au lieu d'utiliser le nœud Element.Faces, vous pouvez sélectionner le volume complet comme géométrie solide à l'aide du nœud Element.Geometry. Cette opération permet de sélectionner toute la géométrie contenue dans ce volume.
Le nœud Geometry.Explode vous permet de récupérer la liste des surfaces. Ces deux nœuds fonctionnent de la même manière que Element.Faces, mais offrent d'autres options permettant d'explorer la géométrie d'un élément Revit.
Certaines des opérations de liste de base vous permettent d’interroger la face qui vous intéresse.
Tout d’abord, connectez les éléments sélectionnés précédemment au nœud Element.Faces.
Ensuite, le nœud List.Count indique que vous travaillez avec 23 surfaces du volume.
En faisant référence à ce nombre, définissez la valeur maximale d'un *curseur de type entier *sur "22".
À l'aide de List.GetItemAtIndex, entrez les listes et le *curseur d'entier *pour l'index. Faites glisser le curseur avec la sélection et arrêtez lorsque vous atteignez l'index 9 et que vous avez isolé la façade principale qui héberge les fermes.
L'étape précédente était un peu compliquée. Grâce au nœud "Select Face", cette opération est beaucoup plus rapide. Cela vous permet d'isoler une face qui n'est pas un élément en soi dans le projet Revit. La même interaction s’applique à « Select Model Element », sauf que vous sélectionnez la surface plutôt que l’élément entier.
Imaginez que vous souhaitiez isoler les murs de la façade principale du bâtiment. Pour ce faire, vous pouvez utiliser le nœud "Select Faces". Cliquez sur le bouton « Select », puis sélectionnez les quatre façades principales dans Revit.
Après avoir sélectionné les quatre murs, assurez-vous que vous cliquez sur le bouton « Terminer » dans Revit.
Les faces sont désormais importées dans Dynamo en tant que surfaces.
Examinez désormais les poutres sur l’atrium.
À l’aide du nœud « Select Model Element », sélectionnez l’une des poutres.
Connectez l'élément poutre au nœud Element.Geometry. La poutre apparaît dans la fenêtre Dynamo.
Vous pouvez effectuer un zoom avant sur la géométrie à l'aide d'un nœud Watch3D (si vous ne voyez pas la poutre dans Watch 3D, cliquez avec le bouton droit de la souris et sélectionnez "Zoom tout").
Question fréquente pendant les workflows Revit/Dynamo : comment sélectionner un élément et obtenir tous les éléments similaires ? Étant donné que l’élément Revit sélectionné contient toutes ses informations hiérarchiques, vous pouvez interroger son type de famille et sélectionner tous les éléments de ce type.
Connectez l’élément poutre à un nœud Element.ElementType.
Le nœud Watch indique que la sortie est désormais un symbole de famille plutôt qu'un élément Revit.
Element.ElementType est une simple requête, vous pouvez le faire dans le nœud Code Block aussi facilement avec
x.ElementType;
et obtenir les mêmes résultats.
Pour sélectionner les autres poutres, utilisez le nœud « All Elements of Family Type ».
Le nœud Watch indique que cinq éléments Revit ont été sélectionnés.
Vous pouvez également convertir ces cinq éléments en géométrie Dynamo.
Dans tous les cas, si vous importiez 500 poutres, auriez-vous besoin de toutes les surfaces pour effectuer l'opération paramétrique souhaitée ? Ou pouvez-vous extraire les informations de base des poutres et effectuer des tâches génératives avec une géométrie fondamentale ? Gardez cette question à l'esprit à mesure que vous avancez dans ce chapitre. Prenez l’exemple du système de ferme suivant.
À l'aide du même graphique de nœuds, sélectionnez l'élément ferme plutôt que l'élément poutre. Avant de procéder ainsi, supprimez Element.Geometry de l’étape précédente.
Ensuite, extrayez des informations de base à partir du type de famille de fermes.
Le nœud Watch contient une liste de composants adaptatifs sélectionnés dans Revit. Étant donné que vous voulez extraire les informations de base, commencez par les points adaptatifs.
Connectez le nœud "All Elements of Family Type" au nœud "AdaptiveComponent.Location". Vous obtenez une liste de listes, chacune avec trois points qui représentent les emplacements des points adaptatifs.
La connexion d'un nœud "Polygon.ByPoints" renvoie une polycourbe. Celle-ci apparaît dans la fenêtre Dynamo. Cette méthode vous a permis de visualiser la géométrie d'un élément et de supprimer la géométrie du réseau d'éléments restants (qui peut être plus grand en nombre que dans cet exemple).
Conseil : si vous cliquez sur le numéro vert d'un élément Revit dans Dynamo, la fenêtre Revit effectue un zoom sur cet élément.
L’importation Zero Touch fait référence à une méthode pointer-cliquer simple permettant d’importer des bibliothèques C#. Dynamo lit les méthodes publiques d’un fichier .dll et les convertit en nœuds Dynamo. Vous pouvez utiliser le Zero Touch pour développer vos propres nœuds et packages personnalisés, et importer des bibliothèques externes dans l’environnement Dynamo.
fichiers .dll
Nœuds Dynamo
Le Zero Touch vous permet d'importer une bibliothèque qui n'a pas été nécessairement développée pour Dynamo, et de créer une suite de nouveaux nœuds. La fonctionnalité Zero Touch actuelle montre le caractère multi-plateforme du projet Dynamo.
Dans Dynamo, créez un fichier et sélectionnez Fichier > Importer une bibliothèque
Recherchez ensuite le fichier dll.
Dans la fenêtre contextuelle, accédez au dossier de version de l’installation AForge. Il se trouve probablement dans un dossier semblable à celui-ci : C:\Program Files (x86)\AForge.NET\Framework\Release.
AForge.Imaging.dll : pour cette étude de cas, utilisez uniquement ce fichier de la bibliothèque AForge. Sélectionnez ce fichier .dll et cliquez sur « Ouvrir ».
De retour dans Dynamo, un groupe de nœuds AForge doit apparaître dans la barre d’outils de la bibliothèque. Vous avez désormais accès à la bibliothèque d’images AForge à partir du programme visuel.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Maintenant que la bibliothèque a été importée, commencez simplement par le premier exercice (01-EdgeDetection.dyn). Vous effectuerez quelques traitements d’images de base sur une image d’exemple pour découvrir comment les filtres d’images AForge sont appliqués. Vous allez utiliser le nœud « Watch Image » pour afficher les résultats et appliquer dans Dynamo des filtres semblables à ceux de Photoshop.
Le nœud File Path fournit simplement une chaîne du chemin d’accès à l’image sélectionnée. Vous devez ensuite le convertir en fichier image utilisable dans Dynamo.
Utilisez le nœud File From Path pour convertir le chemin d’accès au fichier en image dans l’environnement Dynamo.
Connectez le nœud File Path au nœud File.FromPath.
Pour convertir ce nœud File Path en image, utilisez le nœud Image.ReadFromFile.
Enfin, découvrez le résultat ! Déposez un nœud Watch Image sur la zone de dessin et connectez-vous à Image.ReadFromFile. Vous n’avez pas encore utilisé AForge, mais vous avez importé une image dans Dynamo.
Sous AForge.Imaging.AForge.Imaging.Filters (dans le menu de navigation), un large éventail de filtres est disponible. Vous allez utiliser l’un de ces filtres pour désaturer une image en fonction des valeurs de seuil.
Déposez trois curseurs sur la zone de dessin, modifiez leur intervalle pour qu’il soit compris entre 0 et 1 et leur valeur de pas pour qu’elle soit de 0.01.
Ajoutez le nœud Grayscale.Grayscale à la zone de dessin. Il s’agit d’un filtre AForge qui applique un filtre de nuances de gris à une image. Connectez les trois curseurs de l'étape 1 à cr, cg et cb. Définissez la valeur des curseurs supérieur et inférieur sur 1 et celle du curseur central sur 0.
Pour appliquer le filtre Nuances de gris, vous devez effectuer une action sur l’image. Pour ce faire, utilisez BaseFilter.Apply. Connectez l’image à l’entrée de l’image et Grayscale.Grayscale à l’entrée baseFilter.
Lorsque vous connectez le nœud Watch Image, vous obtenez une image désaturée.
Vous pouvez contrôler la désaturation de cette image en fonction des valeurs de seuil pour le rouge, le vert et le bleu. Ces paramètres sont définis par les entrées du nœud Grayscale.Grayscale. L’image semble assez sombre, car la valeur du vert est définie sur 0 dans le curseur.
Définissez la valeur des curseurs supérieur et inférieur sur 0 et celle du curseur central sur 1. De cette manière, vous obtenez une image désaturée plus lisible.
Utilisez l'image désaturée et appliquez-lui un autre filtre. Étant donné que l’image désaturée est un peu contrastée, testez la détection des arêtes.
Ajoutez un nœud SobelEdgeDetector.SobelEdgeDetector à la zone de dessin.
Connectez-le au nœud BaseUsingCopyPartialFilter.Apply et connectez l’image désaturée à l’entrée d’image de ce nœud.
Le filtre de détection d’arêtes Sobel a mis en surbrillance les arêtes dans une nouvelle image.
En zoomant, on constate que le filtre de détection d'arêtes a appelé les contours des bulles avec des pixels. La bibliothèque AForge contient des outils permettant de prendre des résultats similaires et de créer une géométrie Dynamo. Vous allez explorer ce point dans le prochain exercice.
Maintenant que vous avez découvert le traitement d’images de base, vous allez utiliser une image pour piloter la géométrie Dynamo. Dans le cadre d’un exercice élémentaire, réalisez un tracé en direct d’une image à l’aide d’AForge et de Dynamo. Pour rester simple, vous allez extraire des rectangles d’une image de référence. Cependant, AForge propose des outils permettant d’effectuer des opérations plus complexes. Vous allez travailler avec 02-RectangleCreation.dyn à partir des fichiers d’exercice téléchargés.
À l’aide du nœud File Path, accédez au fichier grid.jpg dans le dossier des exercices.
Connectez les séries de nœuds restantes ci-dessus pour afficher une grille paramétrique de parcours.
Après avoir ajouté un outil BlobCounter à la zone de dessin, vous devez procéder au traitement de l’image (de la même façon qu’avec l’outil BaseFilter.Apply dans l’exercice précédent).
Malheureusement, le nœud « Process Image » n’est pas immédiatement visible dans la bibliothèque Dynamo. Cela est dû au fait que la fonction n'est peut-être pas visible dans le code source AForge. Pour résoudre ce problème, vous devez trouver une solution.
Ajoutez un nœud Python à la zone de dessin et ajoutez le code suivant au nœud Python. Ce code importe la bibliothèque AForge, puis traite l'image importée.
Lorsque vous connectez la sortie de l’image à l’entrée du nœud Python, vous obtenez un résultat AForge.Imaging.BlobCounter à partir du nœud Python.
Connectez la sortie du script Python à BlobCounterBase.GetObjectRectangles. Cette opération permet de lire les objets d’une image, en fonction d’une valeur de seuil, et d’extraire les rectangles quantifiés de l’espace de pixel.
Ajoutez un autre nœud Python à la zone de dessin, connectez-vous à GetObjectRectangles et entrez le code ci-dessous. Cela permet de créer une liste organisée d’objets Dynamo.
Transposez la sortie du nœud Python de l’étape précédente. Cela crée 4 listes, chacune représentant X, Y, Largeur et Hauteur pour chaque rectangle.
À l'aide d'un bloc de code, organisez les données dans une structure qui s'adapte au nœud Rectangle.ByCornerPoints (code ci-dessous).
En faisant un zoom arrière, vous obtenez un réseau de rectangles représentant les carrés blancs de l’image. Grâce à la programmation, vous avez fait quelque chose qui ressemble à un tracé en direct dans Illustrator !
Vous devez néanmoins effectuer un peu de nettoyage. En zoomant, vous pouvez voir que vous avez un petit groupe de rectangles non souhaités.
Ensuite, vous allez écrire des codes pour éliminer les rectangles indésirables.
Insérez un nœud Python entre le nœud GetObjectRectangles et un autre nœud Python. Le code du nœud est indiqué ci-dessous. Il supprime tous les rectangles dont la taille est inférieure à la taille définie.
Après avoir supprimé les rectangles superflus, vous pouvez créer une surface à partir de ces rectangles et les extruder d’une distance basées sur leurs zones.
Enfin, définissez l’entrée both_sides sur Faux (False). Vous obtenez une extrusion dans une direction. Votre création est maintenant prête à devenir une super table de geek.
Dynamo est un environnement flexible, conçu pour s'intégrer à un large éventail de programmes, mais il a été créé pour être utilisé avec Revit. Un programme visuel crée des options robustes pour la modélisation des informations du bâtiment (BIM). Dynamo offre une suite complète de nœuds spécifiquement conçus pour Revit, ainsi que des bibliothèques tierces issues d'une communauté AEC dynamique. Ce chapitre porte sur les notions de base de l’utilisation de Dynamo dans Revit.
Vous pouvez créer un réseau d'éléments Revit dans Dynamo avec un contrôle paramétrique complet. Les nœuds Revit dans Dynamo permettent d'importer des éléments à partir de géométries génériques vers des types de catégorie spécifiques (tels que des murs et des sols). Dans cette section, nous allons nous concentrer sur l’importation d’éléments paramétriquement flexibles avec des composants adaptatifs.
Un composant adaptatif est une catégorie de famille flexible qui se prête bien aux applications génératives. Lors de l'instanciation, vous pouvez créer un élément géométrique complexe qui est contrôlé par l'emplacement fondamental des points adaptatifs.
Vous trouverez ci-dessous un exemple de composant adaptatif à trois points dans l’Éditeur de familles. Cela génère une ferme définie par la position de chaque point adaptatif. Dans l'exercice ci-dessous, vous allez utiliser ce composant pour générer une série de fermes sur une façade.
Le composant adaptatif est un bon exemple des meilleures pratiques d'interopérabilité. Vous pouvez créer un réseau de composants adaptatifs en définissant les points adaptatifs fondamentaux. Lors du transfert de ces données vers d'autres programmes, vous pouvez réduire la géométrie en données simples. L'importation et l'exportation avec un programme tel qu'Excel suivent une logique similaire.
Supposez qu'un consultant en façade souhaite connaître l'emplacement des éléments de ferme sans avoir à les analyser par le biais d'une géométrie entièrement articulée. Afin de se préparer à la fabrication, le consultant peut faire référence à l'emplacement des points adaptatifs pour régénérer la géométrie dans un programme tel qu'Inventor.
Le workflow que vous allez configurer dans l'exercice ci-dessous vous permet d'accéder à toutes ces données lors de la création de la définition pour la création d'éléments Revit. Grâce à ce processus, vous pouvez fusionner la conceptualisation, la documentation et la fabrication dans un workflow homogène. Cela permet de créer un processus plus intelligent et efficace pour l'interopérabilité.
Une autre méthode d'importation de géométrie Dynamo paramétrique dans Revit consiste à utiliser DirectShape. En résumé, l'élément DirectShape et les classes associées permettent de stocker des formes géométriques créées en externe dans un document Revit. La géométrie peut inclure des solides ou des maillages fermés. DirectShape sert principalement à importer des formes à partir d'autres formats de données, tels que IFC ou STEP, où il n'y a pas assez d'informations pour créer un élément Revit "réel". Comme les workflows IFC et STEP, la fonctionnalité DirectShape fonctionne bien avec l'importation de géométries créées dans des projets Revit en tant qu'éléments réels.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
À partir du fichier d’exemple de cette section (ou en continuant avec le fichier Revit de la session précédente), vous obtenez le même volume Revit.
Il s’agit du fichier ouvert.
Il s'agit du système de ferme créé avec Dynamo et relié intelligemment au volume Revit.
Après avoir utilisé les nœuds "Select Model Element" et "Select Face", vous allez maintenant avancer plus loin dans la hiérarchie de la géométrie et utiliser "Select Edge". Lorsque le solveur Dynamo est défini pour exécuter la commande "Automatic", le graphique est constamment mis à jour en fonction des modifications apportées au fichier Revit. L'arête sélectionné est liée dynamiquement à la topologie des éléments Revit. Tant que la topologie* ne change pas, la connexion reste liée entre Revit et Dynamo.
Sélectionnez la courbe la plus haute de la façade du vitrage. Elle s'étend sur toute la longueur du bâtiment. Si vous ne parvenez pas à sélectionner l'arête, n'oubliez pas de choisir la sélection dans Revit en plaçant le curseur sur l'arête et en appuyant sur la touche "Tabulation" jusqu'à ce que l'arête souhaitée soit mise en surbrillance.
À l'aide de deux nœuds "Select Edge", sélectionnez chaque arête représentant le dévers de rail au milieu de la façade.
Procédez de la même manière pour les arêtes inférieures de la façade dans Revit.
Les nœuds Watch indiquent que vous avez désormais des lignes dans Dynamo. Cette opération est automatiquement convertie en géométrie Dynamo, car les arêtes elles-mêmes ne sont pas des éléments Revit. Ces courbes sont les références que vous allez utiliser pour instancier des fermes adaptatives sur la façade.
* Pour conserver une topologie homogène, faites référence à un modèle auquel aucune face ou arête supplémentaire n'a été ajoutée. Bien que les paramètres puissent en modifier la forme, la façon dont il est créé reste cohérente.
Vous devez d'abord joindre les courbes et les fusionner en une liste. De cette manière, vous pouvez « regrouper » les courbes pour effectuer des opérations de géométrie.
Créez une liste pour les deux courbes au centre de la façade.
Joignez les deux courbes dans une polycourbe en connectant le composant List.Create à un nœud Polycurve.ByJoiningCurves.
Créez une liste pour les deux courbes au bas de la façade.
Joignez les deux courbes dans une polycourbe en connectant le composant List.Create à un nœud Polycurve.ByJoiningCurves.
Enfin, joignez les trois courbes principales (une ligne et deux polycourbes) dans une liste.
Vous voulez tirer parti de la courbe supérieure, qui est une ligne, et représente la portée complète de la façade. Pour ce faire, créez des plans le long de cette ligne pour couper le jeu de courbes regroupées dans une liste.
Avec un nœud Code Block, définissez un intervalle en utilisant la syntaxe :
0..1..#numberOfTrusses;
Connectez un *curseur d'entier *à l'entrée du nœud Code Block. Vous l'aurez deviné, cette valeur représente le nombre de fermes. Le curseur contrôle le nombre d'éléments dans l'intervalle défini de *0 *à 1.
Connectez le nœud Code Block à l'entrée param d'un nœud "Curve.PlaneAtParameter" et connectez l'arête supérieure à l'entrée curve. Vous obtiendrez ainsi dix plans, répartis uniformément sur l'ensemble de la façade.
Un plan est un élément abstrait de la géométrie, représentant un espace 2D infini. Les plans sont idéaux pour le contour et l’intersection, à mesure que vous effectuez la configuration dans cette étape.
À l’aide du nœud Geometry.Intersect (définissez la liaison sur Produit cartésien), connectez le nœud Curve.PlaneAtParameter à l’entrée entity du nœud Geometry.Intersect. Connectez le nœud principal List.Create à l'entrée geometry. Les points sont maintenant affichés dans la fenêtre Dynamo. Ils représentent l'intersection de chaque courbe avec les plans définis.
Le résultat est une liste de listes. Trop de listes par rapport à vos besoins. Il convient ici d'effectuer un aplatissement partiel. Vous devez descendre d'un niveau dans la liste et aplanir le résultat. Pour ce faire, utilisez l’opération List.Map, comme indiqué dans le chapitre relatif aux listes du guide.
Connectez le nœud Geometry.Intersect à l’entrée de liste de List.Map.
Connectez un nœud Flatten à l'entrée f(x) de List.Map. Les résultats donnent 3 listes, chacune contenant un nombre égal au nombre de fermes.
Vous devez modifier ces données. Si vous souhaitez instancier la ferme, utilisez le même nombre de points adaptatifs que celui défini dans la famille. Il s'agit d'un composant adaptatif à trois points. Par conséquent, au lieu de trois listes contenant 10 éléments chacune (numberOfTrusses), vous souhaitez obtenir 10 listes contenant trois éléments chacune. De cette manière, vous pouvez créer 10 composants adaptatifs.
Connectez le fichier List.Map à un nœud List.Transpose. Vous disposez à présent de la sortie de données souhaitée.
Pour confirmer que les données sont correctes, ajoutez un nœud Polygon.ByPoints dans la zone de dessin et vérifiez deux fois l'aperçu Dynamo.
Mettez en réseau les composants adaptatifs de la même façon que vous avez créé les polygones.
Ajoutez un nœud AdaptiveComponent.ByPoints à la zone de dessin et connectez le nœud List.Transpose à l’entrée points.
À l'aide d'un nœud Family Types, sélectionnez la famille "AdaptiveTruss" et connectez-la à l'entrée FamilyType du nœud AdaptiveComponent.ByPoints.
Dans Revit, les dix fermes sont à présent espacées régulièrement sur la façade.
En ajustant le graphique, augmentez la valeur de numberOfTrusses de 30 en déplaçant le curseur. Beaucoup de fermes, peu réalistes, mais le lien paramétrique fonctionne. Une fois la vérification terminée, définissez la valeur de numberOfTrusses sur 15.
Pour le dernier test, en sélectionnant le volume dans Revit et en modifiant les paramètres d’occurrence, vous pouvez modifier la forme du bâtiment et observer la ferme. Souvenez-vous que ce graphique Dynamo doit être ouvert pour que cette mise à jour s’affiche, et que le lien sera supprimé dès sa fermeture.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Ouvrez tout d’abord le fichier d’exemple de cette leçon : ARCH-DirectShape-BaseFile.rvt.
Dans la vue 3D, vous pouvez voir le volume de votre bâtiment de la leçon précédente.
Le long de l'arête de l'atrium se trouve une courbe de référence, que vous allez utiliser comme courbe à référencer dans Dynamo.
Le long de l’arête opposée de l’atrium se trouve une autre courbe de référence que vous allez également référencer dans Dynamo.
Pour référencer la géométrie dans Dynamo, utilisez Select Model Element pour chaque membre dans Revit. Sélectionnez le volume dans Revit et importez la géométrie dans Dynamo à l'aide de Element.Faces. Le volume doit maintenant être visible dans l'aperçu Dynamo.
Importez une courbe de référence dans Dynamo à l'aide de Select Model Element et CurveElement.Curve.
Importez l’autre courbe de référence dans Dynamo à l’aide de Select Model Element et CurveElement.Curve.
La structure est contrôlée par trois paramètres principaux : Décalage diagonale, Contre-flèche et Rayon.
Effectuez un zoom avant sur les paramètres de ce graphique. Vous pouvez les ajuster pour obtenir différentes sorties de géométrie.
Lorsque vous déposez le nœud DirectShape.ByGeometry sur la zone de dessin, vous voyez qu’il comporte quatre entrées : geometry, category, material et name.
La géométrie sera le solide créé à partir de la partie de création de géométrie du graphique
L'entrée de catégorie est sélectionnée à l'aide du nœud déroulant Categories. Dans ce cas, vous allez utiliser "Ossature".
Vous pouvez sélectionner l'entrée de matériau via le réseau de nœuds ci-dessus, bien qu'il puisse être plus simplement défini comme "Par défaut" dans ce cas.
Après avoir exécuté Dynamo, vous avez la géométrie importée sur le toit dans votre projet dans Revit. Il s'agit d'un élément d'ossature, et non d'un modèle générique. Le lien paramétrique vers Dynamo reste intact.
À côté de DynamoUnfold, sélectionnez le menu d’options .
Version de Revit | Première version stable de Dynamo | Dernière version de Dynamo pour Revit prise en charge |
---|
Pour en savoir plus sur le gel des nœuds, consultez la section .
Dynamo est un projet open source en constante évolution et un grand nombre de développements sont liés à Revit. Si vous êtes nouveau, rendez-vous sur le forum de discussion et . Si vous êtes programmeur et que vous souhaitez vous impliquer dans le développement de Dynamo, consultez le . En outre, le constitue une ressource très utile pour les bibliothèques tierces. Beaucoup de ces packages sont conçus pour le secteur AEC. Dans ce chapitre, vous étudierez les packages tiers pour la panélisation.
Lorsque vous découvrez l'application complète de paramètres de modification, vous pouvez modifier un grand nombre d'éléments dans Revit avec Dynamo. Il peut s'agir d'une opération coûteuse en ressources informatiques , ce qui signifie qu'elle peut être lente. Si vous modifiez un grand nombre d'éléments, vous pouvez utiliser la fonctionnalité de nœud "Geler" pour interrompre l'exécution des opérations Revit lorsque vous développez votre graphique. Pour plus d’informations sur le gel des nœuds, consultez la section « » du chapitre Solides.
Et si vous aviez 500 poutres ? La conversion de tous ces éléments en géométrie Dynamo serait très lente. Si Dynamo prend du temps pour calculer des nœuds, vous pouvez utiliser la fonctionnalité de nœud "geler" pour interrompre l'exécution des opérations Revit lorsque vous développez votre graphique. Pour plus d'informations sur le gel des nœuds, consultez la section du chapitre Solides.
Cette section explique comment utiliser le Zero Touch pour importer une bibliothèque tierce. Pour plus d’informations sur le développement de votre propre bibliothèque Zero Touch, consultez la .
Les packages Zero Touch sont un complément utile aux nœuds personnalisés définis par l'utilisateur. Le tableau ci-dessous présente quelques packages qui utilisent des bibliothèques C#. Pour plus d’informations sur les packages, consultez la de l’annexe.
Dans cette étude de cas, vous découvrirez comment importer la bibliothèque .dll externe . AForge est une bibliothèque robuste qui offre une gamme de fonctionnalités allant du traitement d’images à l’intelligence artificielle. Vous allez utiliser la classe d'images dans AForge pour effectuer quelques exercices de traitement d'images ci-dessous.
Tout d’abord, téléchargez AForge. Sur la , sélectionnez [Download Installer] (Télécharger le programme d’installation). À l’issue du téléchargement, effectuez l’installation.
Pour importer une image, ajoutez un nœud File Path dans la zone de dessin et sélectionnez « soapbubbles.jpg » dans le dossier des exercices (crédit photo : ).
Dans cette étape, vous allez référencer les carrés blancs de l’image et les convertir en géométrie Dynamo réelle. AForge dispose d’un grand nombre d’outils puissants de vision par ordinateur. Ici, vous allez utiliser un outil particulièrement important pour la bibliothèque appelé .
Les étapes suivantes vous montreront quelques astuces pour vous permettre de vous familiariser avec l’. Il n’est pas nécessaire de savoir faire tout ça pour travailler sur Dynamo. Cette démonstration sert davantage à montrer l’utilisation de bibliothèques externes au sein de l’environnement Dynamo.
Ce sont des exemples de base, mais les concepts présentés ici sont transférables à des applications réelles passionnantes. La vision par ordinateur peut être utilisée pour une multitude de processus. En voici quelques-uns : lecteurs de codes-barres, mise en correspondance des perspectives, et . Pour les rubriques plus avancées ayant trait à AForge dans le cadre de cet exercice, lisez .
Le ci-dessous vous expliquera comment Dynamo référence les données pour la création d’éléments Revit. Pour générer plusieurs composants adaptatifs, définissez une liste de listes dans laquelle chaque liste comporte trois points représentant chaque point du composant adaptatif. Gardez cela à l’esprit lorsque vous gérez les structures de données dans Dynamo.
Vous allez examiner et réaliser le qui consiste à importer une géométrie Dynamo en tant que forme directe dans votre projet Revit. Cette méthode permet d'affecter une catégorie, un matériau et un nom de géométrie importée, tout en maintenant un lien paramétrique vers le graphique Dynamo.
En zoomant et en vous déplaçant vers la droite dans l’exemple de graphique, vous apercevez un grand groupe de nœuds : il s’agit d’opérations géométriques qui génèrent la structure de toiture de treille visible dans l’aperçu Dynamo. Ces nœuds sont générés à l'aide de la fonctionnalité Nœud vers code, comme décrit dans la du guide.
Bien que Dynamo ait été conçu à l’origine pour Revit, sa polyvalence en tant qu’outil de programmation visuelle s’étend au-delà de Revit. Dynamo est également intégré à Civil 3D, ce qui permet aux utilisateurs de créer de puissantes routines d’automatisation pour les projets d’infrastructures civiles. Il s’agit d’un outil extrêmement utile pour tout traitement, des tâches courantes aux workflows de conception les plus complexes, ce qui vous permet de gagner du temps, d’optimiser vos conceptions et de prendre de meilleures décisions pour celles-ci. Dynamo offre une suite complète de nœuds spécifiquement conçus pour Civil 3D, ainsi que des bibliothèques tierces issues d’une communauté dynamique.
Ce chapitre du guide est consacré à Dynamo for Civil 3D, depuis les bases jusqu’aux notions plus avancées.
À terme, il est probable que vous ayez besoin d’aller au-delà des notions de base et de vous plonger au cœur de Dynamo. Les pages de cette section vous donneront un plan pour débloquer des fonctionnalités avancées dans Dynamo for Civil 3D afin que vous puissiez faire passer vos graphiques au niveau supérieur.
2013 |
2014 |
2015 |
2016 |
2017 |
2018 |
2019 |
2020+ | 2.1.0 - Revit 2020+ inclut désormais Dynamo et reçoit les mises à jour comme Revit. | N/A |
Logo/Image | Nom |
Routes, voies ferrées, terrain, gaz et électricité, topographie, SIG…
Voilà ce qui compose l’infrastructure civile, entre autres. Cette section contient plusieurs exemples de graphiques pratiques et pertinents qui vous aideront à maîtriser Dynamo et à exploiter tout son potentiel pour Civil 3D. Tous les graphiques sont accompagnés d’une description détaillée de la logique qui a conduit à leur création, afin que vous puissiez non seulement les utiliser, mais aussi les comprendre.
En outre, ces exemples illustrent les meilleures pratiques déjà éprouvées en matière de construction de graphiques de qualité. Au fil des exemples, nous vous encourageons à vous familiariser avec la section Pratiques recommandées pour obtenir davantage d’idées sur la façon de construire des graphiques performants, flexibles et faciles à gérer.
L’un des nombreux cas d’utilisation de Dynamo est le placement dynamique d’objets discrets le long d’un modèle de projet 3D. Il arrive souvent que des objets doivent être placés à des emplacements indépendants des assemblages insérés le long du projet 3D, ce qui est une tâche très fastidieuse à accomplir manuellement. De plus, lorsque la géométrie horizontale ou verticale du projet 3D change, cela entraîne des travaux supplémentaires considérables.
Lire des données à partir d’un fichier externe (Excel dans ce cas)
Organiser des données dans des dictionnaires
Utiliser les systèmes de coordonnées pour contrôler la position, l’échelle et la rotation
Placer des références de bloc
Visualiser la géométrie dans Dynamo
Ce graphique peut s’exécuter dans Civil 3D 2020 et les versions ultérieures.
Commencez par télécharger les fichiers d’exemple ci-dessous, puis ouvrez le fichier DWG et le graphique Dynamo.
Il est préférable d’enregistrer le fichier Excel dans le même répertoire que le graphique Dynamo.
Voici une présentation de la logique de ce graphique.
Lire le fichier Excel et importer les données dans Dynamo
Obtenir des lignes caractéristiques du terrain à partir de la ligne de base du projet 3D spécifié
Générer des systèmes de coordonnées le long de la ligne caractéristique du terrain du projet au niveau des abscisses curvilignes souhaitées
Utiliser les systèmes de coordonnées pour placer les références de bloc dans l’espace objet
Allons-y !
Dans cet exemple de graphique, nous allons utiliser un fichier Excel pour stocker les données que Dynamo utilisera pour placer les références de bloc de lampadaire. Le tableau se présente comme suit.
L’utilisation de Dynamo pour lire des données à partir d’un fichier externe (tel qu’un fichier Excel) est une excellente stratégie, en particulier lorsque les données doivent être partagées avec d’autres membres de l’équipe.
Les données Excel sont importées dans Dynamo de la manière suivante.
Maintenant que vous disposez des données, vous devez les diviser par colonne (Projet 3D, Ligne de base, Code de point, etc.) afin de pouvoir les utiliser dans le reste du graphique. Pour ce faire, vous pouvez utiliser le nœud List.GetItemAtIndex et spécifier le numéro d’index de chaque colonne souhaitée. Par exemple, la colonne Projet 3D se trouve à l’index 0, la colonne Ligne de base à l’index 1, etc.
Cela semble correct, n’est-ce pas ? Mais cette approche peut poser problème. Que se passe-t-il si l’ordre des colonnes dans le fichier Excel change par la suite ? Ou si une nouvelle colonne est ajoutée entre deux colonnes ? Dans ce cas, le graphique ne fonctionnera pas correctement et devra être mis à jour. Vous pouvez protéger le graphique en plaçant les données dans un dictionnaire, avec les en-têtes des colonnes Excel comme clés et le reste des données comme valeurs.
Si vous ne connaissez pas les dictionnaires, consultez la section Dictionnaires dans Dynamo.
Le graphique est ainsi plus résilient, car il est possible de modifier l’ordre des colonnes dans Excel. Tant que les en-têtes de colonne restent les mêmes, les données peuvent simplement être extraites du dictionnaire à l’aide de sa clé (c’est-à-dire l’en-tête de colonne), ce que vous ferez ensuite.
Maintenant que les données Excel sont importées et prêtes à l’emploi, commencez à les utiliser pour obtenir des informations de Civil 3D sur les modèles de projet 3D.
Sélectionnez le modèle de projet 3D par son nom.
Obtenez une ligne de base spécifique dans le projet 3D.
Obtenez une ligne caractéristique du terrain dans la ligne de base à l’aide de son code de point.
Vous allez maintenant générer des systèmes de coordonnées le long des lignes caractéristiques du terrain du projet 3D aux valeurs d’abscisse curviligne spécifiées dans le fichier Excel. Ces systèmes de coordonnées seront utilisés pour définir la position, la rotation et l’échelle des références de bloc du lampadaire.
Si vous ne connaissez pas les systèmes de coordonnées, consultez la section Vecteur, plan et système de coordonnées.
Notez l’utilisation d’un bloc de code pour faire pivoter les systèmes de coordonnées en fonction du côté de la ligne de base sur lequel ils se trouvent. Cela pourrait être réalisé en utilisant une séquence de plusieurs nœuds, mais ceci est un bon exemple d’une situation où il est plus facile de l’écrire.
Si vous ne connaissez pas les blocs de code, consultez la section Nœuds Code Block et DesignScript.
Vous approchez du but ! Vous disposez de toutes les informations nécessaires pour placer les références de bloc. La première chose à faire est d’obtenir les définitions des blocs que vous souhaitez à l’aide de la colonne BlockName dans le fichier Excel.
La dernière étape consiste à créer les références de bloc.
Lorsque vous exécutez le graphique, vous devriez voir apparaître de nouvelles références de bloc dans l’espace objet le long du projet 3D. Et voici la partie la plus intéressante : si le mode d’exécution du graphique est défini sur Automatique et que vous modifiez le fichier Excel, les références de bloc sont mises à jour automatiquement !
Pour en savoir plus sur les modes d’exécution des graphiques, consultez la section Interface utilisateur.
Voici un exemple d’exécution du graphique à l’aide du Lecteur Dynamo.
Si vous ne connaissez pas le Lecteur Dynamo, consultez la section Lecteur Dynamo.
Il peut être utile de visualiser la géométrie du projet 3D dans Dynamo pour fournir du contexte. Les solides du projet 3D de ce modèle sont déjà extraits dans l’espace objet. Importez-les dans Dynamo.
Cependant, il y a autre chose que vous devez prendre en compte. Les solides sont un type de géométrie relativement « lourd », ce qui signifie que cette opération ralentira le graphique. L’idéal serait de disposer d’un moyen simple permettant de choisir d’afficher ou non les solides. La solution la plus évidente est de débrancher le nœud Corridor.GetSolids, mais cela produira des avertissements pour tous les nœuds en aval, ce qui est un peu gênant. C’est une situation dans laquelle le nœud ScopeIf se révèle particulièrement utile.
Remarquez que le nœud Object.Geometry a une barre grise en bas. Cela signifie que l’aperçu du nœud est désactivé (accessible par un clic droit sur le nœud), ce qui permet à GeometryColor.ByGeometryColor d’éviter de se « battre » avec d’autres géométries pour la priorité d’affichage dans l’aperçu de l’arrière-plan.
Le nœud ScopeIf vous permet d’exécuter de manière sélective une branche entière de nœuds. Si l’entrée du test est définie sur False, tous les nœuds connectés au nœud ScopeIf ne s’exécuteront pas.
Voici le résultat dans l’aperçu de arrière-plan de Dynamo.
Voici quelques suggestions pour élargir les possibilités offertes par ce graphique.
Ajoutez une colonne de rotation au fichier Excel et utilisez-la pour commander la rotation des systèmes de coordonnées.
Ajoutez des décalages horizontaux ou verticaux au fichier Excel de sorte que les lampadaires puissent dévier de la ligne caractéristique du terrain du projet 3D si nécessaire.
Au lieu d’utiliser un fichier Excel avec des valeurs d’abscisse curviligne, générez les valeurs d’abscisse curviligne directement dans Dynamo à l’aide d’une abscisse curviligne de départ et d’un espacement standard.
Maintenant que vous en savez un peu plus sur la situation générale, nous allons nous lancer dans la création de votre premier graphique Dynamo dans Civil 3D !
Il s’agit d’un exemple simple destiné à démontrer les fonctionnalités de base de Dynamo. Il est recommandé de suivre les étapes dans un nouveau document Civil 3D vide.
La première chose à faire est d’ouvrir un document vide dans Civil 3D. Une fois que vous y êtes, accédez à l’onglet Gérer dans le ruban de Civil 3D et recherchez le groupe de fonctions Programmation visuelle.
Cliquez sur le bouton Dynamo, qui lance Dynamo dans une fenêtre distincte.
Quelle est la différence entre Dynamo et le Lecteur Dynamo ?
Dynamo est ce que vous utilisez pour créer et exécuter des graphiques. Le Lecteur Dynamo est un moyen facile d’exécuter des graphiques sans avoir à les ouvrir dans Dynamo.
Accédez à la section Lecteur Dynamo lorsque vous êtes prêt à l’essayer.
Une fois Dynamo ouvert, l’écran d’accueil s’affiche. Cliquez sur Nouveau pour ouvrir un espace de travail vide.
Et les exemples ?
Dynamo for Civil 3D est fourni avec quelques graphiques prédéfinis qui peuvent vous donner des idées supplémentaires sur la façon dont vous pouvez utiliser Dynamo. Nous vous recommandons de les consulter ultérieurement, ainsi que les Exemples de workflows présentés dans le guide.
Vous devriez maintenant disposer d’un espace de travail vide. Découvrez Dynamo en action ! Voici votre objectif :
C’est assez simple, non ? Toutefois, avant de commencer, il convient d’aborder quelques points fondamentaux.
Les blocs de construction principaux d’un graphique Dynamo sont appelés nœuds. Un nœud est comme une petite machine : vous y introduisez des données, il effectue un travail sur ces dernières et produit un résultat. Dynamo for Civil 3D dispose d’une bibliothèque de nœuds que vous pouvez connecter ensemble avec des fils pour former un graphique. Celui-ci effectue des opérations plus importantes et de manière plus efficace qu’un nœud seul.
Que faire si je n’ai jamais utilisé Dynamo auparavant ?
Certaines fonctionnalités peuvent être nouvelles pour vous, mais ce n’est pas grave ! Ces sections vous seront utiles.
Interface utilisateur Nœuds et fils Nœuds et concepts essentiels
Commencez la création du graphique. Voici une liste de tous les nœuds dont vous aurez besoin.
Vous pouvez trouver ces nœuds en saisissant leur nom dans la barre de recherche de la bibliothèque, ou en effectuant une recherche après avoir cliqué avec le bouton droit de la souris n’importe où dans la zone de dessin.
Comment savoir quels nœuds utiliser et où les trouver ?
Les nœuds de la bibliothèque sont regroupés en catégories logiques en fonction de leur fonction. Pour plus de détails, consultez la section Bibliothèque de nœuds.
Voici à quoi devrait ressembler votre graphique final.
Voici un résumé de ce que vous avez fait ici :
vous avez choisi le document dans lequel vous vouliez travailler. Dans ce cas (et dans de nombreux autres cas), vous souhaitez travailler dans le document actif de Civil 3D ;
vous avez défini le bloc de destination dans lequel l’objet texte doit être créé (dans ce cas, l’espace objet) ;
vous avez utilisé un nœud Chaîne pour spécifier le calque sur lequel le texte doit être placé ;
vous avez créé un point à l’aide du nœud Point.ByCoordinates pour définir la position où le texte doit être placé ;
vous avez défini les coordonnées X et Y du point d’insertion du texte à l’aide de deux nœuds Curseur de nombre ;
vous avez utilisé un autre nœud Chaîne pour définir le contenu de l’objet texte ;
enfin, vous avez créé l’objet texte.
Voyons les résultats de votre nouveau graphique !
Une fois de retour dans Civil 3D, assurez-vous que l’onglet Modèle est sélectionné. Le nouvel objet texte créé par Dynamo doit s’afficher.
Si le texte n’est pas visible, vous devrez peut-être exécuter la commande ZOOM -> VERS L’ÉTENDUE pour effectuer un zoom à l’endroit approprié.
Bravo ! Vous allez maintenant modifier le texte.
Dans votre graphique Dynamo, modifiez quelques valeurs d’entrée, telles que la chaîne de texte, les coordonnées du point d’insertion, etc. Vous devriez voir le texte s’actualiser automatiquement dans Civil 3D. Notez également que si vous déconnectez l’un des ports d’entrée, le texte est supprimé. Si vous reconnectez tous les ports, le texte est à nouveau créé.
Pourquoi Dynamo n’insère pas un nouvel objet texte à chaque exécution du graphique ?
Par défaut, Dynamo se « souvient » des objets qu’il crée. Si vous modifiez les valeurs d’entrée du nœud, les objets dans Civil 3D sont mis à jour au lieu de créer de nouveaux objets. Pour en savoir plus sur ce comportement, consultez la section Liaison d’objet.
Cet exemple ne fait qu’effleurer les possibilités offertes par Dynamo for Civil 3D. Poursuivez votre lecture pour en savoir plus !
L’élaboration d’enveloppes cinématiques pour la validation du dégagement est une partie importante de la conception ferroviaire. Dynamo peut être utilisé pour générer des solides pour l’enveloppe au lieu de créer et de gérer des éléments de profil type de projets 3D complexes pour effectuer le travail.
Utiliser des lignes caractéristiques du terrain du projet 3D
Transformer la géométrie entre systèmes de coordonnées
Créer des solides par lissage
Contrôler le comportement des nœuds à l’aide des paramètres de combinaison
Ce graphique peut s’exécuter dans Civil 3D 2020 et les versions ultérieures.
Commencez par télécharger les fichiers d’exemple ci-dessous, puis ouvrez le fichier DWG et le graphique Dynamo.
Voici une présentation de la logique de ce graphique.
Obtenir des lignes caractéristiques du terrain à partir de la ligne de base du projet 3D spécifié
Générer des systèmes de coordonnées le long de la ligne caractéristique du terrain du projet avec l’espacement souhaité
Transformer la géométrie du bloc de profil en systèmes de coordonnées
Lisser un solide entre les contours
Créer les solides dans Civil 3D
Allons-y !
La première étape consiste à obtenir les données du projet 3D. Sélectionnez le modèle de projet 3D par son nom, obtenez une ligne de base spécifique dans le projet 3D, puis une ligne caractéristique du terrain dans la ligne de base par son code de point.
Vous allez maintenant générer des systèmes de coordonnées le long des lignes caractéristiques du terrain du projet 3D entre une abscisse curviligne de départ et de fin donnée. Ces systèmes de coordonnées seront utilisés pour aligner la géométrie du bloc de contour du véhicule sur le projet 3D.
Si vous ne connaissez pas les systèmes de coordonnées, consultez la section Vecteur, plan et système de coordonnées.
Remarquez le symbole XXX dans le coin inférieur droit du nœud. Cela signifie que les paramètres de combinaison du nœud sont définis sur Produit cartésien, ce qui est nécessaire pour générer les systèmes de coordonnées avec les mêmes valeurs d’abscisse curviligne pour les deux lignes caractéristiques du terrain.
Si vous ne connaissez pas la combinaison de nœuds, consultez la section Qu’est-ce qu’une liste.
Vous devez maintenant créer un réseau de contours du véhicule le long des lignes caractéristiques du terrain. Vous allez transformer la géométrie à partir de la définition du bloc de contour du véhicule à l’aide du nœud Geometry.Transform. Il s’agit d’un concept difficile à visualiser, c’est pourquoi, avant d’examiner les nœuds, observez le graphique ci-dessous qui montre ce qui va se passer.
Il s’agit donc essentiellement de prendre la géométrie Dynamo d’une seule définition de bloc unique et de la déplacer ou de la faire pivoter, tout en créant un réseau le long de la ligne caractéristique du terrain. Génial, non ? Voici à quoi ressemble la séquence de nœuds.
Cela permet d’obtenir la définition du bloc à partir du document.
Ces nœuds obtiennent la géométrie Dynamo des objets du bloc.
Ces nœuds définissent essentiellement le système de coordonnées à partir duquel la géométrie est transformée.
Enfin, ce nœud effectue le travail de transformation de la géométrie.
Notez que ce nœud présente la plus longue combinaison.
Voici le résultat dans Dynamo.
Bonne nouvelle : le plus dur est fait. Il ne vous reste plus qu’à générer des solides entre les contours. Cette opération est facile à réaliser avec le nœud Solid.ByLoft.
Voici le résultat. N’oubliez pas qu’il s’agit de solides Dynamo. Vous devez donc encore les créer dans Civil 3D.
La dernière étape consiste à créer les solides générés dans l’espace objet. Vous leur donnerez également une couleur pour qu’ils soient faciles à voir.
Voici un exemple d’exécution du graphique à l’aide du Lecteur Dynamo.
Si vous ne connaissez pas le Lecteur Dynamo, consultez la section Lecteur Dynamo.
Voici quelques suggestions pour élargir les possibilités offertes par ce graphique.
Ajoutez la possibilité d’utiliser différents intervalles d’abscisses curvilignes séparément pour chaque voie.
Divisez les solides en segments plus petits qui peuvent être analysés individuellement pour détecter d’éventuels conflits.
Vérifiez si les solides de l’enveloppe croisent des objets et coloriez ceux qui entrent en conflit.
Nous avons mentionné précédemment que les nœuds sont les blocs de construction principaux d’un graphique Dynamo et qu’ils sont organisés en groupes logiques dans la bibliothèque. Dans Dynamo for Civil 3D, il existe deux catégories (ou étagères) dans la bibliothèque qui contiennent des nœuds dédiés pour travailler avec des objets AutoCAD et Civil 3D, tels que des axes, des contours, des projets 3D, des références de bloc, etc. Le reste de la bibliothèque contient des nœuds qui sont plus génériques par nature et sont cohérents entre toutes les « variantes » de Dynamo (par exemple, Dynamo pour Revit, Dynamo Sandbox, etc.).
Consultez la section Bibliothèque pour plus d’informations sur l’organisation des nœuds de la bibliothèque Dynamo principale.
Nœuds spécifiques pour l’utilisation d’objets AutoCAD et Civil 3D
Nœuds à usage général
Nœuds provenant de packages tiers que vous pouvez installer séparément
En utilisant les nœuds trouvés sous les étagères AutoCAD et Civil 3D, votre graphique Dynamo ne fonctionnera que dans Dynamo for Civil 3D. Si un graphique Dynamo for Civil 3D est ouvert ailleurs (dans Dynamo pour Revit, par exemple), ces nœuds seront signalés par un avertissement et ne s’exécuteront pas..
Pourquoi y a-t-il deux étagères distinctes pour AutoCAD et Civil 3D ?
Cette organisation distingue les nœuds des objets natifs AutoCAD (lignes, polylignes, références de bloc, etc.) des nœuds des objets de Civil 3D (axes, projets 3D, surfaces, etc.). D’un point de vue technique, AutoCAD et Civil 3D sont distincts. AutoCAD est l’application de base, et Civil 3D est construit à partir de celle-ci.
Pour travailler avec les nœuds AutoCAD et Civil 3D, il est important de bien comprendre la hiérarchie des objets dans chaque étagère. Vous vous souvenez de la taxinomie en biologie ? Règne, Embranchement, Classe, Ordre, Famille, Genre, Espèces ? Les objets AutoCAD et Civil 3D sont classés de la même manière. Voici quelques exemples qui illustrent cela.
Prenons l’exemple d’un axe.
Supposons que votre objectif soit de changer le nom de l’axe. À partir de là, le nœud suivant à ajouter est un nœud CivilObject.SetName.
À première vue, cela ne semble pas très intuitif. Qu’est-ce qu’un CivilObject , et pourquoi la bibliothèque n’a-t-elle pas de nœud Alignment.SetName ? La réponse est liée à la réutilisation et à la simplicité. Si vous y réfléchissez bien, le processus de modification du nom d’un objet Civil 3D est le même, qu’il s’agisse d’un axe, d’un projet 3D, d’un profil ou d’autre chose. Ainsi, au lieu d’avoir des nœuds répétitifs qui font essentiellement la même chose (par exemple, Alignment.SetName, Corridor.SetName, Profile.SetName, etc.), il serait logique d’intégrer cette fonctionnalité dans un seul nœud. C’est exactement ce que fait CivilObject.SetName !
Il est également intéressant de réfléchir à cette question en termes de relations. Un axe et un projet 3D sont des objets Civil, tout comme une pomme et une poire sont des fruits. Les nœuds d’objet Civil s’appliquent à tout type d’objet Civil, de la même manière que vous pouvez utiliser un seul éplucheur pour éplucher une pomme et une poire. La cuisine deviendrait très encombrée si vous disposiez d’un éplucheur différent pour chaque type de fruit ! Ainsi, la bibliothèque de nœuds Dynamo est comme votre cuisine.
Maintenant, allons plus loin. Supposons que vous souhaitiez modifier le calque de l’axe. Pour ce faire, vous devez utiliser le nœud Object.SetLayer.
Pourquoi n’existe-t-il pas de nœud appelé CivilObject.SetLayer ? Les mêmes principes de réutilisation et de simplicité que nous avons évoqués précédemment s’appliquent ici. La propriété de calque est commune à tous les objets dans AutoCAD pouvant être dessiné ou inséré, tel qu’une ligne, une polyligne, du texte, une référence de bloc, etc. Les objets Civil 3D tels que les axes et les projets 3D sont de la même catégorie. Par conséquent, tout nœud qui s’applique à un objet peut également être utilisé avec n’importe quel objet Civil.
Dynamo for Civil 3D offre le paradigme de la programmation visuelle aux ingénieurs et aux concepteurs travaillant sur des projets d’infrastructures civiles. Vous pouvez considérer Dynamo comme une sorte d’outil multiple numérique pour les utilisateurs de Civil 3D. Peu importe la tâche à accomplir, il dispose de l’outil adéquat pour la réaliser. Son interface intuitive vous permet de créer des routines puissantes et personnalisables sans écrire une seule ligne de code. Vous n’avez pas besoin d’être programmeur pour utiliser Dynamo, mais vous devez être capable de penser avec la logique d’un programmeur. Associé aux autres chapitres du guide, ce chapitre vous aidera à développer vos compétences en logique afin que vous puissiez réaliser n’importe quelle tâche avec une pensée computationnelle.
Dynamo a été introduit pour la première fois dans Civil 3D 2020 et a continué à évoluer depuis. Initialement installé séparément via une mise à jour logicielle, il est désormais fourni avec toutes les versions de Civil 3D. Selon la version de Civil 3D que vous utilisez, vous pouvez remarquer que l’interface de Dynamo est légèrement différente des exemples présentés dans ce chapitre. En effet, celle-ci a fait l’objet d’une refonte importante dans Civil 3D 2023.
Nous vous recommandons de consulter le blog de Dynamo pour obtenir les informations les plus récentes concernant le développement de Dynamo. Le tableau ci-dessous résume les principales étapes du cycle de vie de Dynamo for Civil 3D.
Lors de l’ajout de canalisations et de structures à un réseau de canalisations, Civil 3D utilise un modèle pour attribuer automatiquement des noms. Ceci est généralement suffisant lors du placement initial, mais les noms devront inévitablement être modifiés à l’avenir, au fur et à mesure de l’évolution de la conception. En outre, il existe de nombreux modèles de dénomination différents qui peuvent être nécessaires, par exemple en nommant les structures de manière séquentielle dans un tronçon en commençant par la structure la plus en aval, ou en suivant un modèle de dénomination qui s’aligne sur le schéma de données des autorités locales. Cet exemple montre comment utiliser Dynamo pour définir n’importe quel type de stratégie de dénomination et l’appliquer de manière cohérente.
Utiliser des zones de délimitation
Filtrer des données à l’aide du nœud List.FilterByBoolMask
Trier des données à l’aide du nœud List.SortByKey
Générer et modifier des chaînes de texte
Ce graphique peut s’exécuter dans Civil 3D 2020 et les versions ultérieures.
Commencez par télécharger les fichiers d’exemple ci-dessous, puis ouvrez le fichier DWG et le graphique Dynamo.
Voici une présentation de la logique de ce graphique.
Sélectionner les structures par calque
Obtenir les emplacements de la structure
Filtrer les structures par décalage, puis les trier par abscisse curviligne
Générer les nouveaux noms
Renommer les structures
Allons-y !
La première chose à faire est de sélectionner toutes les structures que vous souhaitez utiliser. Pour ce faire, il suffit de sélectionner tous les objets d’un calque donné, ce qui signifie que vous pouvez sélectionner des structures de différents réseaux de canalisations (en supposant qu’elles partagent le même calque).
Ce nœud permet de s’assurer qu’aucun type d’objet indésirable susceptible de partager la même couche que les structures n’est récupéré accidentellement.
Maintenant que vous disposez des structures, vous devez déterminer leur position dans l’espace afin de pouvoir les trier en fonction de leur emplacement. Pour ce faire, vous allez utiliser la zone de délimitation de chaque objet. La zone de délimitation d’un objet est la boîte de taille minimale qui contient entièrement l’étendue géométrique de l’objet. En calculant le centre de la zone de délimitation, vous obtenez une assez bonne approximation du point d’insertion de la structure.
Vous utiliserez ces points pour obtenir l’abscisse curviligne et le décalage des structures par rapport à un axe sélectionné.
C’est là que les choses commencent à se compliquer. À ce stade, vous avez une grande liste de toutes les structures du calque que vous avez spécifié et vous avez choisi un axe pour les trier. Cependant, il se peut que la liste contienne des structures que vous ne souhaitez pas renommer. Par exemple, il se peut qu’elles ne fassent pas partie de l’exécution qui nous intéresse.
Axe sélectionné
Structures que vous souhaitez renommer
Structures à ignorer
Vous devez donc filtrer la liste des structures de sorte à ne pas prendre en compte celles qui sont supérieures à un certain décalage par rapport à l’axe. Pour ce faire, il est préférable d’utiliser le nœud List.FilterByBoolMask. Après avoir filtré la liste des structures, utilisez le nœud List.SortByKey pour les trier en fonction de leurs valeurs d’abscisse curviligne.
Si vous ne connaissez pas les listes, consultez la section Utilisation des listes.
Vérifier si le décalage de la structure est inférieur à la valeur de seuil
Remplacer toutes les valeurs nulles par false
Filtrer la liste des structures et des abscisses curvilignes
Trier les structures par abscisses curvilignes
La dernière chose à faire est de créer les nouveaux noms des structures. Pour ce faire, vous utiliserez le format <alignment name>-STRC-<number>
. Quelques nœuds supplémentaires permettent d’ajouter des zéros aux nombres si vous le souhaitez (par exemple, « 01 » au lieu de « 1 »).
Enfin, vous renommez les structures.
Voici un exemple d’exécution du graphique à l’aide du Lecteur Dynamo.
Si vous ne connaissez pas le Lecteur Dynamo, consultez la section Lecteur Dynamo.
Il peut être utile de profiter de l’aperçu de l’arrière-plan en 3D de Dynamo pour visualiser les sorties intermédiaires du graphique au lieu du seul résultat final. Vous pouvez facilement afficher les zones de délimitation des structures. En outre, ce jeu de données particulier contient un projet 3D dans le document, de sorte que nous pouvons importer la géométrie des lignes caractéristiques du terrain du projet 3D dans Dynamo pour fournir un contexte pour l’emplacement des structures dans l’espace. Si le graphique est utilisé sur un jeu de données qui ne possède pas de projet 3D, ces nœuds ne feront rien.
Vous comprenez maintenant mieux comment fonctionne le processus de filtrage des structures par décalage.
Voici quelques suggestions pour élargir les possibilités offertes par ce graphique.
Renommez les structures en fonction de leur axe le plus proche plutôt que de sélectionner un axe spécifique.
Renommez les canalisations en plus des structures.
Définissez les calques des structures en fonction de leur exécution.
L’utilisation de points et de groupes de points COGO dans Civil 3D est un élément essentiel de nombreux processus, du levé topographique aux figures Dynamo est particulièrement efficace en matière de gestion des données. Le présent exemple illustre un cas d’utilisation potentiel.
Utilisation des listes
Regrouper des objets similaires avec le nœud List.GroupByKey
Afficher une sortie personnalisée dans le Lecteur Dynamo
Ce graphique peut s’exécuter dans Civil 3D 2020 et les versions ultérieures.
Commencez par télécharger les fichiers d’exemple ci-dessous, puis ouvrez le fichier DWG et le graphique Dynamo.
Voici une présentation de la logique de ce graphique.
Obtenir tous les points COGO dans le document
Regrouper les points COGO par description
Créer des groupes de points
Générer un résumé dans le Lecteur Dynamo
Allons-y !
La première étape consiste à obtenir tous les groupes de points du document, puis tous les points COGO au sein de chaque groupe. Vous obtiendrez ainsi une liste imbriquée ou « liste de listes », qui sera plus facile à utiliser ultérieurement si vous aplanissez tous les éléments pour en faire une liste unique à l’aide du nœud List.Flatten.
Si vous ne connaissez pas les listes, consultez la section Utilisation des listes.
Maintenant que vous disposez de tous les points COGO, vous devez les séparer en groupes en fonction de leur description. C’est exactement ce que fait le nœud List.GroupByKey. Il regroupe tous les éléments qui partagent la même clé.
le plus dur est fait ! La dernière étape consiste à créer de nouveaux groupes de points Civil 3D à partir des points COGO regroupés.
Lorsque vous exécutez le graphique, il n’y a rien à voir dans l’aperçu de l’arrière-plan de Dynamo, car vous ne travaillez pas avec une géométrie. Le seul moyen de savoir si le graphique a été exécuté correctement est donc de vérifier la fenêtre d’outils ou d’examiner les aperçus de sortie des nœuds. Cependant, si vous exécutez le graphique à l’aide du Lecteur Dynamo, vous pouvez fournir plus d’informations sur les résultats du graphique en générant un résumé des groupes de points qui ont été créés. Il vous suffit de cliquer avec le bouton droit de la souris sur un nœud et de lui attribuer la valeur Résultat effectif. Dans ce cas, utilisez un nœud de visualisation renommé pour afficher les résultats.
Voici un exemple d’exécution du graphique à l’aide du Lecteur Dynamo.
Si vous ne connaissez pas le Lecteur Dynamo, consultez la section Lecteur Dynamo.
Voici quelques suggestions pour élargir les possibilités offertes par ce graphique.
Modifiez le regroupement des points pour qu’il soit basé sur la description complète au lieu de la description brute.
Regroupez les points selon d’autres catégories prédéfinies que vous choisissez (par exemple, « Prises de vue au sol », « Monuments », etc.)
Créer automatiquement des surfaces triangulées pour les points de certains groupes.
Le Lecteur Dynamo offre une méthode simplifiée pour exécuter des graphiques Dynamo dans Civil 3D. Une fois les graphiques créés, aucune expertise de Dynamo n’est requise pour utiliser le lecteur et exécuter les graphiques. Cela facilite le partage de graphiques avec d’autres utilisateurs qui ne souhaitent pas forcément étudier en détail les nœuds et les fils.
Pour plus d’informations sur le Lecteur Dynamo dans Civil 3D, reportez-vous à la documentation fournie sur le site de l’aide de Civil 3D.
Les packages Dynamo sont des jeux d’outils développés par des tiers afin d’étendre les fonctionnalités de base de Dynamo. Ils sont accessibles à tous et peuvent être téléchargés d’un simple clic.
Consultez la section Packages pour découvrir comment bien débuter avec les packages.
Voici une liste de certains des packages les plus populaires qui peuvent faire passer vos graphiques Dynamo for Civil 3D au niveau supérieur.
Le boîte à outils Civil 3D est un package Dynamo for Civil 3D qui apporte des améliorations significatives aux fonctionnalités de Dynamo grâce à un large éventail de nœuds supplémentaires.
Camber est un package open source de Dynamo for Civil 3D qui inclut des centaines de nœuds pour travailler avec des étiquettes, des Xrefs, des raccourcis de données, des styles, et plus encore.
CivilConnection est un package open source de Dynamo pour Revit qui permet l’échange d’informations entre Civil 3D, Dynamo et Revit.
Les nœuds Arkance Systems sont un package Dynamo for Civil 3D contenant une grande variété de nœuds utiles pour travailler avec les dimensions, les tableaux, les vues, Drill Control, et bien plus encore.
Dynamo for Civil 3D contient un mécanisme très puissant qui « se souvient » des objets créés par chaque nœud. Ce mécanisme est appelé Liaison d’objet et permet à un graphique Dynamo de produire des résultats cohérents chaque fois qu’il est exécuté dans le même document. Bien que cela soit souhaitable dans de nombreuses situations, il est possible que vous vouliez avoir plus de contrôle sur le comportement de Dynamo dans d’autres cas. Cette section vous aidera à comprendre le fonctionnement de la liaison d’objet et comment en tirer parti.
Prenons l’exemple de ce graphique qui crée un cercle dans l’espace objet sur le calque courant.
Remarquez ce qui se passe lorsque le rayon est modifié.
Voilà une démonstration de la liaison d’objet. Par défaut, Dynamo modifie le rayon du cercle, plutôt que de créer un nouveau cercle à chaque fois que la valeur du rayon change. Ceci est dû au fait que le nœud Object.ByGeometry « se souvient » qu’il a créé ce cercle spécifique à chaque exécution du graphique. De plus, Dynamo stocke cette information de sorte que lors de la prochaine ouverture du document Civil 3D et de l’exécution du graphique, celui-ci aura exactement le même comportement.
Voyons un exemple dans lequel vous voudriez changer le comportement par défaut des liaisons d’objet dans Dynamo. Supposons que vous souhaitiez créer un graphique qui place un texte au milieu d’un cercle. Vous souhaitez également que ce graphique puisse être exécuté à plusieurs reprises et qu’il place un nouveau texte à chaque fois, quel que soit le cercle sélectionné. Voici à quoi ce graphique pourrait ressembler.
Cependant, ceci se produit lorsque vous sélectionnez un autre cercle.
Il semble que le texte soit supprimé et recréé à chaque exécution du graphique. En réalité, la position du texte est modifiée en fonction du cercle sélectionné. Il s’agit donc du même texte, mais à un autre endroit ! Afin de créer un nouveau texte à chaque fois, vous devez modifier les paramètres de liaison d’objet de Dynamo pour qu’aucune donnée de liaison ne soit conservée (consultez la partie #binding-settings ci-dessous).
Après avoir effectué ce changement, vous obtenez le comportement que vous recherchez.
Dynamo for Civil 3D permet de modifier le comportement par défaut des liaison d’objet via les paramètres Stockage des données de liaison du menu de Dynamo.
Notez que les options de stockage des données de liaison sont disponibles dans Civil 3D 2022.1 et dans les versions ultérieures.
Toutes les options sont activées par défaut. Voici un résumé des effets de chaque option.
Lorsque cette option est activée, Dynamo « oublie » les objets qu’il a créés lors de la dernière exécution du graphique. Le graphique peut être exécuté dans n’importe quel dessin, dans n’importe quelle situation, et il créera des objets à chaque fois.
Quand l’utiliser
Utilisez cette option lorsque vous souhaitez que Dynamo « oublie » tout ce qu’il a fait lors des exécutions précédentes et crée de nouveaux objets à chaque fois.
Cette option signifie que les métadonnées de liaison d’objet seront sérialisées dans le graphique (fichier .dyn) lors de son enregistrement. Si vous fermez/rouvrez le graphique et l’exécutez dans le même dessin, tout devrait fonctionner comme vous l’avez laissé. Si vous exécutez le graphique dans un autre dessin, les données de liaison seront supprimées du graphique et de nouveaux objets seront créés. Cela signifie que si vous ouvrez le dessin d’origine et exécutez à nouveau le graphique, de nouveaux objets seront créés en plus des anciens.
Quand l’utiliser
Utilisez cette option lorsque vous souhaitez que Dynamo « se souvienne » des objets qu’il a créés la dernière fois qu’il s’est exécuté dans un dessin spécifique.
Cette option convient mieux aux situations où il est possible de maintenir un rapport 1:1 entre un dessin spécifique et un graphique Dynamo. Les options 1 et 3 sont mieux adaptées aux graphiques conçus pour s’exécuter sur plusieurs dessins.
Cette option est similaire à l’option 2, sauf que les données de liaison d’objet sont sérialisées dans le dessin au lieu du graphique (fichier .dyn). Si vous fermez/rouvrez le graphique et l’exécutez dans le même dessin, tout devrait fonctionner comme vous l’avez laissé. Si vous exécutez le graphique dans un autre dessin, les données de liaison sont conservées dans le dessin d’origine, car elles sont enregistrées dans le dessin et non dans le graphique.
Quand l’utiliser
Utilisez cette option lorsque vous souhaitez utiliser le même graphique sur plusieurs dessins et que Dynamo « se souvienne » de ce qu’il a fait dans chacun d’eux.
La première chose à noter avec cette option est qu’elle n’a aucun effet sur la façon dont le graphique interagit avec le dessin lorsqu’il est exécuté via l’interface principale de Dynamo. Cette option s’applique uniquement lorsque le graphique est exécuté à l’aide du Lecteur Dynamo.
Si vous ne connaissez pas le Lecteur Dynamo, consultez la section Lecteur Dynamo.
Si vous exécutez le graphique en utilisant l’interface principale de Dynamo, puis fermez et exécutez le même graphique en utilisant le Lecteur Dynamo, il créera de nouveaux objets en plus de ceux qu’il a créés auparavant. Cependant, une fois que le Lecteur Dynamo a exécuté le graphique une fois, il sérialisera les données de liaison d’objet dans le dessin. Ainsi, si vous exécutez le graphique plusieurs fois via le Lecteur Dynamo, il mettra à jour les objets au lieu d’en créer de nouveaux. Si vous exécutez le graphique via le Lecteur Dynamo sur un autre dessin, les données de liaison sont toujours conservées dans le dessin d’origine, car elles sont enregistrées dans le dessin et non dans le graphique.
Quand l’utiliser
Utilisez cette option lorsque vous souhaitez exécuter un graphique à l’aide du Lecteur Dynamo sur plusieurs dessins et que vous souhaitez qu’il « se souvienne » de ce qu’il a fait dans chacun d’eux.
Bien que Dynamo soit un outil de programmation visuelle extrêmement puissant, il est également possible d’aller au-delà des nœuds et des fils et d’écrire du code sous forme de texte. Vous pouvez procéder de deux manières :
écrire en DesignScript à l’aide d’un bloc de code ;
écrire en Python à l’aide d’un nœud Python.
Cette section se concentre sur la manière d’exploiter le langage Python dans l’environnement Civil 3D afin de tirer parti des API .NET d’AutoCAD et de Civil 3D.
Consultez la section Python pour plus d’informations sur l’utilisation du Python dans Dynamo.
AutoCAD et Civil 3D disposent de plusieurs API qui permettent aux développeurs comme vous d’étendre le produit principal avec des fonctionnalités personnalisées. Dans le contexte de Dynamo, ce sont les API .NET gérées qui sont pertinentes. Les liens suivants sont essentiels pour comprendre la structure des API et leur fonctionnement.
Guide du développeur de l’API .NET d’AutoCAD
Guide de référence de l’API .NET d’AutoCAD
Guide du développeur de l’API .NET de Civil 3D
Guide de référence de l’API .NET de Civil 3D
Au fur et à mesure que vous avancez dans cette section, il est possible que vous rencontriez des concepts que vous ne connaissez pas, tels que les bases de données, les transactions, les méthodes, les propriétés, etc. La plupart de ces concepts sont essentiels pour travailler avec les API .NET et ne sont pas spécifiques à Dynamo ou au Python. Cette section du guide n’a pas pour objet d’examiner ces éléments en détail. Nous vous recommandons donc de vous reporter fréquemment aux liens ci-dessus pour plus d’informations.
Lorsque vous modifiez un nouveau nœud Python pour la première fois, il est prérempli avec un modèle de code pour vous aider à démarrer. Voici une analyse du modèle avec des explications sur chaque bloc.
Importe les modules
sys
etclr
, qui sont tous deux nécessaires au bon fonctionnement de l’interpréteur Python. En particulier, le moduleclr
permet de traiter les espaces nom .NET essentiellement comme des packages Python.Charge les assemblages standard (par exemple, les DLL) pour utiliser les API .NET gérées pour AutoCAD et Civil 3D.
Ajoute des références aux espaces nom AutoCAD et Civil 3D standard. Celles-ci sont équivalentes aux directives
using
ouImports
en C# ou VB.NET (respectivement).Les ports d’entrée du nœud sont accessibles à l’aide d’une liste prédéfinie appelée
IN
. Vous pouvez accéder aux données d’un port spécifique à l’aide de son numéro d’index, par exempledataInFirstPort = IN[0]
.Extrait le document et l’éditeur actifs.
Verrouille le document et lance une transaction de base de données.
Vous devez insérer l’essentiel de la logique de votre script ici.
Supprimez le commentaire de cette ligne pour valider la transaction une fois votre travail principal terminé.
Si vous souhaitez générer des données à partir du nœud, affectez-les à la variable
OUT
à la fin de votre script.
Envie de personnaliser ?
Vous pouvez modifier le modèle Python par défaut en modifiant le fichier PythonTemplate.py
situé dans C:\ProgramData\Autodesk\C3D <version>\Dynamo
.
Examinons un exemple pour démontrer certains des concepts essentiels de l’écriture de scripts Python dans Dynamo for Civil 3D.
Voici des exemples de fichiers qui peuvent vous servir de référence pour cet exercice.
Voici une présentation de la logique de ce graphique.
Consulter la documentation relative à l’API Civil 3D
Sélectionner tous les bassins versants du document par nom de calque
« Déballer » les objets Dynamo pour accéder aux membres internes de l’API Civil 3D
Créer des points Dynamo à partir de points AutoCAD
Créer des polycourbes à partir des points
Allons-y !
Avant de commencer à créer le graphique et à écrire le code, il est conseillé de consulter la documentation relative à l’API Civil 3D et de se familiariser avec ses fonctionnalités. Dans ce cas, il existe une propriété dans la classe Bassin versant qui renvoie les points de limite du contour du bassin versant. Notez que cette propriété renvoie un objet Point3dCollection
, que Dynamo ne saura pas traiter En d’autres termes, vous ne pourrez pas créer de polycourbe à partir d’un Point3dCollection
. Par conséquent, vous devrez éventuellement tout convertir en points Dynamo. Nous y reviendrons plus tard.
Vous pouvez maintenant commencer à construire la logique graphique. La première chose à faire est d’obtenir une liste de tous les bassins versants du document. Des nœuds sont disponibles pour cela, il n’est donc pas nécessaire de l’inclure dans le script en Python. L’utilisation de nœuds permet une meilleure visibilité pour quiconque lirait le graphique (au lieu d’ajouter beaucoup de code dans un script Python), et cela permet également au script Python de se concentrer sur une seule chose : renvoyer les points de limite des bassins versants.
Notez ici que la sortie du nœud Tous les objets du calque est une liste de CivilObjects. En effet, Dynamo for Civil 3D ne dispose pas actuellement de nœuds pour travailler avec des bassins versants, ce qui explique pourquoi nous devons accéder à l’API en Python.
Avant d’aller plus loin, il convient d’aborder brièvement un concept important. Dans la section node-library.md, nous avons vu comment les objets CivilObjects sont liés. Pour apporter un peu plus de détails, un objet Dynamo est un wrapper autour d’une entité AutoCAD. De même, un CivilObject Dynamo est un wrapper autour d’une entité Civil 3D. Vous pouvez « déballer » un objet en accédant à ses propriétés InternalDBObject
ou InternalObjectId
.
En règle générale, il est plus sûr d’obtenir l’ID de l’objet à l’aide de la propriété InternalObjectId
, puis d’accéder à l’objet enveloppé dans une transaction. En effet, la propriété InternalDBObject
renvoie un objet DBObject AutoCAD qui n’est pas accessible en écriture.
Voici le script Python complet qui permet d’accéder aux objets internes du bassin versant et d’obtenir leurs point de limite. Les lignes en surbrillance représentent celles qui sont modifiées/ajoutées par rapport au modèle de code par défaut.
Cliquez sur le texte souligné dans le script pour obtenir une explication sur chaque ligne.
En règle générale, il est recommandé d’inclure l’essentiel de la logique de votre script dans une transaction. Cela garantit un accès sécurisé aux objets que votre script lit/écrit. Dans de nombreux cas, l’omission d’une transaction peut provoquer une erreur irrécupérable.
À ce stade, le script Python doit produire une liste de points Dynamo que vous pouvez voir dans l’aperçu en arrière-plan. La dernière étape consiste simplement à créer des polycourbes à partir des points. Notez que cette opération pourrait également être réalisée directement dans le script Python, mais vous l’avez intentionnellement placée en dehors du script dans un nœud afin qu’elle soit plus visible. Voici à quoi ressemble le graphique final.
Et voici la géométrie Dynamo finale.
Une petite remarque avant de conclure. Selon la version de Civil 3D que vous utilisez, le nœud Python peut être configuré différemment. Dans Civil 3D 2020 et 2021, Dynamo utilisait un outil appelé IronPython pour déplacer des données entre des objets .NET et des scripts Python. Cependant, dans Civil 3D 2022, Dynamo est passé à l’utilisation de l’interpréteur Python natif standard (également appelé CPython) qui utilisent Python 3. Les avantages de cette transition comprennent l’accès aux bibliothèques modernes les plus populaires et aux nouvelles fonctionnalités de la plateforme, la maintenance essentielle et les correctifs de sécurité.
Pour en savoir plus sur cette transition et sur la manière de mettre à jour les scripts existants, consultez le blog Dynamo. Si vous souhaitez continuer à utiliser IronPython, il vous suffit d’installer le package DynamoIronPython2.7 à l’aide du gestionnaire de package Dynamo.
Cette ligne récupère la classe spécifique dont nous avons besoin à partir de la bibliothèque de géométries Dynamo. Notez que nous spécifions import Point as DynPoint
ici au lieu de import *
, car cette instruction introduit des conflits d’attribution de noms.
Ici, nous spécifions exactement quel port d’entrée contient les données que nous voulons au lieu du IN
par défaut, qui fait référence à la liste complète de toutes les entrées.
Dynamo est une excellente façon de commencer à coder pour le monde AEC. Pour débuter en matière de codage, consultez les sections suivantes :
Vous avez peut-être remarqué que les noms des nœuds dans Dynamo ont un point commun : chaque nœud utilise la syntaxe « . » sans espaces. Cela est dû au fait que le texte situé en haut de chaque nœud représente la syntaxe réelle pour l’écriture de scripts et que la « . » (ou notation par points) sépare un élément des méthodes que nous pouvons appeler. Cette syntaxe permet de convertir facilement les scripts visuels en scripts basés sur du texte.
Prenons une pomme paramétrique comme analogie générale de la notation par points : comment pouvez-vous la traiter dans Dynamo ? Voici quelques méthodes que vous allez exécuter sur la pomme avant de la manger. (Remarque : il ne s’agit pas de méthodes Dynamo réelles) :
Visible de tous | Notation par points | Sortie |
---|
Je ne sais pas ce que vous en pensez, mais à en juger par les sorties du tableau ci-dessus, cette pomme est très appétissante. Je pense que je vais la manger : Apple.eat().
En ayant à l’esprit l’analogie de la pomme, examinez Point.ByCoordinates et découvrez comment créer un point à l’aide du nœud Code Block.
La syntaxe du nœud Code Block Point.ByCoordinates(0,10);
donne le même résultat qu’un nœud Point.ByCoordinates dans Dynamo, sauf que vous pouvez créer un point à l’aide d’un nœud. Cette opération est plus efficace que la connexion d’un nœud distinct à « X » et « Y ».
L’utilisation de Point.ByCoordinates dans le nœud Code Block vous permet d’indiquer les entrées dans le même ordre que le nœud prêt à l’emploi (X,Y).
Vous pouvez appeler n’importe quel nœud standard dans la bibliothèque par le biais d’un nœud Code Block tant que le nœud n’est pas un nœud d’interface utilisateur spécial : les nœuds dotés d’une fonction d’interface utilisateur spéciale. Par exemple, vous pouvez appeler Circle.ByCenterPointRadius, mais il n’est pas logique d’appeler un nœud Watch 3D.
Il existe généralement trois types de nœuds standard (la plupart des nœuds de votre bibliothèque). La bibliothèque est organisée en fonction de ces catégories. Les méthodes ou les nœuds de ces trois types sont traités différemment lorsqu’ils sont appelés dans un nœud Code Block.
Create : permet de créer (ou de construire) un élément
Action : permet d’effectuer une action sur un élément
Query : permet d’obtenir une propriété d’un élément existant
La catégorie "Create" permet de créer une géométrie à partir de zéro. Vous entrez des valeurs de gauche à droite dans le bloc de code. Ces entrées apparaissent dans le même ordre que les entrées du nœud de haut en bas.
En comparant le nœud Line.ByStartPointEndPoint et la syntaxe correspondante dans le bloc de code, vous obtenez les mêmes résultats.
Une action est une opération effectuée sur un objet de ce type. Pour appliquer une action à un élément, Dynamo utilise la notation par points, commune à de nombreux langages de codage. Une fois que vous avez l’élément, tapez un point, puis le nom de l’action. L’entrée de la méthode de type action est mise entre parenthèses tout comme celle des méthodes de type création. Cependant, il n’est pas nécessaire de spécifier la première entrée que vous voyez sur le nœud correspondant. Au lieu de cela, vous devez indiquer l’élément sur lequel vous effectuez l’action :
Étant donné que le nœud Point.Add est un nœud de type action, la syntaxe fonctionne un peu différemment.
Les entrées sont (1) le point et (2) le vecteur à ajouter. Dans un nœud Code Block, le point (l’élément) est nommé « pt ». Pour ajouter un vecteur nommé *“vec” *to “pt”, écrivez pt.Add(vec) ou : élément, point, action. L’action Ajouter ne possède qu’une seule entrée, ou toutes les entrées du nœud Point.Add sauf la première. La première entrée du nœud Point.Add est le point lui-même.
Les méthodes de type Query permettent d’obtenir une propriété d’un objet. Puisque l’objet lui-même est l’entrée, vous n’avez pas besoin de spécifier d’entrées. Aucune parenthèse n’est requise.
Avec des nœuds, la combinaison est légèrement différente de celle avec le bloc de code. Avec les nœuds, l’utilisateur clique avec le bouton droit de la souris sur le nœud et sélectionne l’option de combinaison à effectuer. Avec Code Block, l’utilisateur dispose d’un contrôle bien plus précis sur la structure des données. La méthode de raccourci du bloc de code utilise des guides de réplication pour définir la manière dont plusieurs listes unidimensionnelles sont associées. Les nombres mis entre crochets angulaires « <> » définissent la hiérarchie de la liste imbriquée obtenue : <1>,<2>,<3>, etc.
Dans cet exemple, un raccourci est utilisé pour définir deux intervalles (vous trouverez plus d’informations sur le raccourci dans la section suivante de ce chapitre). En résumé,
0..1;
équivaut à{0,1}
et-3..-7
à{-3,-4,-5,-6,-7}
. Le résultat vous donne des listes de 2 valeurs X et 5 valeurs Y. Si vous n’utilisez pas de guides de réplication avec ces listes incohérentes, vous obtenez une liste de deux points, correspondant à la longueur de la liste la plus courte. Les guides de réplication vous permettent de trouver toutes les liaisons possibles de 2 et 5 coordonnées (ou, un Produit cartésien).La syntaxe Point.ByCoordinates
(x_vals<1>,y_vals<2>);
vous permet d’obtenir deux listes contenant chacune cinq éléments.La syntaxe Point.ByCoordinates
(x_vals<2>,y_vals<1>);
vous permet d’obtenir cinq listes contenant chacune deux éléments.
Avec cette notation, vous pouvez également indiquer le type de liste dominant : 2 listes de 5 éléments ou 5 listes de 2 éléments. Dans cet exemple, la modification de l’ordre des guides de réplication crée une liste de lignes de points ou une liste de colonnes de points dans une grille.
Bien que les méthodes de bloc de code susmentionnées puissent prendre en charge certains éléments, Dynamo inclut une fonctionnalité appelée "Nœud vers code" qui facilite le processus. Pour utiliser cette fonction, sélectionnez un réseau de nœuds dans votre graphique Dynamo, cliquez avec le bouton droit de la souris sur la zone de dessin et sélectionnez "Nœud vers code". Dynamo convertit ces nœuds en bloc de code, avec toutes les entrées et sorties ! Non seulement cet outil est idéal pour découvrir les blocs de code, mais il vous permet également de travailler avec un graphique Dynamo paramétrique et plus efficace. Ne manquez pas la fin de l’exercice ci-dessous : vous découvrirez l’utilisation de « Nœud vers code ».
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d’exemple dans l’annexe.
Pour afficher la puissance du bloc de code, vous allez convertir une définition de champ d’attraction existante en formulaire de bloc de code. L’utilisation d’une définition existante montre comment le bloc de code est lié aux scripts visuels et est utile pour découvrir la syntaxe DesignScript.
Commencez par recréer la définition dans l’image ci-dessus (ou en ouvrant le fichier d’exemple).
Notez que la liaison sur Point.ByCoordinates a été définie sur Produit cartésien.
Chaque point d’une grille est déplacé vers le haut dans la direction Z en fonction de sa distance par rapport au point de référence.
Une surface est recréée et épaissie, créant ainsi un renflement dans la géométrie par rapport à la distance par rapport au point de référence.
Commencez par définir le point de référence : Point.ByCoordinates
(x,y,0);
. Utilisez la même syntaxe Point.ByCoordinates que celle spécifiée dans la partie supérieure du nœud du point de référence.Les variables x et y sont insérées dans le nœud Code Block afin que vous puissiez les mettre à jour de façon dynamique avec des curseurs.
Ajoutez des curseurs aux entrées du nœud Code Block qui vont de -50 à 50. Vous pouvez ainsi étendre la grille Dynamo par défaut.
Dans la deuxième ligne du nœud Code Block, définissez un raccourci pour remplacer le nœud Number Sequence :
coordsXY = (-50..50..#11);
. Vous en saurez plus dans la section suivante. Pour le moment, notez que ce raccourci est équivalent au nœud Number Sequence dans le script visuel.
Vous devez désormais créer une grille de points à partir de la séquence coordsXY. Pour ce faire, utilisez la syntaxe Point.ByCoordinates, et lancez un Produit cartésien de la liste de la même manière que dans le script visuel. Pour ce faire, tapez la ligne :
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);
. Les crochets angulaires indiquent la référence du produit vectoriel.Le nœud Watch3D présente une grille de points sur la grille Dynamo.
Difficulté : déplacer la grille de points vers le haut en fonction de leur distance par rapport au point de référence. Tout d’abord, appelez ce nouvel ensemble de points transPts. Étant donné qu’une conversion est une action sur un élément existant, au lieu d’utiliser
Geometry.Translate...
, utilisezgridPts.Translate
.Le nœud réel sur la zone de dessin indique trois entrées. La géométrie à convertir est déjà déclarée, car vous effectuez l’action sur cet élément (avec gridPts.Translate). Les deux entrées restantes seront insérées entre les parenthèses de la fonction : direction et distance.
La direction est assez simple : utilisez un nœud
Vector.ZAxis()
pour vous déplacer verticalement.La distance entre le point de référence et chaque point de grille doit encore être calculée. Pour ce faire, effectuez une action au point de référence de la même manière :
refPt.DistanceTo(gridPts)
.La dernière ligne de code donne les points convertis :
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
Vous disposez à présent d’une grille de points avec la structure de données appropriée pour créer une surface NURBS. Construisez la surface en utilisant
srf = NurbsSurface.ByControlPoints(transPts);
.
Enfin, pour ajouter de la profondeur à la surface, construisez un solide en utilisant
solid = srf.Thicken(5);
. Dans ce cas, la surface a été épaissie de 5 unités dans le code, mais vous pouvez toujours déclarer cela comme variable (en l’appelant épaisseur, par exemple), puis contrôler cette valeur avec un curseur.
La fonctionnalité "Nœud vers code" permet d'automatiser d'un simple clic l'ensemble de l'exercice que vous venez de réaliser. Non seulement cette fonctionnalité est très utile pour créer des définitions personnalisées et des blocs de code réutilisables, mais elle est également un outil très pratique pour apprendre à utiliser des scripts dans Dynamo :
Commencez par le script visuel existant de l’étape 1 de l’exercice. Sélectionnez tous les nœuds, cliquez avec le bouton droit de la souris sur la zone de dessin et sélectionnez « Nœud vers code ». C’est aussi simple que ça.
Dynamo a automatisé une version texte du graphique visuel, de la combinaison, etc. Testez cette opération sur vos scripts visuels et libérez la puissance du bloc de code !
Les fonctions peuvent être créées dans un bloc de code et rappelées ailleurs dans une définition Dynamo. Cela permet de créer un autre calque de contrôle dans un fichier paramétrique et de l'afficher en tant que version de texte d'un nœud personnalisé. Dans ce cas, le bloc de code "parent" est facilement accessible et peut être situé n'importe où sur le graphique. Aucun fil n'est nécessaire.
La première ligne comporte le mot clé "def", puis le nom de la fonction, puis les noms des entrées entre parenthèses. Les contreventements définissent le corps de la fonction et renvoient une valeur avec "return =". Les nœuds Code Block qui définissent une fonction ne disposent pas de ports d’entrée ou de sortie, car ils sont appelés à partir d’autres nœuds Code Block.
Appelez la fonction avec un autre noeud Code Block dans le même fichier en donnant le nom et le même nombre d'arguments. Cela fonctionne comme les nœuds prêts à l’emploi de votre bibliothèque.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans cet exercice, vous allez créer une définition générique permettant d'obtenir des sphères à partir d'une liste de points d'entrée. Le rayon de ces sphères est défini par la propriété Z de chaque point.
Commencez par une plage de dix valeurs allant de 0 à 100. Connectez-les à un nœud Point.ByCoordinates afin de créer une ligne diagonale.
Créez un nœud Code Block et introduisez votre définition.
Utilisez les lignes de code suivantes :
Le terme inputPt est le nom donné pour représenter les points qui contrôlent la fonction. Pour l’instant, la fonction ne fait rien, mais vous allez la construire dans les étapes à venir.
L’ajout de la fonction Code Block permet de placer un commentaire et une variable sphereRadius qui interroge la position Z de chaque point. N’oubliez pas que inputPt.Z n’a pas besoin de parenthèses comme méthode. Il s’agit d’une requête des propriétés d’un élément existant, donc aucune entrée n’est nécessaire :
Rappelez-vous la fonction créée dans un autre nœud Code Block. Si vous double-cliquez sur la zone de dessin pour créer un Code Block et que vous tapez sphereB, Dynamo suggère la fonction sphereByZ que vous avez définie. Votre fonction a été ajoutée à la bibliothèque Intellisense. Bien.
Vous allez maintenant appeler la fonction et créer une variable appelée Pt afin de connecter les points créés dans les étapes précédentes :
La sortie ne contient que des valeurs nulles. Pourquoi ? Lorsque vous avez défini la fonction, vous avez calculé la variable sphereRadius, mais vous n’avez pas défini ce que la fonction doit renvoyer en tant que sortie. Vous pourrez résoudre ce problème à l’étape suivante.
Une étape importante consiste à définir la sortie de la fonction en ajoutant la ligne
return = sphereRadius;
à la fonction sphereByZ.La sortie du nœud Code Block indique désormais les coordonnées Z de chaque point.
Modifiez la fonction Parent pour créer des sphères réelles.
Commencez par définir une sphère avec la ligne de code suivante :
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
Ensuite, modifiez la valeur renvoyée pour la définir comme sphere au lieu de sphereRadius :
return = sphere;
Vous obtenez ainsi des sphères géantes dans l’aperçu de Dynamo.
1. Pour modifier la taille de ces sphères, mettez à jour la valeur sphereRadius en ajoutant un séparateur :
sphereRadius = inputPt.Z/20;
Les sphères distinctes sont maintenant visibles et la relation entre le rayon et la valeur Z devient plus claire.
Sur le nœud Point.ByCoordinates, remplacez la liaison Liste la plus courte par Produit cartésien afin de créer une grille de points. La fonction sphereByZ reste pleinement effective, de sorte que tous les points créent des sphères avec des rayons fondés sur des valeurs Z.
Pour tâter le terrain, connectez simplement la liste de nombres d’origine à l’entrée X de Point.ByCoordinates. Vous obtenez ainsi un cube de sphères.
Remarque : si le calcul sur votre ordinateur prend beaucoup de temps, essayez de remplacer nº 10 par un autre élément, nº 5 par exemple.
N’oubliez pas que la fonction sphereByZ créée est générique. Vous pouvez donc rappeler l’hélice d’une leçon précédente et lui appliquer la fonction.
Dernière étape : déterminez le rapport des rayons avec un paramètre défini par l’utilisateur. Pour ce faire, vous devez créer une entrée pour la fonction et remplacer également le séparateur 20 par un paramètre.
Remplacez la définition de sphereByZ par :
Mettez à jour les nœuds Code Block enfant en ajoutant une variable ratio à l’entrée :
sphereByZ(Pt,ratio);
Connectez un curseur à la nouvelle entrée du nœud Code Block et modifiez la taille des rayons en fonction du rapport des rayons.
L'objet géométrique le plus simple de la bibliothèque de géométries standard Dynamo est un point. L'ensemble de la géométrie est créé à l'aide de fonctions spéciales appelées constructeurs, qui renvoient chacune une nouvelle occurrence de ce type de géométrie particulier. Dans Dynamo, les constructeurs commencent par le nom du type d’objet, ici Point, suivi de la méthode de construction. Pour créer un point tridimensionnel spécifié par les coordonnées cartésiennes X, Y et Z, utilisez le constructeur ByCoordinates :
Les constructeurs dans Dynamo sont généralement désignés par le préfixe « By » et l’appel de ces fonctions renvoie un nouvel objet de ce type. L’objet créé est stocké dans la variable nommée, à gauche du signe égal.
La plupart des objets possèdent plusieurs constructeurs différents. Vous pouvez utiliser le constructeur BySphericalCoordinates pour créer un point se trouvant sur une sphère, spécifié par le rayon de la sphère, un premier angle de rotation et un second angle de rotation (spécifié en degrés) :
Les points peuvent être utilisés pour construire une géométrie dimensionnelle plus importante, telle que des lignes. Vous pouvez utiliser le constructeur ByStartPointEndPoint pour créer un objet Line entre deux points :
De même, les lignes peuvent être utilisées pour créer une géométrie de surface dimensionnelle plus importante, par exemple à l’aide du constructeur Loft, qui prend une série de lignes ou de courbes et interpole une surface entre elles.
Les surfaces peuvent également être utilisées pour créer une géométrie de solide dimensionnelle plus importante, par exemple en épaississant la surface d'une distance spécifiée. De nombreux objets possèdent des fonctions associées, appelées méthodes, permettant au programmeur d’exécuter des commandes sur cet objet particulier. Les méthodes communes à tous les éléments de géométrie incluent Translate et Rotate, qui, respectivement, convertissent (déplacent) et font pivoter la géométrie d’une valeur spécifiée. Les surfaces ont une méthode Thicken, qui requiert une entrée unique, un nombre spécifiant la nouvelle épaisseur de la surface.
Les commandes Intersection permettent d’extraire une géométrie dimensionnelle inférieure à partir d’objets dimensionnels plus élevés. La géométrie dimensionnelle inférieure extraite peut constituer la base d’une géométrie dimensionnelle plus élevée, dans un processus cyclique de création, d’extraction et de recréation géométriques. Dans cet exemple, vous utilisez le solide généré pour créer une surface et la surface pour créer une courbe.
Les blocs de code permettent d'aborder de manière approfondie DesignScript, le langage de programmation au coeur de Dynamo. Conçu à partir de zéro pour prendre en charge les workflows de conception exploratoires, DesignScript est un langage lisible et concis qui offre un retour immédiat aux petits éléments de code et s'adapte aux interactions complexes et importantes. DesignScript constitue également la "colonne vertébrale" du moteur qui pilote la plupart des aspects de Dynamo "sous le capot". Étant donné que la quasi-totalité des fonctionnalités que l’on trouve dans les nœuds et les interactions Dynamo ont une relation individuelle avec le langage de génération de script, il existe des possibilités uniques de se déplacer entre les interactions basées sur les nœuds et la génération de scripts de manière fluide.
Pour les débutants, les nœuds peuvent être automatiquement convertis en syntaxe de texte pour faciliter l’apprentissage de DesignScript ou simplement pour réduire la taille des sections de graphiques plus grandes. Cette opération est effectuée à l’aide d’un processus appelé « Nœud vers code », qui est présenté en détail dans la . Les utilisateurs plus expérimentés peuvent utiliser les blocs de code pour créer des combinaisons personnalisées de fonctionnalités existantes et de relations créées par l’utilisateur à l’aide de nombreux paradigmes de codage standard. Entre l'utilisation par des débutants et celle d'utilisateurs expérimentés, il existe un grand nombre de raccourcis et d'extraits de code qui pourront accélérer vos conceptions. Bien que le terme "bloc de code" soit un peu intimidant pour les utilisateurs qui ne sont pas programmeurs, ce concept est à la fois facile à utiliser et robuste. Un débutant peut utiliser le bloc de code efficacement avec un minimum de codage, et un utilisateur avancé peut définir des définitions de script à utiliser ailleurs dans une définition Dynamo.
Pour faire court, les blocs de code sont une interface de génération de script de texte au sein d’un environnement de script visuel. Ils peuvent être utilisés en tant que nombres, chaînes, formules et autres types de données. Le bloc de code est conçu pour Dynamo, de sorte que l'on peut définir des variables arbitraires dans le bloc de code, et ces variables sont automatiquement ajoutées aux entrées du nœud :
Avec les blocs de code, l’utilisateur peut décider de la méthode de spécification des entrées de manière flexible. Voici plusieurs méthodes pour créer un point de base avec les coordonnées (10, 5, 0) :
Au fur et à mesure que vous découvrez les fonctions disponibles dans la bibliothèque, vous pouvez même constater que saisir « Point.ByCoordinates » est plus rapide que d’effectuer une recherche dans la bibliothèque et trouver le nœud approprié. Lorsque vous tapez « Point » par exemple, Dynamo affiche une liste des fonctions possibles à appliquer à un point. Cela rend le script plus intuitif et aide à apprendre comment appliquer les fonctions dans Dynamo.
Le bloc de code se trouve dans Core > Entrée > Actions > Bloc de code. Pour aller plus vite, il suffit de cliquer deux fois sur la zone de dessin pour afficher le bloc de code. Ce nœud est si souvent utilisé qu’il dispose de privilèges de double-clic.
Les blocs de code sont également flexibles en ce qui concerne les types de données. L'utilisateur peut rapidement définir des nombres, des chaînes et des formules, et le bloc de code fournit la sortie souhaitée.
Dans l'image ci-dessous, vous pouvez voir que la manière "classique" de faire les choses est un peu longue : l'utilisateur recherche le nœud voulu dans l'interface, ajoute le nœud à la zone de dessin, puis saisit les données. Avec le bloc de code, l'utilisateur peut double-cliquer sur la zone de dessin pour afficher le nœud et entrer le type de données correct avec la syntaxe de base.
Les nœuds number, string et formula sont trois exemples de nœuds Dynamo qui sont probablement obsolètes par rapport au bloc de code.
« La vieille école »
Nœuds Code Block
Bien que Dynamo soit capable de créer diverses formes géométriques complexes, les primitives géométriques simples constituent la base de toute conception informatique. Elles sont soit directement exprimées dans la forme finale de la conception, soit utilisées comme armature à partir de laquelle une géométrie plus complexe est générée.
Bien qu'il ne s'agisse pas d'une partie de la géométrie à strictement parler, le CoordinateSystem est un outil important pour la construction d'une géométrie. Un objet CoordinateSystem conserve une trace des transformations de position et géométriques, telles que la rotation, la transvection et la mise à l'échelle.
La création d’un CoordinateSystem centré sur un point avec x = 0, y = 0, z = 0, sans rotation ni transformation de transvection ni de mise à l’échelle, requiert simplement l’appel du constructeur Identity :
Les CoordinateSystems avec transformations géométriques dépassent la portée de ce chapitre, bien qu’un autre constructeur vous permette de créer un système de coordonnées à un point spécifique, à savoir CoordinateSystem.ByOriginVectors :
La primitive géométrique la plus simple est un point, représentant un emplacement à zéro dimension dans un espace tridimensionnel. Comme indiqué précédemment, il existe plusieurs méthodes pour créer un point dans un système de coordonnées particulier : Point.ByCoordinates crée un point avec les coordonnées x, y et z spécifiées ; Point.ByCartesianCoordinates crée un point avec les coordonnées x, y et z dans un système de coordonnées spécifique ; Point.ByCylindricalCoordinates crée un point se trouvant sur un cylindre, avec rayon, angle de rotation et hauteur ; et Point.BySphericalCoordinates crée un point situé sur une sphère avec un rayon et deux angles de rotation.
Cet exemple montre des points créés sur différents systèmes de coordonnées :
La primitive Dynamo dimensionnelle supérieure suivante est un segment de ligne, représentant un nombre infini de points entre deux extrémités. Les lignes peuvent être créées en spécifiant explicitement les deux points de limite avec le constructeur Line.ByStartPointEndPoint, ou en spécifiant un point de départ, une direction et une longueur dans cette direction, Line.ByStartPointDirectionLength.
Dynamo comporte des objets représentant les principaux types de primitives géométriques de base en trois dimensions : des cuboïdes créés avec Cuboid.ByLengths ; des cônes créés avec Cone.ByPointsRadius et Cone.ByPointsRadii ; des cylindres créés avec Cylinder.ByRadiusHeight ; et des sphères créées avec Sphere.ByCenterPointRadius.
Ce guide n’est que le début de votre aventure avec Dynamo for Civil 3D. Une communauté dynamique d’utilisateurs de Dynamo met à votre disposition une grande quantité de connaissances. Consultez ces ressources au fur et à mesure de votre apprentissage.
Il existe quelques méthodes de base pour raccourcir le bloc de code qui simplifient énormément la gestion des données. Vous allez découvrir les concepts de base ci-dessous et comprendre comment ce raccourci peut être utilisé à la fois pour créer et interroger des données.
La méthode de définition des intervalles et des séquences peut être réduite au raccourci de base. Utilisez l'image ci-dessous comme guide de la syntaxe ".." pour définir une liste de données numériques avec un bloc de code. Après avoir obtenu l’arrêt de cette notation, la création de données numériques est un processus vraiment efficace :
Dans cet exemple, un intervalle de nombres est remplacé par la syntaxe Code Block de base définissant
beginning..end..step-size;
. Voici le résultat représenté numériquement :0..10..1;
Notez que la syntaxe
0..10..1;
est équivalente à0..10;
. Une taille de pas de 1 est la valeur par défaut de la notation abrégée. Par conséquent,0..10;
donne une séquence de 0 à 10 avec une taille de pas de 1.L’exemple du nœud Sequence est similaire, sauf que vous devez utiliser « # » pour indiquer que vous voulez 15 valeurs dans la liste, plutôt qu’une liste qui atteint 15. Dans ce cas, vous définissez :
beginning..#ofSteps..step-size:
. La syntaxe réelle de la séquence est0..#15..2
.Placez « # » de l’étape précédente dans la partie « taille de pas » de la syntaxe. À présent, vous avez un intervalle de nombres qui s’étend du « début » à la « fin » et la notation « taille de pas » distribue uniformément un certain nombre de valeurs entre les deux valeurs :
beginning..end..#ofSteps
.
La création d'intervalles avancés vous permet de travailler avec une liste de listes en toute simplicité. Dans les exemples ci-dessous, découvrez comment isoler une variable de la notation d’intervalle principale et créer une autre série de cette liste.
1. En créant des intervalles imbriqués, comparez la notation avec « # » et la notation sans. La même logique s’applique aux intervalles de base, à la différence qu’elle devient un peu plus complexe.
2. Vous pouvez définir un sous-intervalle à n’importe quel endroit de l’intervalle principal, et avoir aussi deux sous-intervalles.
3. En contrôlant la valeur de « fin » dans un intervalle, vous pouvez créer davantage d’intervalles de longueurs différentes.
À des fins d’exercice de logique, comparez les deux raccourcis ci-dessus et analysez comment les sous-intervalles et la notation # déterminent la sortie résultante.
Outre la création de listes avec un raccourci, vous pouvez également créer des listes à la volée. Ces listes peuvent contenir une large gamme de types d’éléments et peuvent également être interrogées (rappelez-vous que les listes sont des objets en eux-mêmes). Pour résumer, un nœud Code Block vous permet de créer des listes et d’interroger des éléments d’une liste avec des crochets (accolades) :
1. Créez rapidement des listes avec des chaînes et interrogez-les à l’aide de l’index d’éléments.
2. Créez des listes avec des variables et interrogez-les à l’aide de la notation du raccourci d’intervalle.
La gestion de listes imbriquées est un processus similaire. Veillez à l’ordre de la liste et n’oubliez pas d’utiliser plusieurs jeux de crochets :
1. Définissez une liste de listes.
2. Interrogez une liste avec une notation de crochet simple.
3. Interrogez un élément avec une notation entre crochets.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans cet exercice, vous allez perfectionner vos nouvelles compétences en concevant une super surface en coquille d'oeuf définie par des intervalles et des formules. Au cours de cet exercice, vous découvrirez comment utiliser le bloc de code et les nœuds Dynamo existants en tandem : le bloc de code est utilisé pour le gros volume de données, tandis que les nœuds Dynamo sont visuellement disposés pour la lisibilité de la définition.
Commencez par créer une surface en connectant les nœuds ci-dessus. Au lieu d’utiliser un nœud Number pour définir la largeur et la longueur, cliquez deux fois sur la zone de dessin et tapez 100;
dans un nœud Code Block.
Définissez un intervalle compris entre 0 et 1 et 50 divisions en tapant
0..1..#50
dans un nœud Code Block.Connectez l’intervalle à Surface.PointAtParameter, qui prend les valeurs u et v entre 0 et 1 sur la surface. Pensez à définir la liaison sur Produit cartésien en cliquant avec le bouton droit de la souris sur le nœud Surface.PointAtParameter.
Dans cette étape, vous allez utiliser votre première fonction pour déplacer la grille de points vers le haut sur l’axe Z. Cette grille pilotera une surface générée reposant sur la fonction sous-jacente. Ajoutez de nouveaux nœuds comme illustrés dans l’image ci-dessous.
Au lieu d’utiliser un nœud Formula, utilisez un nœud Code Block avec la ligne :
(0..Math.Sin(x*360)..#50)*5;
. Pour décomposer rapidement cet intervalle, définissez un intervalle contenant une formule. Cette formule est la fonction Sinus. La fonction Sinus reçoit les entrées de degrés dans Dynamo. Ainsi, pour obtenir une onde sinusoïdale complète, multipliez les valeurs x (valeur d'entrée de l'intervalle de 0 à 1) par 360. Ensuite, utilisez le même nombre de divisions que les points de grille de contrôle pour chaque ligne. Définissez donc 50 sous-divisions avec #50. Enfin, le multiplicateur de 5 augmente simplement l’amplitude de la translation de sorte que l’effet soit visible dans l’aperçu Dynamo.
Même si le nœud Code Block précédent fonctionnait correctement, il n’était pas entièrement paramétrique. Étant donné que vous voulez piloter ses paramètres dynamiquement, vous allez remplacer la ligne de l’étape précédente par
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;
. Cela vous donne la possibilité de définir ces valeurs en fonction des entrées.
La modification des curseurs (de 0 à 10) permet d’obtenir des résultats intéressants.
Lorsque vous effectuez une transposition sur l’intervalle de nombres, vous inversez la direction de l’onde du rideau :
transposeList = List.Transpose(sineList);
.
Lorsque vous ajoutez sineList et tranposeLit, vous obtenez une surface en coquille d’œuf déformée :
eggShellList = sineList+transposeList;
.
Modifiez les valeurs de curseurs spécifiées ci-dessous pour retrouver un algorithme « paisible ».
Enfin, recherchez des parties isolées des données avec le nœud Code Block. Pour régénérer la surface avec un intervalle de points spécifique, ajoutez le bloc de code ci-dessus entre le nœud Geometry.Translate et le nœud NurbsSurface.ByPoints. Cette ligne contient la ligne de texte : sineStrips[0..15..1];
. Cela permet de sélectionner les 16 premières lignes de points (sur 50). Recréez la surface. Vous pouvez voir que vous avez généré une partie isolée de la grille de points.
Dans la dernière étape, pour rendre ce nœud Code Block encore plus paramétrique, pilotez la requête en utilisant un curseur compris entre 0 et 1. Pour ce faire, utilisez la ligne de code suivante :
sineStrips[0..((List.Count(sineStrips)-1)*u)];
. Cela peut sembler déroutant, mais la ligne de code vous donne un moyen rapide de mettre à l'échelle la longueur de la liste en un multiplicateur entre 0 et 1.
Une valeur de 0.53
sur le curseur permet de créer une surface juste au-delà du milieu de la grille.
Comme prévu, un curseur de 1
crée une surface à partir de la grille complète de points.
En examinant le graphique visuel, vous pouvez mettre en surbrillance les nœuds Code Block et voir chacune de leurs fonctions.
1. Le premier nœud Code Block remplace le nœud Number.
2. Le deuxième nœud Code Block remplace le nœud Number Range.
3. Le troisième nœud Code Block remplace le nœud Formula (ainsi que List.Transpose, List.Count et Number Range).
4. Le quatrième nœud Code Block interroge une liste de listes, remplaçant ainsi le nœud List.GetItemAtIndex.
Le bloc de code est une fonction unique de Dynamo qui lie de manière dynamique un environnement de programmation visuel avec un environnement de texte. Le bloc de code a accès à tous les nœuds Dynamo et peut définir un graphique entier dans un nœud. Lisez attentivement ce chapitre, car le bloc de code est un bloc de construction fondamental de Dynamo.
Cette section comporte une série de leçons sur la création d'une géométrie à l'aide de DesignScript. Poursuivez en copiant l'exemple DesignScript dans des blocs de code Dynamo.
Il existe deux manières fondamentales de créer des courbes de forme libre dans Dynamo. Vous pouvez spécifier un ensemble de points et faire en sorte que Dynamo interpole une courbe lisse entre eux. Une méthode plus accessible consiste à spécifier les points de contrôle sous-jacents d'une courbe d'un certain degré. Les courbes interpolées sont utiles lorsqu'un concepteur sait exactement quelle forme une ligne doit prendre, ou si la conception comporte des contraintes spécifiques concernant les endroits où la courbe peut et ne peut pas passer. Les courbes spécifiées via des points de contrôle correspondent en substance à une série de segments de lignes droites qu'un algorithme lisse pour obtenir une forme de courbe finale. La définition d'une courbe par le biais de points de contrôle peut s'avérer utile pour explorer des formes de courbes avec différents degrés de lissage ou lorsqu'une continuité lisse est requise entre les segments de courbe.
Pour créer une courbe interpolée, il suffit de transférer un ensemble de points à la méthode NurbsCurve.ByPoints.
La courbe générée coupe chacun des points d’entrée, en commençant et en finissant respectivement au premier et au dernier point de l’ensemble. Un paramètre périodique facultatif peut être utilisé pour créer une courbe périodique fermée. Dynamo remplira automatiquement le segment manquant, de sorte qu’un point d’arrivée en double (identique au point de départ) n’est pas nécessaire.
Les courbes NURBS sont générées de la même façon, les points d’entrée représentant les extrémités d’un segment de ligne droite, et un second paramètre spécifiant le degré et le type de lissage de la courbe, appelé degré. * Une courbe de degré 1 n’a pas de lissage ; il s’agit d’une polyligne.
Une courbe de degré 2 est lissée de façon à ce que la courbe coupe et soit tangente au milieu des segments de polyligne :
Dynamo prend en charge les courbes NURBS (Non-Uniform Rational B-spline) jusqu’au degré 20, et le script suivant illustre l’effet de l’augmentation des niveaux de lissage sur la forme d’une courbe :
Notez que vous devez disposer d’au moins un point de contrôle supplémentaire par rapport au degré de la courbe.
Un autre avantage de la construction de courbes par le biais de sommets de contrôle est la possibilité de conserver la tangence entre des segments de courbe individuels. Pour ce faire, il convient d'extraire la direction entre les deux derniers points de contrôle et de poursuivre dans cette direction avec les deux premiers points de contrôle de la courbe suivante. L’exemple suivant crée deux courbes NURBS distinctes qui sont néanmoins aussi lisses qu’une seule courbe :
* Il s’agit d’une description très simplifiée de la géométrie des courbes NURBS. Pour obtenir des informations plus précises et détaillées, reportez-vous à Pottmann et al, 2007, dans les références.
/
/
/
Placer des références de bloc de lampadaires le long d’un projet 3D aux valeurs d’abscisse curviligne spécifiées dans un fichier Excel.
Mission accomplie !
créer un graphique Dynamo qui insérera du texte dans un espace objet.
Mission accomplie !
Utiliser un bloc de contour du véhicule pour générer des solides 3D de zone de dégagement le long d’un projet 3D.
Mission accomplie !
Version de Civil 3D | Version de Dynamo | Remarques |
---|---|---|
Renommer les structures du réseau de canalisations dans l’ordre en fonction de la cotation des abscisses d’un axe.
Mission accomplie !
Créer un groupe de points pour chaque description de point COGO unique.
Mission accomplie !
permet d’obtenir la géométrie des limites de contour de tous les bassins versants d’un dessin.
Type Dynamo | Enveloppes |
---|---|
Mission accomplie !
2024.1
2,18
2024
2.17
Mise à jour de l’interface utilisateur du Lecteur Dynamo
2023.2
2.15
2023
2.13
Mise à jour de l’interface utilisateur de Dynamo
2022.1
2.12
Ajout de paramètres de stockage des données de liaison d’objet
Nouveaux nœuds pour le contrôle de la liaison des objets
2022
2.10
Inclus dans l’installation principale de Civil 3D
Transition d’IronPython vers Python.NET
2021
2.5
2020.2
2.4
2020 Update 2
2.4
Nouveaux nœuds ajoutés
2020.1
2.2
2020
2.1
Version initiale
Objet Autodesk.AutoCAD.DynamoNodes.Object
Entité Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
Entité Autodesk.Civil.DatabaseServices.Entity
Type de données | Dynamo standard | Bloc de code équivalent |
Nombres |
Chaînes |
Séquences |
Intervalles |
Obtenir l’élément au niveau de l’index |
Création d’une liste |
Concaténer des chaînes |
Instructions conditionnelles |
Nœud(s) | Bloc de code équivalent | Remarque |
Tout opérateur (+, &&, >=, Not, etc.) | +, &&, >=, !, etc. | Notez que « Not » devient « ! », mais que le nœud est appelé « Not » pour faire la distinction avec « Factorial » |
Valeur booléenne True | true; | Minuscules |
Valeur booléenne False | false; | Minuscules |
Maintenant que vous savez comment utiliser les scripts Python dans Dynamo, découvrez comment connecter les bibliothèques Revit à l'environnement de script. Rappelez-vous que vous avez importé Python Standard et vos nœuds Dynamo Core avec les quatre premières lignes du bloc de code ci-dessous. Pour importer les nœuds Revit, les éléments Revit et le gestionnaire de documents Revit, il vous suffit d'ajouter quelques lignes supplémentaires :
Ces lignes vous donnent accès à l'API de Revit et vous offre des scripts personnalisés pour toutes les tâches Revit. La combinaison du processus de programmation visuelle et du script de l'API de Revit permet d'améliorer considérablement la collaboration et le développement des outils. Par exemple, un responsable BIM et un concepteur schématique peuvent travailler ensemble sur le même graphique. Dans le cadre de cette collaboration, ils peuvent améliorer la conception et l’exécution du modèle.
Le plan du projet Dynamo est d'élargir la portée de la mise en oeuvre de la plate-forme. Étant donné que Dynamo ajoute d'autres programmes au registre, les utilisateurs ont accès aux API spécifiques de la plate-forme depuis l'environnement de script Python. Même si l'étude de cas de cette section est consacrée à Revit, d'autres chapitres, offrant des didacticiels complets sur les scripts sur d'autres plates-formes, sont à prévoir. De plus, de nombreuses bibliothèques IronPython sont désormais accessibles et peuvent être importées dans Dynamo.
Les exemples ci-dessous montrent comment mettre en oeuvre des opérations spécifiques de Revit à partir de Dynamo et à l'aide de Python. Pour une révision plus détaillée des relations de Python avec Dynamo et Revit, reportez-vous à la page Wiki de Dynamo. Le projet Revit Python Shell constitue une autre ressource utile pour Python et Revit.
Créez un projet Revit.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans ces exercices, vous allez explorer les scripts élémentaires de Python dans Dynamo for Revit. Cet exercice est axé sur la gestion des fichiers et des éléments Revit, ainsi que sur la communication entre Revit et Dynamo.
Il s'agit d'une méthode de découpe et de séchage permettant de récupérer les éléments doc, uiapp et app du fichier Revit lié à votre session Dynamo. Les programmeurs qui ont déjà travaillé dans l'API de Revit reconnaîtront peut-être les éléments dans la liste d'observation. Si ces éléments ne vous semblent pas familiers, pas d'inquiétude. Vous allez utiliser d'autres exemples dans les exercices ci-dessous.
Voici comment importer les services Revit et récupérer les données du document dans Dynamo.
Examinez le nœud Python dans Dynamo. Vous pouvez également retrouver le code ci-dessous :
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans cet exercice, vous allez créer une courbe de modèle simple dans Revit à l'aide du nœud Dynamo Python.
Commencez par créer une famille de volumes conceptuels dans Revit.
Ouvrez le dossier Volume conceptuel et utilisez le fichier gabarit Metric Mass.rft.
Dans Revit, utilisez le raccourci clavier un
pour afficher les paramètres Unité de projet et définir l’unité de longueur sur Mètres.
Lancez Dynamo et créez le jeu de nœuds dans l’image ci-dessous. Vous allez d’abord créer deux points de référence dans Revit à partir de nœuds Dynamo.
Créez un nœud Code Block et attribuez-lui la valeur de
"0;"
.Connectez cette valeur dans un nœud ReferencePoint.ByCoordinates pour les entrées X, Y et Z.
Créez trois curseurs, compris entre -100 et 100, avec une taille de pas de 1.
Connectez chaque curseur à un nœud ReferencePoint.ByCoordinates.
Ajoutez un nœud Python à l'espace de travail, cliquez sur le bouton "+" du nœud pour ajouter une autre entrée et connectez les deux points de référence dans chaque entrée. Ouvrez le nœud Python.
Examinez le nœud Python dans Dynamo. Recherchez le code complet ci-dessous.
System.Array : Revit requiert un réseau système comme entrée (et non une liste Python). Il s'agit juste d'une ligne de code supplémentaire, mais prêter attention aux types d'argument facilite la programmation Python dans Revit.
Dans Dynamo, vous avez créé deux points de référence avec une ligne les reliant à l’aide de Python. Le prochain exercice va vous permettre d’aller un peu plus loin.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Cet exercice est simple, mais il illustre les rubriques de connexion de données et de géométrie de Revit à Dynamo et vice-versa. Commencez par ouvrir Revit-StructuralFraming.rvt. Une fois ouvert, lancez Dynamo et ouvrez le fichier Revit-StructuralFraming.dyn.
Ce fichier Revit est des plus basiques. Il comporte deux courbes de référence : une sur le niveau 1 et l'autre sur le niveau 2. Votre objectif est d'intégrer ces courbes dans Dynamo et de conserver un lien actif.
Ce fichier contient un ensemble de nœuds connectés à cinq entrées d’un nœud Python.
Nœuds Select Model Element : cliquez sur le bouton Sélectionner de chaque nœud et sélectionnez une courbe correspondante dans Revit.
Code Block : à l'aide de la syntaxe
0..1..#x;
, connectez un curseur de type entier compris entre 0 et 20 à l'entrée x. Celui-ci indique le nombre de poutres à dessiner entre les deux courbes.Structural Framing Types : choisissez la poutre W12x26 par défaut dans le menu déroulant.
Levels : sélectionnez "Level 1".
Dans Python, ce code est un peu plus dense, mais les commentaires à l’intérieur du code décrivent ce qui se passe dans le processus :
Dans Revit, un réseau de poutres s’étend sur les deux courbes en tant qu’éléments structurels. Remarque : cet exemple n'est pas réaliste... Les éléments structurels sont utilisés comme exemple pour les occurrences Revit d'origine créées à partir de Dynamo.
Dans Dynamo, les résultats sont également visibles. Les poutres du nœud Watch3D font référence à la géométrie interrogée à partir des éléments Revit.
Il existe un processus continu de conversion des données de l’environnement Revit vers l’environnement Dynamo. En résumé, voici comment le processus se déroule :
Sélectionnez l'élément Revit.
Convertissez l'élément Revit en courbe Dynamo.
Divisez la courbe Dynamo en une série de points Dynamo.
Utilisez les points Dynamo entre deux courbes pour créer des lignes Dynamo.
Créez des poutres Revit en référençant les lignes Dynamo.
Générez des surfaces Dynamo en interrogeant la géométrie des poutres Revit.
Ce processus peut sembler compliqué, mais grâce au script, il est aussi simple de modifier la courbe dans Revit et exécuter à nouveau le solveur (pour ce faire, vous devrez peut-être supprimer les poutres précédentes). Cela est dû au placement des poutres dans Python, ce qui rompt l'association des nœuds OOTB.
Avec une mise à jour des courbes de référence dans Revit, vous obtenez un nouveau réseau de poutres.
De quelle couleur est la pomme ? | Apple.color | rouge |
La pomme est-elle mûre ? | Apple.isRipe | true |
Combien la pomme pèse-t-elle ? | Apple.weight | 170 g |
D’où vient la pomme ? | Apple.parent | arborescence |
Qu’est-ce que la pomme crée ? | Apple.children | graines |
Cette pomme est-elle produite localement ? | Apple.distanceFromOrchard | 100 km |
Les objets dans les conceptions de calcul sont rarement créés explicitement dans leur position et leur forme finales. Le plus souvent, ils font l'objet d'opération de conversion et de rotation, et sont positionnés par rapport à la géométrie existante. Le calcul vectoriel sert d'"armature" à la géométrie en lui donnant une direction et une orientation, ainsi qu'en conceptualisant les mouvements dans l'espace 3D sans représentation visuelle.
Sous sa forme de base, un vecteur représente une position dans un espace 3D et est souvent considéré comme l’extrémité d’une flèche partant de la position (0, 0, 0) et allant jusqu’à cette position. Les vecteurs peuvent être créés avec le constructeur ByCoordinates, qui prend la position x, y et z de l’objet Vector venant d’être créé. Notez que les objets Vector ne sont pas des objets géométriques et n’apparaissent pas dans la fenêtre Dynamo. Toutefois, les informations sur un vecteur nouvellement créé ou modifié peuvent être imprimées dans la fenêtre de la console :
Un ensemble d’opérations mathématiques est défini sur des objets Vector, ce qui vous permet d’ajouter, de soustraire, de multiplier et de déplacer des objets dans l’espace 3D, de la même manière que vous déplaceriez des nombres réels dans un espace 1D sur une ligne de nombres.
L’addition de vecteurs est définie comme la somme des composants de deux vecteurs. Elle peut être considérée comme le vecteur résultant si les deux flèches de vecteur des composants sont placées « bout à bout ». L’addition de vecteurs est effectuée à l’aide de la méthode Add et est représentée par le diagramme sur la gauche.
De même, deux objets Vector peuvent être soustraits l’un à l’autre à l’aide de la méthode Subtract. La soustraction de vecteurs peut être considérée comme la direction à partir du premier vecteur vers le second vecteur.
La multiplication de vecteurs peut être considérée comme le déplacement de l’extrémité d’un vecteur dans sa propre direction en fonction d’un facteur d’échelle donné.
Souvent, lors de la mise à l'échelle d'un vecteur, on souhaite que la longueur du vecteur résultant soit exactement la même que la valeur mise à l'échelle. Pour ce faire, il faut d’abord normaliser un vecteur, c’est-à-dire définir la longueur du vecteur comme exactement égale à un.
c pointe toujours dans la même direction que a (1, 2, 3), bien qu’il ait maintenant une longueur exactement égale à 5.
Deux autres méthodes, qui n'ont pas de similitudes avec les mathématiques 1D, existent en mathématiques vectorielles. Il s'agit du produit vectoriel et du produit scalaire. Le produit vectoriel permet de générer un vecteur orthogonal (de 90 degrés) par rapport à deux vecteurs existants. Par exemple, le produit vectoriel des axes x et y est l’axe z, bien que les deux vecteurs d’entrée n’aient pas besoin d’être orthogonaux les uns par rapport aux autres. Un vecteur de produit vectoriel est calculé avec la méthode Cross.
Le produit scalaire est une autre fonction plus avancée de calcul vectoriel. Le produit scalaire entre deux vecteurs est un nombre réel (et non un objet Vector) qui fait référence, mais ne correspond pas exactement, à l'angle entre deux vecteurs. L’une des propriétés utiles de cette fonction est que le produit scalaire entre deux vecteurs sera égal à 0 si ces derniers sont perpendiculaires (et uniquement à cette condition). Le produit scalaire est calculé à l’aide de la méthode Dot.
Dans les conceptions informatiques, les courbes et les surfaces sont souvent utilisées comme une armature sous-jacente à des constructions géométriques ultérieures. Pour que cette première géométrie puisse être utilisée comme base pour une géométrie ultérieure, le script doit pouvoir extraire des qualités telles que la position et l'orientation sur toute la zone de l'objet. Les courbes et les surfaces prennent en charge cette extraction, appelée définition des paramètres.
Tous les points d'une courbe peuvent être considérés comme ayant un paramètre unique compris entre 0 et 1. Si nous devions créer une NurbsCurve basée sur plusieurs points de contrôle ou interpolés, le premier point aurait le paramètre 0 et le dernier point le paramètre 1. Il est impossible de savoir à l’avance quel est le paramètre exact d’un point intermédiaire, ce qui peut sembler être une limitation importante, bien qu’atténuée par une série de fonctions utilitaires. Les surfaces ont une définition des paramètres similaire en tant que courbes, mais avec deux paramètres au lieu d’un, appelés u et v. Si nous voulons créer une surface avec les points suivants :
p1 aurait le paramètre u = 0 v = 0, tandis que p9 aurait les paramètres u = 1 v = 1.
La définition des paramètres n’est pas particulièrement utile lors de la détermination des points utilisés pour générer des courbes. Elle permet principalement de déterminer les emplacements si des points intermédiaires sont générés par les constructeurs NurbsCurve et NurbsSurface.
Les courbes ont une méthode PointAtParameter, qui prend un double argument entre 0 et 1, et renvoie l’objet Point à ce paramètre. Par exemple, ce script recherche les points aux paramètres 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 et 1 :
De même, les surfaces ont une méthode PointAtParameter qui prend deux arguments, le paramètre u et v du point généré.
Alors que l’extraction de points individuels sur une courbe et une surface peut être utile, les scripts requièrent souvent la connaissance des caractéristiques géométriques spécifiques d’un paramètre, telles que la direction dans laquelle la courbe ou la surface est orientée. La méthode CoordinateSystemAtParameter trouve non seulement la position, mais également un CoordinateSystem orienté au niveau du paramètre d’une courbe ou d’une surface. Par exemple, le script suivant extrait des CoordinateSystems orientés le long d’une surface de révolution et utilise leur orientation pour générer des lignes qui dépassent normalement par rapport à la surface :
Comme mentionné précédemment, la définition des paramètres n’est pas toujours uniforme sur toute la longueur d’une courbe ou d’une surface, ce qui signifie que le paramètre 0.5 ne correspond pas toujours au milieu et 0.25 ne correspond pas toujours au premier quart d’une courbe ou d’une surface. Pour contourner cette limitation, les courbes possèdent un jeu supplémentaire de commandes de définition de paramètres qui vous permettent de trouver un point à des longueurs spécifiques le long d'une courbe.
Beaucoup de ces exemples se sont jusqu'ici concentrés sur la construction d'une géométrie dimensionnelle plus élevée à partir d'objets dimensionnels inférieurs. Les méthodes d’intersection permettent à cette géométrie dimensionnelle plus élevée de générer des objets dimensionnels inférieurs, tandis que les commandes d’ajustement et de sélection d’ajustement permettent au script de modifier considérablement les formes géométriques après leur création.
La méthode Intersect est définie sur tous les éléments de géométrie dans Dynamo, ce qui signifie en théorie que tout élément de géométrie peut être entrecoupé avec n’importe quel autre élément de géométrie. Naturellement, certaines intersections n’ont pas de sens, comme les intersections impliquant des points, car l’objet résultant sera toujours le point d’entrée lui-même. Les autres combinaisons possibles d'intersections entre des objets sont décrites dans le tableau suivant. Le tableau suivant présente le résultat de diverses opérations d’intersection :
L'exemple très simple suivant illustre l'intersection d'un plan avec une NurbsSurface. L’intersection génère un réseau de NurbsCurves, qui peut être utilisé comme toute autre NurbsCurve.
La méthode Trim ressemble fortement à la méthode Intersect, dans le sens où elle est définie pour presque chaque élément de géométrie. Toutefois, la méthode Trim comporte beaucoup plus de limitations que la méthode Intersect.
Il est à noter que les méthodes Trim nécessitent un point de « sélection », qui détermine la géométrie à ignorer et les éléments à conserver. Dynamo recherche et ignore la géométrie ajustée la plus proche du point de sélection.
Certains objets de géométrie peuvent être créés en spécifiant explicitement les coordonnées X, Y et Z dans un espace tridimensionnel. Plus souvent, cependant, la géométrie est placée dans sa position finale à l'aide de transformations géométriques sur l'objet lui-même ou sur son CoordinateSystem sous-jacent.
La transformation géométrique la plus simple est une conversion qui permet de déplacer un objet d’un nombre donné d’unités dans les directions X, Y et Z.
Bien que tous les objets dans Dynamo puissent être convertis grâce à l’ajout de la méthode .Translate à la fin du nom de l’objet, des transformations plus complexes requièrent la transformation de l’objet d’un CoordinateSystem sous-jacent en un nouveau CoordinateSystem. Par exemple, pour faire pivoter un objet de 45 degrés autour de l’axe X, transformez l’objet de son CoordinateSystem existant sans rotation en un CoordinateSystem qui a été pivoté de 45 degrés autour de l’axe X à l’aide de la méthode .Transform :
Outre la conversion et la rotation, les CoordinateSystems peuvent également être créés à l’échelle ou coupés. Un CoordinateSystem peut être mis à l’échelle à l’aide de la méthode .Scale :
Les CoordinateSystems coupés sont créés grâce à l’insertion de vecteurs non orthogonaux dans le constructeur CoordinateSystem.
Étant donné que la mise à l’échelle et le cisaillement sont des transformations géométriques plus complexes que la rotation et la conversion, les objets Dynamo ne peuvent pas tous faire l’objet de ces transformations. Le tableau suivant répertorie les objets Dynamo qui peuvent avoir un CoordinateSystem mis à l'échelle de façon non uniforme, et ceux qui peuvent avoir un CoordinateSystem coupé.
L'analogie bidimensionnelle d'une NurbsCurve est la NurbsSurface. Comme pour la NurbsCurve de forme libre, les NurbsSurfaces peuvent être construites selon deux méthodes de base : en entrant un ensemble de points de base et en utilisant Dynamo pour effectuer une interpolation entre eux, et en spécifiant explicitement les points de contrôle de la surface. De plus, comme les courbes de forme libre, les surfaces interpolées sont utiles lorsqu'un concepteur sait précisément la forme que doit avoir une surface ou lorsqu'une conception requiert que la surface traverse des points de contrainte. D'autre part, les surfaces créées à l'aide de points de contrôle peuvent être plus utiles pour les conceptions explorant différents niveaux de lissage.
Pour créer une surface interpolée, il suffit de générer un ensemble de points à deux dimensions qui se rapproche de la forme d'une surface. L’ensemble doit être rectangulaire, c’est-à-dire non irrégulier. La méthode NurbsSurface.ByPoints permet de construire une surface à partir de ces points.
Vous pouvez également créer des NurbsSurfaces de forme libre en spécifiant les points de contrôle sous-jacents d'une surface. Comme les NurbsCurves, les points de contrôle peuvent être considérés comme représentant un maillage quadrilatéral avec des segments droits, qui, en fonction du degré de la surface, est lissé pour obtenir la forme de surface finale. Pour créer une NurbsSurface via des points de contrôle, incluez deux paramètres supplémentaires à NurbsSurface.ByPoints, indiquant les degrés des courbes sous-jacentes dans les deux directions de la surface.
Vous pouvez augmenter le degré de la NurbsSurface pour modifier la géométrie de la surface obtenue :
Tout comme les surfaces peuvent être créées en effectuant une interpolation entre un ensemble de points d'entrée, elles peuvent être créées en effectuant une interpolation entre un ensemble de courbes de base. On parle alors de lissage. Une courbe lissée est créée à l’aide du constructeur Surface.ByLoft, avec un ensemble de courbes d’entrée comme seul paramètre.
Les surfaces de révolution sont un type de surface supplémentaire créé en balayant une courbe de base autour d'un axe central. Si les surfaces interpolées sont l'analogie bidimensionnelle des courbes interpolées, les surfaces de révolution sont l'analogie bidimensionnelle des cercles et des arcs.
Les surfaces de révolution sont spécifiées par une courbe de base, représentant l’« arête » de la surface, par une origine d’axe, représentant le point de base de la surface, par une direction d’axe, représentant la direction du « noyau » central, par un angle de départ de balayage et par un angle de fin de balayage. Elles sont utilisées comme entrées du constructeur Surface.Revolve.
Les méthodes Intersect, Trim et SelectTrim sont principalement utilisées sur la géométrie dimensionnelle inférieure, comme les points, les courbes et les surfaces. La géométrie solide, en revanche, dispose d’un ensemble de méthodes supplémentaires pour modifier la forme après sa construction, en soustrayant de la matière de manière comparable à la méthode Trim et en combinant les éléments pour former un ensemble plus grand.
La méthode Union prend deux objets solides et crée un objet solide unique à partir de l’espace couvert par les deux objets. L’espace de chevauchement entre les objets est combiné dans la forme finale. Cet exemple combine une sphère et un cuboïde en une forme de sphère-cube solide unique :
La méthode Difference, comme Trim, soustrait le contenu du solide de l’outil d’entrée du solide de base. Dans cet exemple, nous allons creuser une petite indentation dans une sphère :
La méthode Intersect renvoie le solide se chevauchant entre deux entrées de solide. Dans l’exemple suivant, la méthode Difference a été changée en Intersect et le solide résultant correspond au vide manquant initialement creusé :
Python est un langage de programmation très répandu dont la popularité est liée à son style de syntaxe. Il est très lisible, ce qui facilite l’apprentissage de beaucoup d’autres langages. Python prend en charge les modules et les packages, et peut être intégré dans des applications existantes. Pour plus d’informations sur la façon d’utiliser Python, consultez la page « Mise en route » sur Python.org.
Les scripts Python suivants génèrent des réseaux de points pour plusieurs exemples. Ils doivent être collés dans un nœud de script Python comme suit :
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
Avec Dynamo 2.0, vous pouvez spécifier un gabarit par défaut (.py extension)
à utiliser lors de la première ouverture de la fenêtre Python. Cette option a longtemps été attendue, car elle accélère l'utilisation de Python dans Dynamo. La possibilité d'utiliser un gabarit vous permet d'obtenir des importations par défaut prêtes à l'emploi lorsque vous voulez développer un script Python personnalisé.
Ce gabarit se trouve à l’emplacement APPDATA
de votre installation de Dynamo.
L’emplacement habituel est le suivant : ( %appdata%\Dynamo\Dynamo Core\{version}\ )
.
Pour utiliser cette fonctionnalité, vous devez ajouter la ligne suivante dans le fichier DynamoSettings.xml
. (Modifier dans le bloc-notes)
Vous pouvez simplement remplacer <PythonTemplateFilePath />
par ce qui suit :
Remarque : remplacez CURRENTUSER par votre nom d’utilisateur
Ensuite, vous devez créer un gabarit en intégrant la fonctionnalité que vous voulez utiliser. Dans cet exemple, vous allez incorporer les importations liées à Revit et d'autres éléments que vous utilisez généralement lorsque vous travaillez avec Revit.
Vous pouvez ouvrir un document de bloc-notes vide et coller le code suivant à l'intérieur :
Une fois cela fait, enregistrez ce fichier sous le nom PythonTemplate.py
à l’emplacement APPDATA
.
Une fois le gabarit Python défini, Dynamo le recherche à chaque fois qu’un nœud Python est positionné. Si le gabarit est introuvable, l’affichage sera comparable à la fenêtre Python par défaut.
Si Dynamo trouve le gabarit Python (par exemple, notre gabarit Revit), il affiche tous les éléments par défaut que vous avez intégrés.
Vous trouverez ici des informations supplémentaires sur cet ajout important (par Radu Gidei). https://github.com/DynamoDS/Dynamo/pull/8122
Le processus de programmation visuelle peut être une activité créative puissante, mais le flux du programme et les entrées utilisateur clés peuvent très rapidement être occultés par la complexité et/ou la disposition de l'espace de travail. Voici quelques bonnes pratiques pour gérer votre programme.
Une fois que vous avez ajouté plusieurs nœuds à l’espace de travail, vous pouvez réorganiser la disposition des nœuds pour plus de clarté. Lorsque vous sélectionnez plusieurs nœuds et cliquez avec le bouton droit de la souris sur l’espace de travail, la fenêtre contextuelle inclut un menu Aligner la sélection avec les options de justification et de distribution dans X et Y.
Sélectionnez plusieurs nœuds.
Cliquez avec le bouton droit de la souris sur l’espace de travail.
Utilisez les options de Aligner la sélection.
Avec une certaine expérience, vous pourrez probablement "lire" le programme visuel en examinant les noms des nœuds et en suivant le flux du programme. Pour les utilisateurs de tous niveaux, il est également recommandé d’inclure des libellés et des descriptions en texte simple. Pour ce faire, Dynamo possède un nœud Notes avec un champ de texte modifiable. Vous pouvez ajouter des notes à l’espace de travail de deux manières :
Accédez au menu Modifier > Créer une note.
Utiliser le raccourci clavier Ctrl+W.
Une fois la note ajoutée à l'espace de travail, un champ de texte s'affiche pour vous permettre de modifier le texte de la note. Une fois la note créée, vous pouvez la modifier en double-cliquant sur le nœud Note ou en cliquant dessus avec le bouton droit de la souris.
Lorsque votre programme visuel est grand, il est utile d’identifier les étapes plus importantes qui seront exécutées. Vous pouvez mettre en surbrillance des ensembles de nœuds plus grands avec un groupe pour les libeller avec un rectangle de couleur en arrière-plan et un titre. Il existe trois méthodes pour créer un groupe avec plus d’un nœud sélectionné :
Accédez au menu Modifier > Créer un groupe.
Utilisez le raccourci clavier Ctrl+G.
Cliquez avec le bouton droit de la souris sur l'espace de travail et choisissez Créer un groupe.
Une fois le groupe créé, vous pouvez modifier ses paramètres, tels que son titre et sa couleur.
Conseil : l’utilisation des notes et des groupes est une méthode efficace pour annoter votre fichier et améliorer sa lisibilité.
Voici un exemple de programme à partir duquel les notes et les groupes ont été ajoutés :
Note : « Paramètres de grille »
Note : "Points de la grille"
Groupe : "Créer une grille de points"
Groupe : "Créer un point d'attraction"
Note : "Calibrer les valeurs de distance"
Note : "Grille variable de cercles"
Avant ce chapitre, le guide a présenté les étapes à suivre pour mettre en œuvre les puissantes fonctionnalités de script visuel de Dynamo. Une bonne compréhension de ces fonctionnalités est une base solide et la première étape dans la construction de programmes visuels fiables. Lorsque vous utilisez vos programmes visuels sur le terrain, partagez-les avec vos collègues, corrigez les erreurs ou testez les limites avec lesquelles vous rencontrez d'autres problèmes. Si une autre personne va utiliser votre programme ou si vous souhaitez l'ouvrir dans six mois, il doit être clair d'un point de vue graphique et logique dès l'ouverture. Dynamo dispose de nombreux outils pour gérer la complexité de votre programme. Ce chapitre vous expliquera les conditions d’utilisation de ces derniers.
Lorsque vous développez votre graphique Dynamo et testez vos idées, la taille et la complexité de ce dernier peuvent rapidement augmenter. Bien qu’il soit important de créer un programme fonctionnel, il est tout aussi crucial de le faire le plus simplement possible. Non seulement votre graphique s'exécutera plus rapidement et de manière plus prévisible, mais vous comprendrez sa logique ultérieurement. Les méthodes suivantes vous aideront à clarifier la logique de votre graphique.
Les groupes vous permettent de créer des pièces fonctionnellement distinctes lorsque vous construisez un programme
Les groupes vous permettent de déplacer de grandes parties du programme tout en maintenant la modularité et l’alignement
Vous pouvez modifier la couleur du groupe pour différencier ce que font les groupes (entrées et fonctions)
Vous pouvez utiliser des groupes pour commencer à organiser votre graphique afin de simplifier la création de nœuds personnalisés
Les couleurs de ce programme identifient l’objectif de chaque groupe. Cette stratégie sert à créer une hiérarchie dans les normes graphiques ou les gabarits que vous développez.
Groupe de fonctions (bleu)
Groupe d'entrées (orange)
Groupe de scripts (vert)
Vous pouvez parfois utiliser un bloc de code pour saisir un nombre ou une méthode de nœud plus rapidement qu’en effectuant une recherche (Point.ByCoordinates, Number, String, Formula)
Les blocs de code sont utiles lorsque vous souhaitez définir des fonctions personnalisées dans DesignScript afin de réduire le nombre de nœuds dans un graphique
Les deux encadrés exécutent la même fonction. Il était beaucoup plus rapide d'écrire quelques lignes de code que de rechercher et d'ajouter chaque nœud individuellement. Le bloc de code est également beaucoup plus concis.
Script de conception écrit en bloc de code
Programme équivalent en nœuds
Vous pouvez réduire la complexité d’un graphique en utilisant la fonctionnalité Nœud vers code : elle permet de sélectionner un ensemble de nœuds simples et d’en écrire le DesignScript correspondant dans un bloc de code unique
La fonctionnalité Nœud vers code permet de** condenser du code sans nuire à la clarté du programme**
Voici les avantages de l’utilisation de Nœud vers code :
Condense facilement du code en un composant qui reste modifiable
Peut simplifier une partie significative du graphique
Utile si le mini-programme ne sera pas souvent modifié
Utile pour intégrer d’autres fonctionnalités de bloc de code, telles que des fonctions
Voici les inconvénients de l’utilisation de Nœud vers code :
L’attribution de noms génériques réduit la lisibilité
Plus difficile à comprendre pour les autres utilisateurs
Aucun moyen simple de revenir à la version de programmation visuelle
Programme existant
Bloc de code créé à partir de Nœud vers code
L’utilisation de List@Level vous permet de réduire la complexité de votre graphique en remplaçant les nœuds List.Map et List.Combine qui peuvent occuper une grande partie de la zone de dessin
List@Level fournit une méthode plus** rapide que List.Map/List.Combine pour établir la logique de nœud** en vous permettant d’accéder aux données à n’importe quel niveau d’une liste, directement à partir du port d’entrée d’un nœud
Vous pouvez vérifier le nombre de valeurs True renvoyées par BoundingBox.Contains et dans quelles listes ces valeurs sont renvoyées en activant List@Level pour l’entrée « list » de CountTrue. La fonction List@Level permet à l'utilisateur de déterminer à quel niveau l'entrée va extraire des données. La fonction List@Level est flexible, efficace et vivement recommandée par rapport à d'autres méthodes impliquant List.Map et List.Combine.
Comptage des valeurs True au niveau de la liste 2
Comptage des valeurs True au niveau de la liste 3
En plus de rendre le graphique aussi simple et efficace que possible, essayez d'améliorer la clarté graphique. Malgré vos efforts pour rendre votre graphique intuitif grâce à des regroupements logiques, les relations risquent de ne pas être évidentes. L'insertion d'une note simple dans un groupe ou l'attribution de nouveaux noms aux curseurs permet aux utilisateurs d'éviter tout malentendu ou mouvement panoramique inutile sur le graphique. Les méthodes suivantes vous aideront à appliquer la cohérence graphique dans vos graphiques.
Pour réduire votre charge de travail après avoir créé votre graphique, assurez-vous que la disposition des nœuds est lisible en alignant les nœuds régulièrement et au fur et à mesure de votre travail
Si d’autres utilisateurs vont travailler avec votre graphique, assurez-vous que la disposition des liaisons de nœud s’enchaîne facilement avant la livraison
Pour vous aider avec la tâche d’alignement, utilisez la fonction « Arranger l’affichage des nœuds » pour aligner automatiquement votre graphique, même si elle est moins précise que vous-même
Graphique non organisé
Graphique aligné
L’attribution de nouveaux noms aux entrées permet aux autres utilisateurs de comprendre facilement votre graphique, notamment si ce qu’ils connectent n’est pas affiché à l’écran
Veillez à renommer les nœuds en plus des entrées. Une autre solution consiste à créer un nœud personnalisé à partir d’un cluster de nœuds et à le renommer. Il sera alors évident qu’il contient autre chose
Entrées pour la manipulation de surfaces
Entrées pour les paramètres architecturaux
Entrées du script de simulation de drainage
Pour renommer un nœud, cliquez avec le bouton droit de la souris sur son nom et sélectionnez « Renommer le nœud… ».
Vous devez ajouter une note si quelque chose dans le graphique requiert une explication en langage simple que les nœuds ne peuvent pas exprimer
Vous devez ajouter une note si un ensemble de nœuds ou de groupes est trop volumineux ou trop complexe et ne peut pas être facilement compris immédiatement
Note décrivant la partie du programme qui renvoie les distances de conversion brutes
Note décrivant le code qui mappe ces valeurs avec une onde sinusoïdale
Utilisez les bulles Watch et d’aperçu lorsque vous créez le programme pour** vérifier que les sorties clés renvoient le résultat attendu**
Les nœuds Watch sont utilisés pour comparer :
Distances de conversion brutes
Valeurs transmises par l’équation sinusoïdale
Il est fort probable qu'une autre personne ouvre votre programme à un moment donné, même si vous travaillez indépendamment. Cette personne doit pouvoir comprendre rapidement ce dont le programme a besoin et ce qu'il produit à partir de ses entrées et sorties. Cela est particulièrement important lorsque vous développez un nœud personnalisé à partager avec la communauté Dynamo et à utiliser dans le programme d'un autre utilisateur. Ces pratiques permettent de construire des programmes et des nœuds robustes et réutilisables.
Pour garantir la lisibilité et l’évolutivité, essayez de réduire les entrées et les sorties autant que possible
Essayez de déterminer la méthode de création de la logique en créant d’abord une ébauche de la manière dont la logique peut fonctionner avant d’ajouter un nœud à la zone de dessin. Lorsque vous développez la première ébauche, effectuez un suivi des entrées et des sorties qui seront converties en scripts
Si vous souhaitez intégrer des options ou conditions particulières au graphique, utilisez les valeurs prédéfinies pour y accéder rapidement
Vous pouvez également utiliser les valeurs prédéfinies pour réduire la complexité en mettant en cache des valeurs de curseur spécifiques dans un graphique avec des temps d’exécution longs
Vous devez utiliser un nœud personnalisé si votre programme peut être regroupé dans un seul conteneur
Vous devez utiliser un nœud personnalisé lorsqu’une partie du graphique sera réutilisée souvent dans d’autres programmes
Vous devez utiliser un nœud personnalisé pour partager une fonctionnalité avec la communauté Dynamo
La collecte du programme de conversion de points dans un nœud personnalisé permet de simplifier et de rendre transférable un programme robuste et unique. Les ports d'entrée bien nommés aideront d'autres utilisateurs à comprendre comment utiliser le nœud. N'oubliez pas d'ajouter des descriptions et des types de données requis pour chaque entrée.
Programme d'attraction existant
Nœud personnalisé qui collecte ce programme, PointGrid
Vous pouvez créer des gabarits pour établir des normes graphiques dans vos graphiques visuels afin de vous assurer que les collaborateurs comprennent le graphique de manière standardisée
Lors de la création d’un gabarit, vous pouvez normaliser les tailles de police et les couleurs de groupe afin de classer les types de workflow ou d’actions de données.
Lors de la création d’un gabarit, vous pouvez même normaliser la façon dont vous souhaitez étiqueter, colorer ou styliser la différence entre les workflows front-end et back-end dans votre graphique.
L’interface utilisateur, ou la partie frontale, du programme inclut un nom de projet, des curseurs d’entrée et une géométrie d’importation.
La partie back-end du programme.
Regroupez les catégories de couleurs (conception générale, entrées, scripts Python, géométrie importée).
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Maintenant que vous avez établi plusieurs meilleures pratiques, appliquez-les à un programme qui a été mis en place rapidement. Bien que le programme réussisse à générer le toit, l'état du graphique reflète le cheminement de pensée de l'auteur, à la manière d'une carte mentale. Il n'y a aucune organisation ou description de son utilisation. Vous allez parcourir les meilleures pratiques pour organiser, décrire et analyser le programme afin que d’autres utilisateurs puissent comprendre comment l’utiliser.
Le programme fonctionne, mais le graphique est désorganisé.
Commençons par déterminer les données et la géométrie renvoyées par le programme.
Comprendre quand des modifications importantes des données se produisent est crucial pour établir des divisions logiques, ou des modularités. Inspectez le reste du programme avec les nœuds Watch pour voir si vous pouvez déterminer les groupes avant de passer à l’étape suivante.
Ce nœud Code Block avec une équation mathématique semble être un élément crucial du programme. Un nœud Watch indique qu’il renvoie des listes de distances de conversion.
L’objectif de cette zone n’est pas évident. La disposition des valeurs True au niveau de la liste L2 de BoundingBox.Contains et la présence de List.FilterByBoolMask suggèrent que vous échantillonnez une partie de la grille de points.
Une fois que vous avez identifié les composantes essentielles du programme, placez-les dans des groupes.
Les groupes permettent à l’utilisateur de différencier visuellement les parties du programme.
Importer un modèle de site 3D
Convertir la grille de points en fonction de l'équation sinusoïdale
Exemple de portion de grille de points
Créer une surface de toit architecturale
Créer un mur-rideau en verre
Lorsque les groupes sont établis, alignez les nœuds pour créer une continuité visuelle sur le graphique.
La continuité visuelle aide l’utilisateur à voir le flux du programme et les relations implicites entre les nœuds.
Rendez le programme plus accessible en ajoutant un autre calque d'améliorations graphiques. Ajoutez des notes pour décrire le fonctionnement d’une zone spécifique du programme, donnez des noms personnalisés aux entrées et affectez des couleurs à différents types de groupes.
Ces améliorations graphiques permettent à l’utilisateur de mieux connaître les activités du programme. Les différentes couleurs de groupe permettent de distinguer les entrées des fonctions.
Notes
Entrées avec des noms descriptifs
Avant de commencer à condenser le programme, identifions un emplacement stratégique pour présenter le simulateur de drainage du script Python. Branchez la sortie de la première surface de toit mise à l’échelle dans l’entrée de script correspondante.
Vous avez choisi d’intégrer les scripts à ce stade du programme afin que la simulation de drainage puisse être exécutée sur la surface de toit unique d’origine. Cette surface spécifique n'est pas affichée en aperçu, mais elle vous évite d'avoir à choisir la surface supérieure de la polysurface chanfreinée.
Géométrie source pour l'entrée du script
Nœud Python
Curseurs d'entrée
"Commutateur" activé/désactivé
Maintenant que tout est en place, simplifions le graphique.
La condensation du programme grâce à Nœud vers code et à Nœud personnalisé a permis de réduire considérablement la taille du graphique. Les groupes qui créent la surface du toit et les murs ont été convertis en code, car ils sont très spécifiques de ce programme. Le groupe de conversion de points est contenu dans un nœud personnalisé, car il peut être utilisé dans un autre programme. Dans le fichier d'exemple, créez votre propre nœud personnalisé à partir du groupe Convertir les points.
Nœud personnalisé contenant le groupe "Convertir la grille de points"
Nœud vers code permettant de condenser les groupes "Créer une surface de toit architecturale et un mur-rideau"
Pour finir, créez des valeurs prédéfinies pour des formes de toit représentatives.
Ces entrées sont les principaux pilotes de la forme du toit et permettent aux utilisateurs de découvrir le potentiel du programme.
Votre programme avec des vues de deux valeurs prédéfinies.
Les motifs de drainage du toit permettent à l’utilisateur d’obtenir une vue analytique des valeurs prédéfinies respectives.
Cette page de référence présente les meilleures pratiques décrites dans la section Stratégies de script, avec plus de détails sur les bibliothèques de codes, l'étiquetage et le style. Vous allez utiliser Python pour illustrer les concepts ci-dessous. Les mêmes principes s'appliquent à Python et C# (Zerotouch), mais la syntaxe est différente.
Les bibliothèques standard sont externes à Dynamo et sont présentes dans les langages de programmation Python et C# (Zerotouch). Dynamo possède également son propre ensemble de bibliothèques qui correspondent directement à sa hiérarchie de nœuds, permettant à l'utilisateur de coder tout ce qui peut être fait avec des nœuds et des fils. Voici un guide qui présente le contenu auquel chaque bibliothèque Dynamo permet d’accéder et qui explique quand utiliser une bibliothèque standard.
Bibliothèques standard et bibliothèques Dynamo
Les bibliothèques standard de Python et C# peuvent être utilisées pour créer des données avancées et des structures de flux dans l’environnement Dynamo.
Les bibliothèques Dynamo correspondent directement à la hiérarchie des nœuds pour la création de géométries et d’autres objets Dynamo.
Bibliothèques Dynamo
ProtoGeometry*
Fonctionnalités : Arc, Zone de contour, Cercle, Cône, Système de coordonnées, Cuboïde, Courbe, Cylindre, Arête, Ellipse, Arc d’ellipse, Face, Géométrie, Hélice, Groupe d’index, Ligne, Maillage, Courbe NURBS, Surface NURBS, Plan, Point, Polygone, Rectangle, Solide, Sphère, Surface, Topologie, T-Spline, UV, Vecteur, Sommet.
Comment importer : import Autodesk.DesignScript.Geometry
``
DSCoreNodes
Fonctionnalités : Couleur, Intervalle de couleurs 2D, Date et heure, Durée, E/S, Formule, Logique, Liste, Math, Arbre quadratique, Chaîne, Thread.
Comment importer : import DSCore
Tessellation
Fonctionnalités : Coque convexe, Delaunay, Voronoi.
Comment importer : import Tessellation
DSOffice
Fonctionnalité : Excel.
Comment importer : import DSOffice
*Remarque : lorsque vous utilisez ProtoGeometry via Python ou C#, vous créez des objets non gérés dont la mémoire doit être gérée manuellement. Pour plus d’informations, reportez-vous à la section Objets non gérés.
Lors de la création du script, vous utilisez en permanence des identificateurs pour indiquer des éléments tels que des variables, des types, des fonctions et d'autres entités. Grâce à ce système de notation symbolique, et à la création d'algorithmes, vous pouvez facilement vous référer à des informations par le biais de libellés, généralement composés d'une séquence de caractères. Le fait de nommer les choses correctement joue un rôle important dans l'écriture de code pour que ce dernier soit facilement lu et compris par d'autres personnes, ainsi que par vous-même dans le futur ! Voici quelques conseils à retenir lorsque vous nommez des éléments dans votre script :
Il est correct d’utiliser des abréviations, mais il convient d’expliquer l’abréviation par un commentaire :
Évitez les libellés redondants :
Utilisez une logique positive pour les noms de variables au lieu d’une logique négative :
Préférez la « notation inverse » :
Il est plus logique d’utiliser des termes structurels.
Les alias doivent être utilisés pour raccourcir les chaînes trop longues et souvent répétées :
L’utilisation d’alias peut rapidement conduire à des programmes déroutants et non standard.
Utilisez uniquement les mots nécessaires :
« Rendez les choses aussi simples que possible, mais pas plus simples. » – Albert Einstein
En règle générale, il existe plusieurs méthodes pour programmer à peu près tout ce que l'on veut. Votre "style personnel" de script est donc le résultat des innombrables petites décisions que vous choisissez de prendre (ou de ne pas prendre). Cela dit, la lisibilité et la pérennité de votre code sont le résultat direct de sa cohérence interne et de sa conformité aux conventions stylistiques générales. En règle générale, des lignes de code qui se ressemblent à deux emplacements différents doivent également fonctionner de la même manière. Voici quelques conseils pour écrire du code clair et cohérent.
Conventions d’appellation : (choisissez l’une des conventions ci-dessous pour chaque type d’entité de votre code et associez-la à votre système.)
Variables, fonctions, méthodes, packages, modules :
lower_case_with_underscores
Classes et exceptions :
CapWords
Méthodes protégées et fonctions internes :
_single_leading_underscore(self, ...)
Méthodes privées :
__double_leading_underscore(self, ...)
Des constantes :
ALL_CAPS_WITH_UNDERSCORES
Conseil : évitez les variables d’une lettre (p. ex. l, O, I) sauf dans des blocs très courts, quand la signification est clairement visible dans le contexte immédiat.
Utilisation de lignes vierges :
Entourez les définitions de classe et de fonction de niveau supérieur de deux lignes vierges.
Les définitions de méthode à l'intérieur d'une classe sont entourées d'une seule ligne vierge.
Des lignes vierges supplémentaires peuvent être utilisées (occasionnellement) pour séparer des groupes de fonctions associées.
Évitez les espaces superflus :
Immédiatement entre des parenthèses, des crochets ou des accolades :
Immédiatement avant une virgule, un point-virgule ou un signe deux-points :
Immédiatement avant la parenthèse ouvrante qui lance la liste d'arguments d'un appel de fonction :
Immédiatement avant la parenthèse ouverte qui démarre l'indexation ou l'extraction :
Entourez toujours ces opérateurs binaires d’un seul espace de part et d’autre :
Faites attention à la longueur des lignes :
Ne dépassez pas les 79 caractères.
Limiter la largeur de la fenêtre de l'éditeur requise permet d'ouvrir plusieurs fichiers côte à côte et facilite l'utilisation d'outils de révision de code qui présentent les deux versions dans des colonnes adjacentes.
Vous pouvez couper les longues lignes sur plusieurs lignes en mettant les expressions entre parenthèses :
Évitez les commentaires évidents et redondants :
Parfois, réduire le nombre de commentaires permet de rendre le code plus lisible, notamment si cela vous oblige à utiliser des noms de symboles significatifs à la place.
L'adoption de bonnes habitudes de codage réduit la dépendance aux commentaires :
Conseil : les commentaires vous expliquent pourquoi, le code vous explique comment.
Examinez attentivement le code source ouvert :
Les projets Open Source reposent sur les efforts de collaboration de nombreux développeurs. Ces projets doivent garantir un niveau élevé de lisibilité du code afin que l'équipe puisse travailler ensemble le plus efficacement possible. Par conséquent, il est recommandé de parcourir le code source de ces projets pour observer ce que font ces développeurs.
Améliorez vos conventions :
Demandez-vous si chaque convention fonctionne ou non pour les besoins définis.
Les fonctionnalités et l'efficacité sont-elles compromises ?
Consultez ces pages wiki pour obtenir des conseils sur l’écriture de C# pour Zerotouch et la participation à Dynamo :
Objets non gérés :
Il vous suffit de supprimer les ressources non gérées que vous ne renvoyez pas dans le graphique ou pour lesquelles vous n’enregistrez pas de référence. Le reste de cette section fait référence à ces objets comme étant une géométrie intermédiaire. Vous pouvez voir un exemple de cette classe d’objets dans l’exemple de code ci-dessous. La fonction C# Zero Touch singleCube renvoie un seul cube, mais permet de créer 10000 cubes supplémentaires au cours de son exécution. Il est possible que cette autre géométrie ait été utilisée comme géométrie de construction intermédiaire.
Cette fonction Zero Touch risque de bloquer Dynamo , étant donné que vous avez créé 10000 solides, mais n’avez enregistré qu’un seul d’entre eux et n’avez renvoyé que celui-ci. Vous devez plutôt éliminer tous les cubes intermédiaires, sauf celui renvoyé. Il est préférable de ne pas supprimer les objets renvoyés, car ces derniers sont propagés dans le graphique et utilisés par d'autres nœuds.
Le code réparé doit ressembler à ceci :
En général, il suffit de supprimer la géométrie comme Surfaces
, Curves
et Solids
. Pour plus de sécurité, vous pouvez supprimer tous les types de géométrie (Vectors
, Points
, CoordinateSystems
).
L'utilisation de scripts basés sur du texte dans l'environnement de script visuel permet d'établir des relations visuelles efficaces à l'aide de DesignScript, Python et ZeroTouch (C#). L'utilisateur peut exposer des éléments tels que des curseurs d'entrée, condenser des opérations importantes dans DesignScript et accéder à de puissants outils et bibliothèques via Python ou C#, le tout dans le même espace de travail. Si elle est gérée efficacement, la combinaison de ces stratégies peut améliorer significativement la personnalisation, la clarté et l'efficacité du programme global. Les instructions suivantes vous aideront à enrichir votre script visuel avec un script de texte.
Les scripts de texte peuvent établir des relations plus complexes que la programmation visuelle, même si certaines de leurs fonctionnalités sont assez comparables. Cela est logique car les nœuds correspondent effectivement à du code pré-intégré, et nous pourrions probablement écrire un programme Dynamo dans DesignScript ou Python. Toutefois, nous utilisons les scripts visuels, car l'interface des nœuds et des fils crée un flux intuitif d'informations graphiques. Le fait de savoir quand les fonctionnalités du script de texte dépassent celles du script visuel vous permettra de déterminer lorsque ce script doit être utilisé sans renoncer à la nature intuitive des nœuds et des fils. Les instructions suivantes indiquent quand écrire des scripts et le langage à utiliser.
Utilisez les scripts de texte aux fins suivantes :
Création de boucle
Récursion
Accès aux bibliothèques externes
Choisissez une langue :
Lorsque vous créez des scripts dans Dynamo, un environnement inévitablement paramétrique, il est judicieux de structurer votre code par rapport à la structure des nœuds et des fils dans lesquels il se trouvera. Considérez le nœud contenant votre script de texte comme s'il s'agissait d'un autre nœud du programme avec quelques entrées spécifiques, une fonction et une sortie attendue. Cela donne immédiatement à votre code à l'intérieur du nœud un petit jeu de variables à partir duquel travailler. C'est la clé d'un système paramétrique propre. Voici quelques conseils pour une meilleure intégration du code dans un programme visuel.
Identifiez les variables externes :
Essayez de déterminer les paramètres donnés dans votre problème de conception afin de pouvoir développer un modèle qui se construit directement à partir de ces données.
Avant d'écrire du code, identifiez les variables suivantes :
Un jeu minimal d'entrées
La sortie prévue
Des constantes
Plusieurs variables ont été établies avant l’écriture du code.
La surface sur laquelle nous allons simuler l'eau de pluie.
Le nombre de gouttes de pluie (agents) que nous voulons.
La distance que nous voulons que les gouttes de pluie parcourent.
Le basculement entre descendre le parcours le plus raide ou traverser la surface.
Le nœud Python avec le nombre d'entrées correspondant.
Un bloc de code rendant les courbes renvoyées bleues.
Concevez les relations internes :
Le paramétrisme permet de modifier certains paramètres ou variables afin de manipuler ou de modifier le résultat final d’une équation ou d’un système.
Lorsque des entités de votre script sont liées de façon logique, définissez-les comme des fonctions les unes des autres. De cette façon, si l'une d'entre elle est modifiée, l'autre peut être mise à jour proportionnellement.
Réduisez le nombre d'entrées en exposant uniquement les paramètres clés :
Si un jeu de paramètres peut provenir de plusieurs paramètres parent, affichez uniquement les paramètres parent sous forme d'entrées de script. Cela permet d’accroître la facilité d’utilisation de votre script tout en réduisant la complexité de son interface.
Entrées.
Variables internes au script.
Boucle qui utilise ces entrées et variables pour exécuter sa fonction.
Conseil : mettez l’accent sur le processus, comme vous le faites pour la solution.
Lorsque vous disposez de plusieurs méthodes pour exprimer la même chose dans votre script, les représentations dupliquées ne sont pas synchronisées parfois, ce qui peut entraîner des problèmes de maintenance, des mauvaises factorisations et des contradictions internes.
Le principe du DRY est le suivant : "Chaque connaissance doit avoir une représentation unique, non ambiguë et autorisée au sein d'un système" :
Lorsque ce principe est appliqué correctement, tous les éléments associés de votre script changent de manière prévisible et uniforme, et tous les éléments non liés n’ont pas de conséquences logiques les uns sur les autres.
Conseil : avant de dupliquer des entités dans votre script (par exemple, une constante dans l’exemple ci-dessus), demandez-vous si vous pouvez établir un lien vers la source.
Lorsque votre code devient de plus long et plus complexe, l'idée principale ou l'algorithme global devient de plus en plus illisible. Il est également plus difficile d'en suivre le cours, de trouver des bogues quand des problèmes surviennent, d'intégrer d'autres lignes de code et d'assigner des tâches de développement. Pour éviter ces problèmes, il est judicieux d'écrire du code dans les modules. Il s'agit d'une stratégie d'organisation qui décompose le code en fonction de la tâche qu'elle exécute. Voici quelques conseils pour rendre vos scripts plus gérables par le biais de la modularisation.
Écrivez du code dans des modules :
Un "module" est un groupe de lignes de code qui effectue une tâche spécifique et qui est semblable à un nœud Dynamo dans l’espace de travail.
Il peut s'agir de tout ce qui doit être visuellement séparé du code adjacent (une fonction, une classe, un groupe d'entrées ou les bibliothèques que vous importez).
Le développement de code dans des modules exploite la qualité visuelle intuitive des nœuds, ainsi que les relations complexes que seuls les scripts de texte peuvent atteindre.
Ces boucles appellent une classe nommée « agent » que nous allons développer dans l’exercice.
Module de code qui définit le point de départ de chaque agent.
Module de code qui met à jour l'agent.
Module de code qui trace une trajectoire pour le parcours de l’agent.
Détectez le code réutilisé :
Si vous constatez que votre code produit un résultat identique (ou très similaire) à plusieurs endroits, trouvez des moyens de le regrouper dans une fonction qui peut être appelée.
Les fonctions "Gestionnaire" contrôlent le flux de programmes et contiennent principalement des appels aux fonctions "Exécutant" qui gèrent les détails de bas niveau, comme le déplacement de données entre les structures.
Dans cet exemple, des sphères sont créées avec des rayons et des couleurs basés sur la valeur Z des points centraux.
Deux fonctions parent « Exécutant » : une fonction qui crée des sphères avec des rayons et des couleurs d’affichage en fonction de la valeur Z du point central.
Une fonction parent "Gestionnaire" qui combine les deux fonctions "Executant". L’appel de cette fonction appellera les deux fonctions qu’elle contient.
Montrez uniquement ce qui doit être vu :
Une interface de module représente les éléments fournis et requis par le module.
Une fois les interfaces entre les unités définies, la conception détaillée de chaque unité peut être effectuée séparément.
Séparabilité/Remplacement :
Les modules n’ont pas de lien entre eux.
Formes générales de modularisation :
Regroupement des lignes de code :
Fonctions :
Classes :
Lors du développement de scripts de texte dans Dynamo, il est préférable de s’assurer en permanence que ce que vous créez est conforme à vos attentes. Cela permet de s’assurer que les événements imprévus (erreurs de syntaxe, écarts logiques, imprécisions de valeur, sorties anormales, etc.) sont rapidement détectés et traités dès qu’ils apparaissent, plutôt qu’en une seule fois à la fin. Comme les scripts de texte figurent dans les nœuds de la zone de dessin, ils sont déjà intégrés au flux de données de votre programme visuel. La surveillance successive de votre script est facilitée : il suffit d'attribuer des données à générer, d'exécuter le programme et d'évaluer les flux découlant du script à l'aide d'un nœud Watch. Voici quelques conseils pour inspecter en continu vos scripts au fur et à mesure de leur construction.
Testez en fonction de vos besoins :
Chaque fois que vous complétez un cluster de fonctionnalités, procédez comme suit :
Revenez en arrière et examinez votre code.
Soyez critique. Un collaborateur peut-il comprendre à quoi sert le code ? Est-ce que j'ai besoin de faire ça ? Cette fonction peut-elle être réalisée plus efficacement ? Suis-je en train de créer des doublons ou des dépendances inutiles ?
Testez rapidement votre code pour vérifier qu'il renvoie des données "logiques".
Affectez les données les plus récentes que vous utilisez dans votre script comme sortie afin que le nœud génère toujours les données pertinentes lors de la mise à jour du script :
Vérifiez que toutes les arêtes du solide sont renvoyées en tant que courbes pour créer une zone de contour.
Vérifiez que les entrées sous forme de nombres sont converties en intervalles.
Vérifiez que les systèmes de coordonnées ont été correctement convertis et pivotés dans cette boucle.
Anticiper les « cas extrêmes » :
Lors du processus de script, définissez les paramètres d’entrée sur les valeurs minimale et maximale de leur domaine alloué pour vérifier si le programme fonctionne toujours dans des conditions extrêmes.
Même si le programme fonctionne à ses extrémités, vérifiez s'il renvoie des valeurs nulles/vides/zéro non voulues.
Parfois, les bogues et les erreurs qui révèlent un problème sous-jacent avec votre script ne se produiront que lors de ces cas extrêmes.
Trouvez la cause de l’erreur et déterminez si elle doit être corrigée en interne ou si un domaine de paramètre doit être redéfini pour éviter le problème.
Conseil : supposez toujours que l’utilisateur utilise toutes les combinaisons de chaque valeur d’entrée qui lui a été exposée. Cela permettra d’éliminer les mauvaises surprises.
Le débogage consiste à éliminer les "bogues" de votre script. Les bogues peuvent être des erreurs, des inefficacités, des imprécisions ou des résultats inattendus. La résolution d'un bogue peut être aussi simple que la correction d'un nom de variable mal orthographié ou des problèmes structurels plus graves avec votre script. Dans l'idéal, l'ajustement de votre script au fur et à mesure de sa construction permettra de détecter ces problèmes potentiels au plus tôt, bien que cela ne garantit pas qu'il soit exempt de bogues. Voici un examen des meilleures pratiques présentées ci-dessus pour vous aider à résoudre systématiquement les bogues.
Utilisez la bulle Watch :
Vérifiez les données renvoyées à différents emplacements du code en l’affectant à la variable OUT, comme dans le concept d’ajustement du programme.
Écrivez des commentaires ayant du sens :
Un module de code sera beaucoup plus facile à déboguer si le résultat attendu est clairement décrit.
On considère généralement qu’un tel exemple contient trop de commentaires et de lignes vierges, mais lors du débogage, il peut être utile de diviser le code en éléments gérables.
Utilisez la modularité du code :
La source d’un problème peut être attribuée à certains modules.
Une fois le module défectueux identifié, il est beaucoup plus simple de corriger le problème.
Lorsqu'un programme doit être modifié, le code développé dans les modules sera beaucoup plus facile à modifier :
Vous pouvez insérer des modules nouveaux ou débogués dans un programme existant avec la certitude que le reste du programme ne changera pas.
Comme vous pouvez le voir lors de l’affectation de xDist et yDist à OUT, la géométrie d’entrée renvoie une zone de contour plus grande qu’elle.
Les courbes d'arête de la géométrie d'entrée renvoient une zone de contour appropriée avec des distances correctes pour xDist et yDist.
Le "module" de code inséré permet de résoudre le problème des valeurs xDist et yDist.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d’exemple dans l’annexe.
Utilisons les meilleures pratiques en matière de script de texte pour écrire un script de simulation de pluie. Même si vous avez pu appliquer les meilleures pratiques à un programme visuel désorganisé dans Graph Strategies, il est beaucoup plus difficile de le faire avec des scripts de texte. Les relations logiques établies dans les scripts de texte sont moins visibles et sont parfois presque impossibles à délimiter dans un code désordonné. Les scripts de texte impliquent une plus grande responsabilité dans l'organisation. Vous allez effectuer chaque étape et appliquer les meilleures pratiques.
Votre script s’applique à une surface déformée par l’attraction.
La première chose à faire est d’importer les bibliothèques Dynamo nécessaires. Cette première opération permet d'accéder à la fonctionnalité Dynamo dans Python.
Toutes les bibliothèques que vous voulez utiliser doivent être importées ici.
Ensuite, vous devez définir les entrées et la sortie du script, qui s’afficheront comme ports d’entrée sur le nœud. Ces entrées externes constituent la base de votre script et la clé pour établir un environnement paramétrique.
Vous devez définir des entrées qui correspondent aux variables du script Python et déterminer une sortie souhaitée :
La surface à parcourir.
Le nombre d'agents que nous voulons voir marcher.
Le nombre maximal de pas que les agents sont autorisés à effectuer.
Une option permettant de prendre le chemin le plus court vers le bas de la surface ou de la parcourir.
Le nœud Python avec des identificateurs d'entrée qui correspondent aux entrées du script (IN[0], IN[1]).
Les courbes de sortie pouvant être affichées avec une couleur différente.
Vous allez maintenant utiliser la modularité et créer le corps de votre script. La simulation du chemin le plus court vers le bas d'une surface pour plusieurs points de départ est une tâche importante qui nécessitera plusieurs fonctions. Plutôt que d'appeler les différentes fonctions dans le script, vous pouvez modulariser votre code en les regroupant dans une classe unique, votre agent. Les différentes fonctions de cette classe ou de ce "module" peuvent être appelées avec différentes variables ou même réutilisées dans un autre script.
Vous devez définir une classe, ou un « plan », pour un agent avec l’intention de parcourir une surface en choisissant le déplacement dans la direction la plus abrupte possible à chaque fois qu’il fait un pas :
Nom.
Attributs globaux que tous les agents partagent.
Attributs d'instance uniques à chaque agent.
Fonction permettant de faire un pas.
Fonction permettant de cataloguer la position de chaque pas dans une liste de trajectoires.
Initialisez les agents en définissant leur emplacement de départ. C'est une bonne occasion d'ajuster votre script et de s'assurer que la classe d'agent fonctionne.
Vous devez instancier tous les agents qui doivent parcourir la surface, et définir leurs attributs initiaux :
Une nouvelle liste de trajectoires vide.
Le point de départ de leur parcours sur la surface.
Vous avez attribué la liste des agents comme sortie pour vérifier ce que le script renvoie ici. Le nombre correct d'agents est renvoyé, mais vous devrez ajuster le script à nouveau ultérieurement pour vérifier la géométrie qu'il renvoie.
Mettez à jour les agents à chaque pas. Vous devez ensuite entrer une boucle imbriquée où vous mettez à jour et enregistrez la position de chaque agent à chaque pas dans la liste de trajectoires correspondante. À chaque pas, vous allez également vous assurer que l'agent n'a pas atteint de point sur la surface où il ne peut plus descendre. Si cette condition est remplie, terminez le parcours de cet agent.
Maintenant que les agents ont été entièrement mis à jour, revenez à la géométrie qui les représente. Une fois que tous les agents ont atteint leur limite de descente ou leur nombre maximal de pas, vous allez créer une polycourbe à l’aide des points de leur liste de trajectoires, et générer les trajectoires polycourbes.
Votre script permettant de trouver les chemins les plus abrupts.
Valeur prédéfinie qui simule l’eau de pluie sur la surface sous-jacente.
Au lieu de trouver le chemin le plus abrupt, les agents peuvent être basculés pour parcourir la surface sous-jacente.
Le script de texte Python complet.
Cette partie du guide compile des pratiques recommandées. Elle met en lumière plusieurs stratégies qui se sont avérées, via l'expérience et la recherche, les plus propices à des workflows paramétriques de qualité. En tant que concepteurs et programmeurs, notre indicateur de qualité est principalement axé sur la pérennité, la fiabilité, la facilité d'utilisation et l'efficacité de nos outils. Bien que ces pratiques recommandées soient associées à des exemples spécifiques pour les scripts visuels ou textuels, les principes s’appliquent à tous les environnements de programmation et peuvent alimenter de nombreux workflows de calcul.
Pourquoi utiliser la programmation textuelle dans l’environnement de programmation visuelle de Dynamo ? La présente de nombreux avantages. Elle vous permet de créer des programmes sans avoir à apprendre la syntaxe spéciale dans une interface visuelle intuitive. Toutefois, un programme visuel peut être encombré et peut parfois ne pas fonctionner correctement. Par exemple, Python propose des méthodes beaucoup plus efficaces pour écrire des instructions conditionnelles (if/then) et des boucles. Python est un outil puissant qui permet d’étendre les capacités de Dynamo et de remplacer de nombreux nœuds par quelques lignes de code concises.
Programme visuel :
Programme textuel :
Comme les blocs de code, les nœuds Python sont une interface de script au sein d'un environnement de programmation visuelle. Le nœud Python se trouve sous Script > Éditeur > Python Script dans la bibliothèque.
Un double-clic sur le nœud permet d’ouvrir l’éditeur de script Python (vous pouvez également cliquer avec le bouton droit sur le nœud et sélectionner Éditer…). Le texte réutilisable situé en haut de l’éditeur vous permet de référencer les bibliothèques dont vous aurez besoin. Les entrées sont stockées dans le réseau IN. Les valeurs sont renvoyées à Dynamo en étant affectées à la variable OUT.
Les méthodes comprennent des constructeurs tels que ByCoordinates, des actions telles que Add et des requêtes telles que les coordonnées X, Y et Z.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d'exemple dans l'annexe.
Dans cet exemple, vous allez écrire un script Python qui crée des motifs à partir d'un module solide, et le transformer en nœud personnalisé. Commencer par créer le module solide à l’aide de nœuds Dynamo.
Rectangle.ByWidthLength : créez un rectangle qui servira de base au solide.
Surface.ByPatch : connectez le rectangle à l’entrée « closedCurve » pour créer la surface inférieure.
Geometry.Translate : connectez le rectangle à l’entrée « geometry » pour le déplacer vers le haut, à l’aide d’un bloc de code pour spécifier l’épaisseur de base du solide.
Polygon.Points : interrogez le rectangle converti pour extraire les points de coin.
Geometry.Translate : utilisez un bloc de code pour créer une liste de quatre valeurs correspondant aux quatre points, en convertissant un coin du solide vers le haut.
Polygon.ByPoints : utilisez les points convertis pour reconstruire le polygone supérieur.
Surface.ByPatch : connectez le polygone pour créer la surface supérieure.
Maintenant que vous avez les surfaces supérieures et inférieures, effectuez un lissage entre les deux contours pour créer les côtés du solide.
List.Create: connectez le rectangle inférieur et le polygone supérieur aux entrées d’index.
Surface.ByLoft : lissez les deux contours pour créer les côtés du solide.
List.Create : connectez les surfaces supérieures, inférieures et latérales aux entrées d’index pour créer une liste de surfaces.
Solid.ByJoiningSurfaces : joignez les surfaces pour créer le module solide.
Maintenant que le solide est créé, déposez un nœud de script Python dans l’espace de travail.
Pour ajouter des entrées supplémentaires au nœud, cliquez sur l’icône + sur le nœud. Les entrées sont nommées IN[0], IN[1], etc. pour indiquer qu’elles représentent des éléments dans une liste.
Commencez par définir les entrées et la sortie. Double-cliquez sur le nœud pour ouvrir l'éditeur Python. Suivez le code ci-dessous pour modifier le code dans l’éditeur.
Ce code sera plus pertinent à mesure que vous progresserez dans l’exercice. Ensuite, identifiez les informations nécessaires pour la mise en réseau du module solide. Tout d'abord, vous devez connaître les cotes du solide pour déterminer la distance de conversion. En raison d’un bogue relatif à la zone de contour, utilisez la géométrie de courbe d’arête pour créer une zone de contour.
Examinez le nœud Python dans Dynamo. La syntaxe utilisée est la même que celle utilisée dans les titres des nœuds dans Dynamo. Consultez le code commenté ci-dessous.
Puisque vous allez convertir et faire pivoter les modules solides, utilisez l'opération Geometry.Transform. Examinez le nœud Geometry.Transform : vous savez que vous avez besoin d'un système de coordonnées source et d'un système de coordonnées cible pour transformer le solide. La source est le système de coordonnées contextuel du solide, alors que la cible est un système de coordonnées différent pour chaque module en réseau. Cela signifie que vous devez parcourir les valeurs x et y pour modifier le système de coordonnées à chaque fois.
Cliquez sur Exécuter, puis enregistrez le code. Connectez le nœud Python avec le script existant comme suit.
Connectez la sortie du nœud Solid.ByJoinedSurfaces comme première entrée du nœud Python et utilisez un nœud Code Block pour définir les autres entrées.
Créez un nœud Topology.Edges et utilisez la sortie du nœud Python comme son entrée.
Enfin, créez un nœud Edge.CurveGeometry et utilisez la sortie du nœud Topology.Edges comme son entrée.
Modifiez la valeur de départ pour créer différents motifs. Vous pouvez également modifier les paramètres du module solide lui-même pour créer différents effets.
Maintenant que vous avez créé un script Python utile, enregistrez-le en tant que nœud personnalisé. Sélectionnez le nœud Python Script, cliquez avec le bouton droit sur Espace de travail et sélectionnez « Créer un nœud personnalisé ».
Attribuez un nom, une description et une catégorie.
Un nouvel espace de travail s’ouvre dans lequel vous pouvez modifier le nœud personnalisé.
Entrées : modifiez les noms d’entrée pour qu’ils soient plus descriptifs et ajoutez des types de données et des valeurs par défaut.
Sortie : modifier le nom de la sortie.
Enregistrez le nœud sous forme de fichier .dyf. Le nœud personnalisé doit maintenant refléter les modifications apportées.
Classe | CoordinateSystem non uniformément mis à l'échelle | CoordinateSystem coupé |
---|---|---|
Pour savoir comment utiliser les groupes, reportez-vous à la rubrique .
Pour savoir comment utiliser le bloc de code, reportez-vous à la rubrique .
Pour savoir comment utiliser la fonctionnalité Nœud vers code, reportez-vous à la rubrique .
Pour savoir comment utiliser List@Level, reportez-vous à la rubrique .
Pour utiliser l’alignement de nœud, reportez-vous à la rubrique .
Pour savoir comment ajouter une note, reportez-vous à la rubrique .
Lors de la création de votre script visuel, il est important de vérifier que le résultat renvoyé est celui attendu. Les erreurs ou les problèmes ne provoqueront pas tous l’échec immédiat du programme, notamment les valeurs nulles qui peuvent avoir une incidence sur un élément en aval. Cette stratégie est également abordée dans le contexte de la création de scripts de texte dans . La pratique suivante permet de vous assurer que vous obtenez le résultat attendu.
Pour savoir comment utiliser Watch, reportez-vous à la rubrique .
Pour savoir comment utiliser les valeurs prédéfinies, reportez-vous à la rubrique .
Pour savoir comment utiliser les nœuds personnalisés, reportez-vous à la rubrique .
Cette page wiki traite de certaines normes générales de codage pour la documentation et le test de votre code :
Cette page wiki traite spécifiquement des normes d’attribution de noms pour les bibliothèques, les catégories, les noms de nœuds, les noms de ports et les abréviations :
Lorsque vous utilisez la bibliothèque de géométrie de Dynamo (ProtoGeometry) à partir de Python ou de C#, les objets de géométrie créés ne sont pas gérés par la machine virtuelle, et la mémoire d’un grand nombre de ces objets doit être nettoyée manuellement. Pour nettoyer des objets natifs ou non gérés, vous pouvez utiliser la méthode Dispose ou le mot-clé using. Consultez cette entrée Wiki pour obtenir un aperçu : .
Reportez-vous à la rubrique pour obtenir une liste des éléments auxquels chaque bibliothèque Dynamo vous donne accès.
« Modules » de code issus de l’exemple dans .
Débogage du fichier d’exemple issu de .
La bibliothèque Autodesk.DesignScript.Geometry vous permet d’utiliser la notation par points de manière similaire aux blocs de code. Pour plus d’informations sur la syntaxe de Dynamo, reportez-vous à la rubrique et au document (pour télécharger ce document PDF, cliquez avec le bouton droit de la souris sur le lien et choisissez « Enregistrer le lien sous… »). Si vous tapez un type de géométrie tel que « Point », une liste de méthodes permettant de créer et d’interroger des points s’affiche.
Utilise : Point
Curve
Plan
Surface
Solide
Sur : Courbe
Oui
Non
Non
Non
Non
Objet Polygon
-
Non
Oui
Non
Non
Surface
-
Oui
Oui
Oui
Oui
Solide
-
-
Oui
Oui
Oui
Arc
Non
Non
NurbsCurve
Oui
Oui
NurbsSurface
Non
Non
Cercle
Non
Non
Ligne
Oui
Oui
Plan
Non
Non
Point
Oui
Oui
Objet Polygon
Non
Non
Solide
Non
Non
Surface
Non
Non
Texte
Non
Non
Création de boucle | Récursion | Condenser les nœuds | Bibliothèques Bibliothèques | Raccourci |
DesignScript | Oui | Oui | Oui | Non | Oui |
Python | Oui | Oui | Partiellement | Oui | Non |
ZeroTouch (C#) | Non | Non | Non | Oui | Non |
Avec :
Surface
Courbe
Plan
Solide
Surface
Curve
Point
Point, courbe
Surface
Curve
Point
Point
Point
Curve
Plan
Curve
Point
Courbe
Curve
Solide
Surface
Courbe
Courbe
Solide
En tant qu'environnement de programmation visuelle, Dynamo vous permet de définir la manière dont les données sont traitées. Les données sont des nombres ou du texte, et il en va de même pour la géométrie. Tel qu'un ordinateur le comprend, la géométrie (aussi appelée géométrie de calcul) représente les données que vous pouvez utiliser pour créer des modèles beaux et complexes à la fois, ou des modèles axés sur la performance. Pour ce faire, vous devez comprendre les entrées et les sorties des différents types de géométrie que vous pouvez utiliser.
Bien que vous ayez précédemment étudié la modification d'un volume de construction de base, vous devez approfondir le lien Dynamo/Revit en modifiant un grand nombre d'éléments en une seule opération. La personnalisation à grande échelle devient plus complexe, car les structures de données nécessitent des opérations de listes plus avancées. Toutefois, les principes sous-jacents de leur exécution sont fondamentalement les mêmes. Examinez certaines possibilités d'effectuer des analyses à partir d'un ensemble de composants adaptatifs.
Imaginez que vous avez créé une série de composants adaptatifs et que vous souhaitez modifier les paramètres en fonction de leurs emplacements de point. Les points, par exemple, peuvent définir un paramètre d'épaisseur lié à la zone de l'élément. Ils peuvent aussi définir un paramètre d'opacité lié à l'exposition solaire tout au long de l'année. Dynamo permet la connexion de l’analyse aux paramètres en quelques étapes simples. Dans l’exercice ci-dessous, vous allez explorer une version de base.
Interrogez les points adaptatifs d’un composant adaptatif sélectionné à l’aide du nœud AdaptiveComponent.Locations. Cela vous permet de travailler avec une version abstraite d’un élément Revit pour l’analyse.
En extrayant l'emplacement des points des composants adaptatifs, vous pouvez exécuter une série d'analyses pour cet élément. Par exemple, un composant adaptatif à quatre points vous permet d'étudier l'écart par rapport au plan d'un panneau donné.
Utilisez la fonction de remappage pour mapper un jeu de données dans une plage de paramètres. Il s'agit d'un outil fondamental utilisé dans un modèle paramétrique, que vous allez découvrir dans l'exercice ci-dessous.
Avec Dynamo, vous pouvez utiliser les emplacements des points des composants adaptatifs pour créer un plan d'ajustement optimal pour chaque élément. Vous pouvez également interroger la position du soleil dans le fichier Revit et étudier l'orientation relative du plan par rapport au soleil en comparaison avec les autres composants adaptatifs. Étudiez ce cas dans l'exercice ci-dessous en créant un environnement de toiture algorithmique.
Téléchargez le fichier d’exemple en cliquant sur le lien ci-dessous.
Vous trouverez la liste complète des fichiers d’exemple dans l’annexe.
Cet exercice fournit des informations sur les techniques présentées dans la section précédente. Dans ce cas, définissez une surface paramétrique à partir d’éléments Revit, instanciant des composants adaptatifs à quatre points, puis modifiez-les en fonction de l’orientation par rapport au soleil.
Sélectionnez d’abord deux arêtes avec le nœud « Select Edge ». Les deux arêtes sont les longues travées de l’atrium.
Combinez les deux arêtes dans une liste avec le nœud List.Create.
Créez une surface entre les deux arêtes avec un nœud surface.ByLoft.
À l’aide du nœud Code Block, définissez une plage comprise entre 0 et 1 avec 10 valeurs équidistantes :
0..1..#10;
Connectez le nœud Code Block aux entrées *u *et v d’un nœud Surface.PointAtParameter, puis connectez le nœud Surface.ByLoft à l’entrée surface. Cliquez avec le bouton droit de la souris sur le nœud et définissez la liaison sur Produit cartésien. Cette action permet de créer une grille de points sur la surface.
Cette grille de points sert de points de contrôle pour une surface définie de manière paramétrique. Vous devez extraire les positions u et v de chacun de ces points afin de pouvoir les relier à une formule paramétrique et conserver la même structure de données. Pour ce faire, vous pouvez interroger les emplacements des paramètres des points que vous venez de créer.
Ajoutez un nœud Surface.ParameterAtPoint à la zone de dessin et connectez les entrées comme indiqué ci-dessus.
Interrogez les valeurs u de ces paramètres avec le nœud UV.U.
Interrogez les valeurs v de ces paramètres avec le nœud UV.V.
Les sorties montrent les valeurs u et v correspondantes pour chaque point de la surface. Vous disposez à présent d’une plage de 0 à 1 pour chaque valeur dans la structure de données appropriée. Vous êtes prêts à appliquer un algorithme paramétrique.
Ajoutez un nœud Block Code dans la zone de dessin et entrez le code :
Math.Sin(u*180)*Math.Sin(v*180)*w;
. Il s’agit d’une fonction paramétrique qui crée un sinus à partir d’une surface plane.Connectez UV.U à l’entrée u et UV.V à l’entrée v.
Étant donné que l’entrée w représente l’amplitude de la forme, joignez-y un curseur de numérotation.
La liste des valeurs définies par l’algorithme est maintenant disponible. Utilisez cette liste de valeurs pour déplacer les points vers le haut dans la direction +Z. À l’aide de Geometry.Translate, connectez le nœud *Code Block *à zTranslation et le nœud Surface.PointAtParameter à l’entrée geometry. Les nouveaux points doivent s’afficher dans l’aperçu Dynamo.
Enfin, créez une surface avec le nœud NurbsSurface.ByPoints en connectant le nœud de l’étape précédente à l’entrée des points. Vous obtenez une surface paramétrique. N'hésitez pas à déplacer le curseur pour observer la taille du monticule diminuer ou augmenter.
En ce qui concerne la surface paramétrique, vous devez définir un moyen de la paneliser afin de mettre en réseau les composants adaptatifs à quatre points. Étant donné que Dynamo ne dispose pas de fonctionnalités prêtes à l’emploi pour la panelisation des surfaces, contactez la communauté pour des packages Dynamo utiles.
Accédez à Packages > Rechercher un package…
Recherchez « LunchBox » et installez « LunchBox for Dynamo ». Il s’agit d’un ensemble d’outils très utiles pour les opérations de géométrie telles que celle-ci.
Après le téléchargement, vous disposez maintenant d’un accès complet à la suite LunchBox. Recherchez « Quad Grid » et sélectionnez « LunchBox Quad Grid By Face ». Connectez la surface paramétrique à l’entrée surface et définissez les divisions U et V sur 15. Vous devriez voir apparaître une surface à quatre panneaux dans l’aperçu Dynamo.
Si vous souhaitez en savoir plus sur la configuration, cliquez deux fois sur le nœud Lunch Box pour voir comment il est créé.
Dans Revit, examinez rapidement le composant adaptatif utilisé ici. Pas besoin de suivre, mais c'est le panneau de toit à instancier. Il s’agit d’un composant adaptatif à quatre points, qui est une représentation grossière d’un système ETFE. L’ouverture du vide au centre se trouve sur un paramètre appelé « ApertureRatio ».
Étant donné que vous allez instancier un grand nombre de géométries dans Revit, veillez à définir le solveur Dynamo sur « Manuel ».
Ajoutez un nœud Family Types à la zone de dessin et sélectionnez « ROOF-PANEL-4PT ».
Ajoutez un nœud AdaptiveComponent.ByPoints à la zone de dessin, connectez les points Panel Pts de la sortie « LunchBox Quad Grid by Face » à l’entrée points. Connectez le nœud Family Types à l’entrée FamilySymbol.
Cliquez sur Exécuter. La création de la géométrie nécessite un peu de temps sur Revit. Si l’opération est trop longue, réduisez la valeur du bloc de code qui est égale à 15. Cela permet de réduire le nombre de panneaux sur le toit.
Remarque : si Dynamo prend trop de temps pour calculer les nœuds, vous pouvez utiliser la fonctionnalité « geler » du nœud pour interrompre l’exécution des opérations Revit lorsque vous développez votre graphique. Pour plus d’informations sur le gel des nœuds, consultez la section « Gel » du chapitre Solides.
Dans Revit, vous avez le réseau de panneaux sur le toit.
En zoomant, vous pouvez mieux observer leurs qualités de surface.
À partir de l’étape précédente, reprenez l’ouverture de chaque panneau en fonction de son exposition au soleil. Dans Revit, en zoomant et en sélectionnant un panneau, vous pouvez constater la présence d’un paramètre appelé « Aperture Ratio » dans la barre des propriétés. La famille est configurée de façon à ce que l’ouverture s’étende, approximativement, de 0,05 à 0,45.
Si vous activez la trajectoire d’ensoleillement, vous pouvez voir l’emplacement actuel du soleil dans Revit.
Vous pouvez référencer l’emplacement du soleil à l’aide du nœud SunSettings.Current.
Connectez l’entrée SunSettings à Sunsetting.SunDirection pour obtenir le vecteur solaire.
À partir des points Panel Pts utilisés pour créer les composants adaptatifs, ayez recours à Plane.ByBaestFitThroughPoints pour obtenir une approximation du plan du composant.
Interrogez la normale de ce plan.
Utilisez le produit scalaire pour calculer l’orientation du soleil. Le produit scalaire est une formule qui détermine la mesure selon laquelle deux vecteurs sont parallèles ou antiparallèles. Prenez donc la normale du plan de chaque composant adaptatif et comparez-la au vecteur solaire pour simuler l’orientation du soleil de façon approximative.
Prenez la valeur absolue du résultat. Cela permet de garantir que le produit scalaire est précis si la normale du plan est orientée vers l’arrière.
Cliquez sur Exécuter.
Le produit scalaire contient une grande quantité de nombres. Pour utiliser leur distribution relative, vous devez condenser les nombres dans la plage appropriée du paramètre Aperture Ratio à modifier.
L’outil Math.RemapRange est idéal pour cela. Il prend une liste d’entrée et remappe ses limites en deux valeurs cibles.
Définissez les valeurs cibles sur 0,15 et 0,45 dans un bloc de code.
Cliquez sur Exécuter.
Connectez les valeurs remappées à un nœud Element.SetParameterByName.
Connectez la chaîne « Aperture Ratio » à l’entrée parameterName.
Connectez les composants adaptatifs à l’entrée element.
Cliquez sur Exécuter.
Dans Revit, à partir d’une distance, vous pouvez définir l’impact de l’orientation du soleil sur l’ouverture des panneaux ETFE.
En zoomant, vous pouvez voir que plus les panneaux ETFE font face au soleil et plus ils sont fermés. L’objectif ici est de réduire la surchauffe de l’exposition au soleil. Si vous voulez laisser davantage de lumière en fonction de l’exposition solaire, vous devez simplement définir le domaine sur Math.RemapRange.
La conception technique d’un projet de construction de logements typique implique de travailler avec plusieurs équipements souterrains, tels que des égouts sanitaires, des équipements d’évacuation des eaux pluviales, l’eau potable, etc. Cet exemple montre comment Dynamo peut être utilisé pour dessiner les raccordements d’une conduite principale à un terrain donné (c’est-à-dire une parcelle). Il est courant que chaque parcelle doive être raccordée à un service, ce qui représente une tâche fastidieuse pour placer tous les services. Dynamo peut accélérer le processus en dessinant automatiquement la géométrie nécessaire avec précision, et en fournissant des données d’entrée flexibles qui peuvent être adaptées aux normes locales.
Utiliser le nœud Sélectionner un objet pour la saisie utilisateur
Utiliser des systèmes de coordonnées
Utiliser des opérations géométriques telles que Geometry.DistanceTo et Geometry.ClosestPointTo
Créer des références de bloc
Contrôler les paramètres de liaison des objets
Ce graphique peut s’exécuter dans Civil 3D 2020 et les versions ultérieures.
Commencez par télécharger les fichiers d’exemple ci-dessous, puis ouvrez le fichier DWG et le graphique Dynamo.
Voici une présentation de la logique de ce graphique.
Obtenir la géométrie de la courbe pour la conduite principale
Obtenir la géométrie de la courbe pour une ligne de parcelle sélectionnée par l’utilisateur, en l’inversant si nécessaire
Générer les points d’insertion pour les compteurs
Obtenir les points de la conduite principale qui sont les plus proches de l’emplacement des compteurs
Créer des références de blocs et des lignes dans l’espace objet
Allons-y !
La première étape consiste à intégrer la géométrie de la conduite principale dans Dynamo. Au lieu de sélectionner des lignes ou des polylignes individuelles, nous allons plutôt récupérer tous les objets d’une certaine couche et les regrouper sous la forme d’une polycourbe Dynamo.
Si vous ne connaissez pas la géométrie des courbes Dynamo, consultez la section Courbes.
Ensuite, vous devez obtenir la géométrie d’une ligne de parcelle sélectionnée dans Dynamo afin de pouvoir l’utiliser. L’outil approprié est le nœud Sélectionner un objet, qui permet à l’utilisateur du graphique de sélectionner un objet spécifique dans Civil 3D.
Vous devez également gérer un problème potentiel qui pourrait survenir. La ligne de parcelle a un point de départ et un point d’arrivée, ce qui signifie qu’elle a une direction. Pour que le graphique produise des résultats cohérents, il faut que toutes les lignes de parcelle aient une direction cohérente. Vous pouvez tenir compte de cette condition directement dans la logique du graphique, ce qui rend ce dernier plus résilient.
Obtenez les points de départ et d’arrivée de la ligne de parcelle.
Mesurez la distance entre chaque point et la conduite principale, puis déterminez quelle est la plus grande distance.
Faites en sorte que le point de départ de la ligne soit le plus proche de la conduite principale. Si ce n’est pas le cas, inversez la direction de la ligne de parcelle. Dans le cas contraire, renvoyez simplement la ligne de parcelle d’origine.
Il est temps de déterminer l’emplacement des compteurs. Généralement, l’emplacement est déterminé par les exigences des autorités locales. Vous fournirez donc simplement des valeurs d’entrée qui peuvent être modifiées pour s’adapter à diverses conditions. Vous allez utiliser un système de coordonnées le long de la ligne de parcelle comme référence pour la création des points. Il est ainsi très facile de définir des décalages par rapport à la ligne de parcelle, quelle que soit son orientation.
Si vous ne connaissez pas les systèmes de coordonnées, consultez la section Vecteur, plan et système de coordonnées.
Vous devez maintenant déterminer les points de la conduite principale les plus proches de l’emplacement des compteurs. Cela vous permettra de dessiner les raccordements aux services dans l’espace objet de manière à ce qu’ils soient toujours perpendiculaires à la conduite principale. Le nœud Geometry.ClosestPointTo est la solution idéale.
Polycourbe de la conduite principale
Points d’insertion des compteurs
La dernière étape consiste à créer des objets dans l’espace objet. Vous utiliserez les points d’insertion que vous avez générés précédemment pour créer des références de bloc, puis vous utiliserez les points sur la conduite principale pour tracer des lignes vers les raccordements aux services.
Lorsque vous exécutez le graphique, vous devriez voir apparaître de nouvelles références de bloc et des lignes de raccordement aux services dans l’espace objet. Essayez de modifier certaines entrées et observez l’actualisation automatique de l’ensemble !
Vous avez peut-être remarqué qu’après avoir placé les objets pour une ligne de parcelle, la sélection d’une autre ligne de parcelle entraîne le « déplacement » des objets.
C’est le comportement par défaut de Dynamo, et il est très utile dans de nombreux cas. Cependant, il se peut que vous souhaitiez placer plusieurs raccordements aux services de manière séquentielle et que Dynamo crée de nouveaux objets à chaque exécution au lieu de modifier les objets d’origine. Vous pouvez contrôler ce comportement en modifiant les paramètres de liaison d’objet.
Pour plus d’informations, consultez la section Liaison d’objet.
La modification de ce paramètre forcera Dynamo à « oublier » les objets qu’il crée à chaque exécution. Voici un exemple d’exécution du graphique avec la liaison d’objet désactivée en utilisant le Lecteur Dynamo.
Si vous ne connaissez pas le Lecteur Dynamo, consultez la section Lecteur Dynamo.
Voici quelques suggestions pour élargir les possibilités offertes par ce graphique.
Placez plusieurs raccordements aux services simultanément au lieu de sélectionner chaque ligne de parcelle.
Ajustez les données d’entrée pour remplacer les compteurs d’eau par des regards de canalisation.
Ajoutez un bouton bascule pour permettre de placer un seul raccordement aux services sur un côté particulier de la ligne de parcelle plutôt que sur les deux côtés.
Placer les références de bloc de compteurs d’eau à des distances spécifiées de la ligne de parcelle, et tracer une ligne pour chaque raccordement perpendiculaire à la conduite principale.
Mission accomplie !