Accéder au contenu principal

Le guide et le média de l'écosystème construction numérique et BIM

Espace membre

Dynamo - Obtenir la valeur d'un paramètre de type

‹ Retour à Dynamo - Obtenir la valeur d'un paramètre de type
BL Benoît LECRIOUX
4 juillet 2016
16.37K

Commentaires des utilisateurs

Aucun avis pour le moment
AK adrian konini
·
Voila un petit code pour récupérer les paramètres.
J'espère que sera utile.
cdt
JG Julien G
·
Ok.
Belle petite usine à gaz :)
(intégré dans un nœud personnalisé à en croire la présentation)
BL Benoît LECRIOUX
·
Non car le point trouvé correspond à l'arase inférieure du plancher et la hauteur du linteau comprend l'épaisseur de celui-ci.
JG Julien G
·
Au point 2) le vecteur est égal à la hauteur du linteau recherché non ? Pourquoi ajouter les points 3) et 4) ?
BL Benoît LECRIOUX
·
Je vous fais un petit retour suite à l'aide précieuse de Daniel. Son idée du Ray Cast a porté ses fruits après quelques noeuds supplémentaires.
L'idée du code Dynamo est de tracer un vecteur depuis l'ouverture jusqu'au sol supérieur pour en déduire son altimétrie Z. Si je décortique un peu les étapes:
1) Créer une BoundingBox et en déduire son altimétrie maxi
2) Créer un vecteur allant de ce point maxi au 1er point de rencontre avec le sol supérieur (son arase inférieure donc)
3) Créer un second vecteur d'une longueur arbitraire pour "dépasser" l'épaisseur du sol
4) Créer un 3e vecteur vers le bas pour obtenir l'arase supérieure du sol

Comme il vaut mieux un schéma qu'un long discours, je vous ai mis le code en PJ.

Merci également à Nathan pour son aide.
BL Benoît LECRIOUX
·
Merci Daniel, ça récompensera le fait que je vienne te voir au PRUG !;) (Aller-retour Rennes-Paris en voiture entre 16h et 2h du mat', j'étais bien motivé quand même!)

Je creuse ta solution de mon côté quand même en attendant.
DH Daniel Hurtubise
·
Comme j'aime bien les Bretons envoie un mp et je te contacte demain :)
BL Benoît LECRIOUX
·
Tu veux dire que tu trouves toujours la bonne idée du 1er coup? Allez, avoues que tu n'es pas arrivé à ce niveau sans galérer comme moi...;)
Et puis à défaut d'être productif tout de suite, chercher permet de tomber sur des trucs qui serviront sûrement plus tard.

Je viens de l'ouvrir, j'essaie de comprendre. Ce sont des noeuds que je n'ai pas encore utilisé.
Par contre je ne cherche pas la hauteur de l'ouverture mais la hauteur du linteau, je ne sais pas si la méthode peut s'appliquer quand même?
DH Daniel Hurtubise
·
T'as raison Benoit c’était pas une bonne idée ;)

Regarde mon draft. Ca te permet de trouver le point bas tout de suite, tu refais un raycast par en haut et hop tu as la hauteur de l'ouverture ;)
BL Benoît LECRIOUX
·
Je n'ai pas encore regardé vos réponses mais j'abandonne l'idée de chercher le sol attaché au mur contenant l'ouverture car je viens de constater qu'un même mur peut être attaché à plusieurs sols d'altimétries différentes; je n'obtiendrai donc pas l'info. d'un sol unique que je souhaitais.
Le code Python de Ben Osborne fonctionne correctement pour des éléments joints mais entre une dalle et un mur, la fonction utilisée est "Attacher haut/bas" et non "Attacher la géométrie"; le script renvoie donc "Faux" même s'ils sont attachés.
DH Daniel Hurtubise
·
Je suis partie sur un Ray Cast, voici les fichiers.

Rejoindre la discussion

NN Nathan Nivill
·
Si j'ai bien compris avec ça, ça devrait marcher.
BL Benoît LECRIOUX
·
En fait il doit me manquer le "Combinateur" pour le noeud "List.Combine" mais je ne sais pas quoi mettre (voir PJ)
BL Benoît LECRIOUX
·
Mince, je viens de voir qu'Hexabim avait rendu mon exemple illisible (y'avait des tabulations)...:D

Les 9 sous listes sont:
[0] a et x
[1] a et y
...
[5] b et z
...
[8] c et z
BL Benoît LECRIOUX
·
Bon j'avance doucement sans avoir si je vais arriver au bout...
Comment générer une liste de toutes les combinaisons possibles entre 2 listes. Je voudrais combiner les sols et les murs pour voir s'ils sont joints.
En essayant d'expliquer cela "mathématiquement":
- Liste n°1 contient a,b, et C
- Liste n°2 contient x,y et z
- Je voudrais obtenir une liste 3 avec 9 sous-listes:
[o] [2] [4] [6] [8]
[0]a [0]a [0]b [0]c [0]c
[1]x [1]z [1]y [1]x [1]z
[1] [3] [5] [7]
[0]a [0]b [0]b [0]c
[1]y [1]x [1]z [1]y

