{"id":262,"date":"2019-05-27T09:00:00","date_gmt":"2019-05-27T07:00:00","guid":{"rendered":"https:\/\/blogs.autodesk.com\/villagebim\/2019\/05\/script-dynamo-interdire-autoriser-la-jonction-d-ossature.html"},"modified":"2019-05-27T09:00:00","modified_gmt":"2019-05-27T07:00:00","slug":"script-dynamo-interdire-autoriser-la-jonction-d-ossature","status":"publish","type":"post","link":"https:\/\/blogs.autodesk.com\/villagebim\/2019\/05\/script-dynamo-interdire-autoriser-la-jonction-d-ossature.html","title":{"rendered":"[Script Dynamo] Interdire \/autoriser la jonction d\u2019ossature"},"content":{"rendered":"<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca3a200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image002\" border=\"0\" height=\"251\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7e8c200c-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image002\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Les utilisateurs du logiciel Revit connaissent la fonction \u00ab <em>Autoriser\/Interdire la jonction<\/em> \u00bb entre \u00e9l\u00e9ments d\u2019ossature (poutres). Cependant, elle provoque souvent des frustrations car elle s\u2019effectue n\u0153ud par n\u0153ud et donc g\u00e9n\u00e8re des pertes de temps. Je vous propose de construire le script Dynamo For Revit afin de r\u00e9aliser cette t\u00e2che.<\/p>\n<p style=\"text-align: justify\"><strong><u>1- Recherche bibliographique de la solution sur la toile:<\/u><\/strong><\/p>\n<p style=\"text-align: justify\"><u>1. 1 Recherche d\u2019une solution :<\/u><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;La biblioth\u00e8que de \u00ab <strong>Dynamo For Revit<\/strong> \u00bb ne disposant pas d\u2019un n\u0153ud permettant d\u2019 \u00ab <em>Autoriser\/Interdire la jonction<\/em> \u00bb, il est possible de r\u00e9aliser une recherche parmi les packages Dynamo disponibles.<\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Apr\u00e8s une br\u00e8ve recherche, il s\u2019av\u00e8re qu\u2019il existe un package qui permettrai de r\u00e9aliser l\u2019op\u00e9ration. Cependant, je n\u2019ai pas opt\u00e9 pour cette raison pour plusieurs raisons :<\/p>\n<ul>\n<li>il date de l\u2019ann\u00e9e 2016 et risque de poser des probl\u00e8mes avec les versions Revit plus r\u00e9centes,<\/li>\n<li>si vous comptez partager votre script, il faudra que les personnes utilisatrices pensent \u00e0 installer ce package<\/li>\n<\/ul>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca42200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image003\" border=\"0\" height=\"352\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca49200d-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image003\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;En cons\u00e9quence, la seule solution est de travailler en utilisant un script Python faisait appel \u00e0 l\u2019API de Revit. N\u2019\u00e9tant pas un expert de ce type de langage (quelques notion quand m\u00eame voir <a href=\"https:\/\/villagebim.typepad.com\/villagebim\/2016\/05\/exemple-dynamo-mon-premier-code-python.html\">ici<\/a> et <a href=\"https:\/\/villagebim.typepad.com\/villagebim\/2016\/10\/exemple-dynamo-fonction-coupure-en-un-clic.html\">ici<\/a>), j\u2019ai fait une recherche sur la toile.<\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Apr\u00e8s avoir tap\u00e9 comme mot cl\u00e9 sur mon moteur de recherche internet pr\u00e9f\u00e9r\u00e9 \u00ab <strong><em>revit allow or disallow join python<\/em><\/strong> \u00bb, j\u2019 ai trouv\u00e9 <a href=\"https:\/\/forum.dynamobim.com\/t\/how-to-set-disallow-join-for-structural-framing-using-python\/9404\">cette page<\/a> (un forum Dynamo qui parle de ce sujet) o\u00f9 notamment le code python est partag\u00e9 :<\/p>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"623\">\n<p><strong>import<\/strong> clr<\/p>\n<p>clr.AddReference(&#039;RevitAPI&#039;)<\/p>\n<p><strong>from<\/strong> Autodesk.Revit.DB <strong>import<\/strong> *<\/p>\n<p><strong>from<\/strong> Autodesk.Revit.DB.Structure <strong>import<\/strong> *<\/p>\n<p>clr.AddReference(&#039;RevitNodes&#039;)<\/p>\n<p><strong>import<\/strong> Revit<\/p>\n<p>clr.ImportExtensions(Revit.GeometryConversion)<\/p>\n<p>clr.ImportExtensions(Revit.Elements)<\/p>\n<p>clr.AddReference(&#039;RevitServices&#039;)<\/p>\n<p><strong>import<\/strong> RevitServices<\/p>\n<p><strong>from<\/strong> RevitServices.Persistence <strong>import<\/strong> DocumentManager<\/p>\n<p><strong>from<\/strong> RevitServices.Transactions <strong>import<\/strong> TransactionManager<\/p>\n<p>doc = DocumentManager.Instance.CurrentDBDocument<\/p>\n<p>uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument<\/p>\n<p><em>#Unwrapping Dynamoelement to Revit element.<\/em><\/p>\n<p>beams = UnwrapElement(IN[0])<\/p>\n<p><em>#Do some action in a Transaction<\/em><\/p>\n<p>TransactionManager.Instance.EnsureInTransaction(doc)<\/p>\n<p><strong>for<\/strong> beam <strong>in<\/strong> beams:<\/p>\n<p>StructuralFramingUtils.DisallowJoinAtEnd(beam,0)<\/p>\n<p>StructuralFramingUtils.DisallowJoinAtEnd(beam,1)<\/p>\n<p>TransactionManager.Instance.TransactionTaskDone()<\/p>\n<p>OUT = 0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">Apr\u00e8s lecture du code Python, je vois divers probl\u00e8mes :<\/p>\n<ul>\n<li>Il permet d\u2019interdire le joint mais ne permet pas de l\u2019autoriser,<\/li>\n<li>Il faut absolument que les \u00e9l\u00e9ments r\u00e9cup\u00e9r\u00e9s par le code soient des \u00e9l\u00e9ments de type \u00ab Ossature \u00bb dans le cas contraire le script ne fonctionnera pas.<\/li>\n<\/ul>\n<p style=\"text-align: justify\"><u>1.2 Recherche des \u00e9l\u00e9ments manquants :<\/u><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Comme dit ci-dessus, le script permet d\u2019interdire le joint mais pas de l\u2019autoriser.<\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Apr\u00e8s avoir tap\u00e9 comme mot cl\u00e9 sur moteur de recherche internet \u00ab <strong><em>StructuralFramingUtils<\/em><\/strong>. \u00bb, j\u2019ai trouv\u00e9 <a href=\"http:\/\/www.revitapidocs.com\/2015\/dab802b2-9731-94b6-3e56-f584d6f19676.htm\">cette page<\/a> o\u00f9 l\u2019on d\u00e9crit l\u2019utilisation de la m\u00e9thode \u00ab <strong><em>AllowJoinAtEnd<\/em><\/strong> \u00bb permettant d\u2019autoriser la jonction entre \u00e9l\u00e9ments d\u2019ossature.<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca4d200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image005\" border=\"0\" height=\"266\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c12200b-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image005\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\"><span style=\"text-decoration: underline\">Nota :<\/span> vous trouvez <a href=\"http:\/\/www.revitapidocs.com\/\">ici<\/a>, la documentation d\u00e9crivant toutes les syntaxes pouvant \u00eatre utilis\u00e9e pour l\u2019API Revit.<\/p>\n<p style=\"text-align: justify\">A cette \u00e9tape, nous avons toutes les informations pour cr\u00e9er le script Dynamo For Revit.<\/p>\n<p style=\"text-align: justify\"><strong><u>2- Cr\u00e9ation du script Dynamo For Revit:<\/u><\/strong><\/p>\n<p style=\"text-align: justify\"><u>2.1 S\u00e9lection des \u00e9l\u00e9ments :<\/u><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;S\u00e9lectionner plusieurs \u00e9l\u00e9ments dans Revit via Dynamo for Revit se r\u00e9alise en utilisant le n\u0153ud \u00ab <strong><em>Select Model Elements<\/em><\/strong> \u00bb, n\u00e9anmoins, il faut absolument que les \u00e9l\u00e9ments r\u00e9cup\u00e9r\u00e9s par le script Python soit des \u00e9l\u00e9ments de type \u00ab Ossature \u00bb dans le cas contraire le script ne fonctionnera pas.<\/p>\n<p style=\"text-align: justify\">En cons\u00e9quence nous allons effectuer un filtre sur les \u00e9l\u00e9ments s\u00e9lectionn\u00e9s en utilisant les n\u0153uds :<\/p>\n<ul>\n<li>\u00ab <strong><em>Element.GetParameterValueByName<\/em><\/strong> \u00bb : extrait des valeurs d\u2019une variable via son appellation<\/li>\n<li>\u00ab <strong><em>List.FilterByBoolMask<\/em><\/strong> \u00bb : applique un filtre compos\u00e9 de bool\u00e9ens afin d\u2019extraire deux listes (liste vrai, liste fausse)<\/li>\n<\/ul>\n<p style=\"text-align: justify\"><u>Extraction de la cat\u00e9gorie des \u00e9l\u00e9ments s\u00e9lectionn\u00e9s :<\/u><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Apr\u00e8s voir plac\u00e9 les n\u0153uds \u00ab <strong><em>Select Model Elements<\/em><\/strong> \u00bb et \u00ab <strong><em>Element.GetParameterValueByName<\/em><\/strong> \u00bb, je les connecte ensembles en extrayant la cat\u00e9gorie des \u00e9l\u00e9ments s\u00e9lectionner (Code Block texte \u00ab <strong><em>Cat\u00e9gorie<\/em><\/strong> \u00bb).<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7e92200c-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image007\" border=\"0\" height=\"210\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca51200d-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image007\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Je transforme la liste des cat\u00e9gories en texte \u00e0 l\u2019aide du n\u0153ud \u00ab <strong><em>String from Object<\/em><\/strong> \u00bb, pour l\u2019utiliser comme premi\u00e8re entr\u00e9e du n\u0153ud condition \u00ab <strong><em>=<\/em><\/strong> \u00bb et la comparer au Code Block texte \u00ab <strong><em>Ossature<\/em><\/strong> \u00bb.<\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;De cette fa\u00e7on, j\u2019obtiens une liste compos\u00e9e de bool\u00e9en m\u2019indiquant la position des poutres dans la liste de s\u00e9lection.<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca55200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image009\" border=\"0\" height=\"213\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7e96200c-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image009\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Enfin, je fais utiliser la liste de bool\u00e9en comme masque pour filtrer la liste de s\u00e9lection \u00e0 l\u2019aide du n\u0153ud \u00ab <strong><em>List.FilterByBoolMask<\/em><\/strong> \u00bb. La sortie \u00ab <strong><em>In<\/em><\/strong> \u00bb de ce n\u0153ud \u00e9tant la liste des poutres r\u00e9sultantes du filtre.<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca59200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image011\" border=\"0\" height=\"136\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c19200b-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image011\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\"><u>2.2 Utilisation et modification du script Python&#160; :<\/u><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Cette partie va consister \u00e0 r\u00e9\u00e9crire le script Python d\u00e9couvert dans le chapitre 1.1 pour r\u00e9pondre \u00e0 nos contraintes (pouvoir Autoriser ou Interdire le joint).<\/p>\n<p style=\"text-align: justify\"><u>Modification du script :<\/u><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Vous trouvez ci-dessous mes modifications :<\/p>\n<ul>\n<li>Introduction d\u2019une deuxi\u00e8me variable \u00ab <strong><em>jonction<\/em><\/strong> \u00bb permettant de savoir si l\u2019utilisateur veut autoriser ou pas les jonctions (bool\u00e9en).<\/li>\n<li>Ajout de la condition \u00ab <strong><em>If<\/em> <\/strong>\u00bb d\u00e9pendant de la valeur \u00ab <strong><em>jonction<\/em><\/strong> \u00bb (vrai ou faux) \u00e0 l\u2019int\u00e9rieur du \u00ab <strong><em>For<\/em><\/strong> \u00bb permettant de lancer la fonction Autoriser ou la fonction Interdire la jonction.<\/li>\n<\/ul>\n<table border=\"1\" cellpadding=\"0\" cellspacing=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"623\">\n<p><strong>import<\/strong> clr<br \/>clr.<strong>AddReference<\/strong>(&#039;RevitAPI&#039;)<br \/><strong>from<\/strong> Autodesk.Revit.DB <strong>import<\/strong> *<br \/><strong>from<\/strong> Autodesk.Revit.DB.Structure <strong>import<\/strong> *<br \/>clr.<strong>AddReference<\/strong>(&#039;RevitNodes&#039;)<br \/><strong>import<\/strong> Revit<br \/>clr.<strong>ImportExtensions<\/strong>(Revit.GeometryConversion)<br \/>clr.<strong>ImportExtensions<\/strong>(Revit.Elements)<br \/>clr.<strong>AddReference<\/strong>(&#039;RevitServices&#039;)<br \/><strong>import<\/strong> RevitServices<br \/><strong>from<\/strong> RevitServices.Persistence <strong>import<\/strong> DocumentManager<br \/><strong>from<\/strong> RevitServices.Transactions <strong>import<\/strong> TransactionManager<br \/>doc = DocumentManager.Instance.CurrentDBDocument<br \/>uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument<br \/>#Unwrapping Dynamoelement to Revit element.<br \/>beams = <strong>UnwrapElement<\/strong>(IN[0])<br \/><strong>joinction = IN[1]<\/strong><br \/>#Do some action in a Transaction<br \/>TransactionManager.Instance.<strong>EnsureInTransaction<\/strong>(doc)<br \/><strong>for<\/strong> beam <strong>in<\/strong> beams:<br \/><strong> if joinction:<\/strong><br \/>&#160;&#160;&#160;&#160;&#160;&#160; StructuralFramingUtils.<strong>DisallowJoinAtEnd<\/strong>(beam,0)<br \/>&#160;&#160;&#160;&#160;&#160;&#160; StructuralFramingUtils.<strong>DisallowJoinAtEnd<\/strong>(beam,1)<br \/><strong> else :<br \/>&#160;&#160;&#160;&#160;&#160;&#160; StructuralFramingUtils.AllowJoinAtEnd(beam,0)<br \/>&#160;&#160;&#160;&#160;&#160;&#160; StructuralFramingUtils.AllowJoinAtEnd(beam,1)<\/strong><br \/>TransactionManager.Instance.<strong>TransactionTaskDone<\/strong>()<br \/># Affectez la sortie \u00e0 la variable OUT.<br \/>OUT = 0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: justify\">Lorsque le code est cr\u00e9\u00e9, il suffit de l\u2019introduire dans un n\u0153ud Python.<\/p>\n<p style=\"text-align: justify\"><span style=\"text-decoration: underline\">Cr\u00e9ation du n\u0153ud Python :<\/span> dans la fonction de recherche entrez \u00ab <strong><em>Script python<\/em><\/strong> \u00bb.<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca5d200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image013\" border=\"0\" height=\"140\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca61200d-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image013\" width=\"454\" \/><\/a><\/p>\n<ul>\n<li>Cliquez sur le bouton \u00ab <strong><em>+<\/em><\/strong> \u00bb pour cr\u00e9er une deuxi\u00e8me entr\u00e9e \u00ab <strong><em>IN[1]<\/em><\/strong> \u00bb, effectuez un clic droit puis s\u00e9lectionnez \u00ab <em>Modifier<\/em> \u00bb pour visualiser le code Python.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c21200b-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image014\" border=\"0\" height=\"404\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca68200d-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image014\" width=\"354\" \/><\/a><\/p>\n<ul>\n<li>Par d\u00e9faut, ce n\u0153ud dispose un script Python de base, remplacez-le par le code modifi\u00e9 ci-dessus puis cliquez sur le bouton \u00ab <em>Enregistrer les modifications<\/em> \u00bb.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7e9f200c-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image016\" border=\"0\" height=\"248\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7ea3200c-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image016\" width=\"454\" \/><\/a><\/p>\n<ul>\n<li>Enfin, cr\u00e9ez un dernier n\u0153ud de type \u00ab <strong><em>bool\u00e9en<\/em><\/strong> \u00bb pour le connecter \u00e0 la deuxi\u00e8me entr\u00e9e du script Python (la premi\u00e8re entr\u00e9e \u00e9tant r\u00e9serv\u00e9e au \u00ab <strong><em>In<\/em><\/strong> \u00bb du n\u0153ud \u00ab <strong><em>List.FilterByBoolMask<\/em><\/strong> \u00bb.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c25200b-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image018\" border=\"0\" height=\"193\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7ea7200c-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image018\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">&#160;&#160;&#160;&#160;Si tous s\u2019est bien pass\u00e9 apr\u00e8s s\u00e9lectionn\u00e9 un groupe d\u2019\u00e9l\u00e9ments et cliquer alternativement sur \u00ab <strong><em>True<\/em><\/strong> \u00bb ou \u00ab <strong><em>False<\/em><\/strong> \u00bb, vous devez voir apparaitre les changements dans Revit.<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7eab200c-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image020\" border=\"0\" height=\"209\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c29200b-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image020\" width=\"454\" \/><\/a><\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca71200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image022\" border=\"0\" height=\"195\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca7a200d-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image022\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\"><strong><u>3- Utilisation du script dans \u00ab <em>Dynamo Player<\/em> \u00bb :<\/u><\/strong><\/p>\n<p style=\"text-align: justify\">Pou ceux qui veulent utiliser le script dans \u00ab <strong><em>Dynamo Player<\/em><\/strong> \u00bb pensez :<\/p>\n<ul>\n<li>renommer les n\u0153uds<\/li>\n<li>d\u00e9signer les deux entr\u00e9es comme \u00ab <em>ENTREE<\/em> \u00bb<\/li>\n<\/ul>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a487ca7e200d-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image023\" border=\"0\" height=\"443\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c30200b-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image023\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Soit dans \u00ab <strong><em>Dynamo Player<\/em><\/strong> \u00bb :<\/p>\n<p><a href=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a45e7eb2200c-pi\"><img loading=\"lazy\" decoding=\"async\" alt=\"clip_image025\" border=\"0\" height=\"156\" src=\"https:\/\/villagebim.typepad.com\/.a\/6a015391e15a28970b0240a4ac4c39200b-pi\" style=\"background-image: none;margin-left: auto;margin-right: auto\" title=\"clip_image025\" width=\"454\" \/><\/a><\/p>\n<p style=\"text-align: justify\">Pour ceux qui veulent utiliser mon code, vous pouvez le t\u00e9l\u00e9charger <span class=\"asset  asset-generic at-xid-6a015391e15a28970b0240a487cb51200d img-responsive\"><a href=\"https:\/\/villagebim.typepad.com\/files\/joindreoudisjoindre.dyn\">JoindreOuDisjoindre<\/a><\/span>.<\/p>\n<p style=\"text-align: justify\">&#160;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#160;&#160;&#160;&#160;Les utilisateurs du logiciel Revit connaissent la fonction \u00ab Autoriser\/Interdire la jonction \u00bb entre \u00e9l\u00e9ments d\u2019ossature (poutres). Cependant, elle provoque souvent des frustrations car elle s\u2019effectue n\u0153ud par n\u0153ud et donc g\u00e9n\u00e8re des pertes de temps. Je vous propose de construire le script Dynamo For Revit afin de r\u00e9aliser cette t\u00e2che. 1- Recherche bibliographique de [&hellip;]<\/p>\n","protected":false},"author":4760,"featured_media":2472,"menu_order":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[15,17,57,58],"tags":[20,420,291,421,419,21],"class_list":["post-262","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autodesk-revit","category-nouveautes","category-programmation-visuelle","category-structure","tag-autodesk","tag-autoriser-la-jonction-dossature","tag-dynamo-for-revit","tag-interdire-la-jonction-dossature","tag-python","tag-revit","dhig-theme--light"],"acf":[],"_links":{"self":[{"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/posts\/262","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/users\/4760"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/comments?post=262"}],"version-history":[{"count":0,"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/posts\/262\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/media\/2472"}],"wp:attachment":[{"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/media?parent=262"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/categories?post=262"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.autodesk.com\/villagebim\/wp-json\/wp\/v2\/tags?post=262"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}