Lundi 4 Juillet 2016
23 réponses
14.5K vues
Bonjour à tous et notamment aux utilisateurs de Dynamo,
je cherche à faire quelque chose à priori simple: obtenir la valeur de la hauteur d'une porte et ce, pour toutes les portes du projet.
Je récupère bien toutes les occurences de portes du projet mais lorsque j'essaie d'obtenir une valeur d'un des paramètres j'obtiens des erreurs. A noter que j'utilise des customs nodes du package Archi-Lab (j'ai essayé avec un revit anglais, à priori ça ne vient pas de là).
Je vous ai joint le screenshot.
je cherche à faire quelque chose à priori simple: obtenir la valeur de la hauteur d'une porte et ce, pour toutes les portes du projet.
Je récupère bien toutes les occurences de portes du projet mais lorsque j'essaie d'obtenir une valeur d'un des paramètres j'obtiens des erreurs. A noter que j'utilise des customs nodes du package Archi-Lab (j'ai essayé avec un revit anglais, à priori ça ne vient pas de là).
Je vous ai joint le screenshot.
1
Merci Nathan. En combinant ta solution et la mienne, j'arrive à mes fins. Le noeud "Element.Type" semble être mieux adapté que "Get Type parameter"...
Une idée pour récupérer le niveau du sol le plus proche au-dessus de la porte pour en déduire la hauteur de linteau restant?
Une idée pour récupérer le niveau du sol le plus proche au-dessus de la porte pour en déduire la hauteur de linteau restant?
A première vue j'aurai plutôt tendance à récupérer le mur qui contient la porte avec "Element.host" de Clockwork Package puis utiliser la hauteur du mur (hauteur totale avec dalle incluse donc) et travailler à partir de ca.
Après il ne faut pas avoir dessiné les murs sur toute la hauteur du bâtiment ...
Après il ne faut pas avoir dessiné les murs sur toute la hauteur du bâtiment ...
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).
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).
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 ...
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 ...
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.
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.
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...
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...
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...
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...
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.
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.
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?
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?
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.
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.
There are no replies made for this post yet.
Please login to post a reply
You will need to be logged in to be able to post a reply. Login using the form on the right or register an account if you are new here. Register Here »