Je suis sûr que Dynamo sait faire cela et j'ai trouvé des choses sur internet mais je n'arrive pas à l'appliquer à mon cas...
BL Benoît LECRIOUX
·
Merci Nathan de partager ta réflexion.
En fait c'est la 1ère idée que j'ai eu car ça semble le plus simple à récupérer dans Dynamo. Mais j'ai laissé cette piste car que se passe-t-il quand la dalle ne correspond pas aux niveaux (décaissés, recharges, niveau en fini, dalle en brut...)? Eh bien la hauteur de linteau sera faussée.
Au début je me suis dit que ça couvrirait au moins 80% des cas mais le problème avec l'automatisation c'est que les utilisateurs ont tendance à ne plus se poser la question de comment est obtenu la valeur avec le temps; et on finit par créer plus d'erreur que quand c'était calculé à la main... Je tends donc à trouver un script qui fonctionnerait pour tous les cas, avec les difficultés que ça comporte... J'ai dû mettre un peu de côté le script pour faire autre chose ce matin mais je m'y remets; je vais regarder ce que me donne ce script Python.

Sinon, peut-être qu"en combinant les infos du mur hôte et des niveaux j'arriverais à quelque chose?... je vais voir...
NN Nathan Nivill
·
Ah oui il est préférable de bien maîtriser l'anglais sinon cela peut poser des problèmes de compréhension ...

J'ai réfléchis un peu à ton problème, je pense que récupérer les niveaux ne sera pas forcément suffisant. Il faudra aussi systématiquement associer le niveau inférieur de ta dalle pour obtenir ta hauteur d'étage à l'aide d'une différence entre tes deux altitudes. Sinon cela me parait compliqué d'obtenir ta hauteur de linteau sur la base de la hauteur de porte et l'élévation haute de ta dalle supérieure.

Mais du coup j'ai pensé à une autre solution : Au lieu d'utiliser les Sols, tu peux directement utiliser les niveaux. Sur cette base tu calcules toutes tes hauteurs d'étages (Arase Sup dalle base jusqu'à arase sup dalle haute). En principe ces hauteurs seront correct que le voile soit en extérieur ou en intérieur. Tu filtres également tes portes par niveaux puis pour chaque porte tu déduis la hauteur d'étage correspondante à la hauteur de porte.
Tu devrais alors obtenir tes hauteurs de linteaux.

Je pense que c'est beaucoup plus simple comme solution étant donné que cela t'évites de passer par du code Python. J'ai pas essayé mais cela peut marcher, enfin cela dépend aussi de la complexité de ton projet avec les décalages éventuels des dalles.
BL Benoît LECRIOUX
·
Je vais regarder cela et m'inscrire sur le forum. Merci Nathan.
L'anglais risque de me mettre des freins une fois de plus...:(
NN Nathan Nivill
·
Je suppose donc que tu as donné une hauteur à tes voiles plutôt qu'une contrainte inférieure et une contrainte supérieure ?
Je dessine en général en utilisant les contraintes et la hauteur du voile est donc toujours celle entre ma contrainte inf et ma contrainte sup. Même en réalisant un joint entre un sol et mon mur la hauteur de mon voile ne change pas. C'est très énervant dans certaines situations d'ailleurs, je songe de plus en plus à dessiner avec des voiles "Sans contrainte" ... Mais justement si tu spécifies une hauteur à ton voile tu as effectivement un problème pour les voiles intérieurs.

Pour obtenir le sol attaché à ton voile je peux te donner quelques pistes que j'ai moi même suivi pour créer automatiquement des joints entre des éléments. Il n'y a qu'une fonction qui va changer d'ailleurs.
En suivant ce lien : http://dynamobim.org/forums/topic/automatic-join-geometry-in-revit/ tu peux trouver un post de Ben OSBORNE qui donne un code permettant de joindre des éléments. Tu as aussi une fonction qui permet de tester si des éléments sont joints : Autodesk.Revit.DB.JoinGeometryUtils.AreElementJoined(doc, elementA, elementB). En adaptant le code tu devrais pouvoir sortir un booléen qui associé avec le noeud "FilterByBoolMask" devrait récupérer uniquement les sols joints à certains voiles.

Voila je pense que ça serait un bon point de départ mais c'est juste la démarche qui me vient à l'esprit en voyant ton problème ... et je suis pas expert haha ! Mais cela me semble réalisable ! Tu auras besoin de conseils de quelqu'un qui s'y connait mieux que moi pour continuer :)
Tu peux t’inscrire sur le forum DynamoBIM et poser ta question directement la bas. Certaines personnes font des trucs assez incroyables ...
BL Benoît LECRIOUX
·
Oui c'est ce que j'ai commencé à faire mais il faut que le haut du mur corresponde au haut de la dalle. pour les murs extérieurs ça devrait couvrir la majorité des cas. Par contre comment faire avec un voile intérieur sous plancher? La hauteur du linteau comprend l'épaisseur de la dalle.
C'est pour ça que je cherchais du côté du sol mais cela semble compliqué de faire: porte=> mur hôte=> sol attaché (je bloque après la 2é étape).
La lettre HEXABIM

Les outils qui comptent, tous les 15 jours.

Nouveautés utiles, un comparatif, un retour d'expérience. Désinscription en un clic.

Newsletter
Newsletter