Revit : Sélectionner les contours de la géométrie d'un objet

Revit : Sélectionner les contours de la géométrie d'un objet

lmillet3216
Enthusiast Enthusiast
1 381 Visites
14 Réponses
Message 1 sur 15

Revit : Sélectionner les contours de la géométrie d'un objet

lmillet3216
Enthusiast
Enthusiast

Bonjour,

 

Dans le cadre d'un process d'automatisation des nuages de révision.

Je souhaite savoir s'il est possible, "informatiquement parlant", de sélectionner les contours d'un objet dans une esquisse de nuage. Soit avec un rectangle, soit avec un ellipse, soit avec le choix des lignes existantes (en vert).

 

Concrètement, si j'ai un poteau dans une vue en coupe, je veux pouvoir, à partir de son ID, être en mesurer d'identifier les 4 lignes de de contour du rectangle du poteau.

  1. Le mieux et le plus simple serait de toucher les lignes réelles de l'objet (sélection verte dans le menu "dessiner" de l'esquisse),ligne de contour.jpg
  2. au pire faire un rectangle fictif de la position approximative du poteau selon ses dimensions.

Si ces lignes sont sélectionnables, il existe forcement quelque part un ID de chacune de ces 4 lignes. Après de là à savoir si elles sont reliées à l'objet qu'elles bordent, je pense que non ...

 

Dites moi si ce que je souhaite faire est réalisable et si oui comment ?

 

Merci d'avance,


Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Sélectionner les contours de la géométrie d'un objet

0 J'aime
Solutions acceptées (1)
1 382 Visites
14 Réponses
Replies (14)
Message 2 sur 15

ekouassi
Collaborator
Collaborator

Bonjour,

A mon avis cela n'est pas réalisable car ton nuage de révision ne pourra pas épouser exactement les contours de ton objet.

par contre pour afficher ton objet dans ta coupe tu peux exécuter: Gérer>Sélection par identifiant et par la suite faire un nuage de révision dans la zone où se trouve ton objet ( CF capture )

Bien sûr avant tu devrais avoir l'identifiant de ton objet en la sélectionnant puis en exécutant : Gérer >ID de sélection ( Cf capture)

ID de sélection et Sélectionner par identifiant se trouvent dans l'onglet gérer dans le groupe renseignements.Capture111.PNG

0 J'aime
Message 3 sur 15

patrick.emin
Alumni
Alumni

Bonjour @lmillet3216 

La communauté a essayé de répondre à votre question. Si vous pensez qu'une ou plusieurs de ces réponses vous aident, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.
Si nos équipes de support technique ont pu vous apporter une solution ou contribuer significativement à vous aider en dehors de ce forum, pouvez vous partager ici la solution trouvée et cliquer sur le bouton  APPROUVER LA SOLUTION  de façon qu'elle bénéficie à la communauté?
Merci.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime
Message 4 sur 15

lmillet3216
Enthusiast
Enthusiast

Bonjour,

 

Je ne suis pas certain qu'on se soit bien compris.

Je ne souhaite pas faire mon nuage directement. Je souhaite récupérer l'ID des 4 lignes de contours de mon poteau dans cette coupe (/ce plan de référence vertical) à partir de l'ID du poteau.

 

Y-a-t-il un moyen ? (dynamo ou autre) de récupérer l'ID des 4 lignes de contour de mon rectangle (poteau en coupe) à partir de l'ID du poteau.

En gros j'entrerais l'ID de mon poteau dans une interface, et la moulinette me ressortirait les 4 ID des lignes de contour de ce poteau.

0 J'aime
Message 5 sur 15

ekouassi
Collaborator
Collaborator

Ah je comprends mieux, en revit natif je crois que c'est pas possible maintenant reste à confirmer avec @Charles.Piro si cela est possible par le biais de la programmation

Message 6 sur 15

Charles.Piro
Advisor
Advisor

merci @ekouassi pour la mention ! 😉

Salut @lmillet3216,

 

alors tout d'abord il ne faut résonner en 2D mais en 3D. Ce que tu appelle des lignes n'en sont pas, ce sont des faces.

Ensuite, ces faces sont effectivement constituées de lignes : verticales, horizontales, arcs, etc..

L'ensemble de ces lignes constituent un élément appelé EdgeLoops et c'est cet élément qui défini le contour de la face. 

Concernant ta question, les faces et les lignes (Edge) n'ont pas d'identifiant Revit.

Par contre à partir de la sélection d'un élément, tu peux obtenir la position des points de début et de fin de chaque ligne ce qui va permettre de réaliser ce que tu souhaite.

 

Pour la sélection d'un élément tu as plusieurs option :

- sélection d'un élément

- sélection d'une face

- sélection d'une ligne

 

Ensuite il est également possible de proposer à l'utilisateur de sélectionner plusieurs objets.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 7 sur 15

lmillet3216
Enthusiast
Enthusiast

Bonjour,

 

Merci pour cette réponse qui se rapproche fortement de ce que je souhaite,

Pour être très concret:

lmillet3216_0-1649337934519.png

 

Pour un objet parallélépipédique O, soient A, B, C, D, E, F les 6 faces de l'objet.

Considérons que tous les plans de coupes sont parallèles aux faces.

 

Si je me place dans le plan de coupe A(=B), mon parallélépipède est un rectangle, de cotés C D E F.

Je souhaite :

  1. sélectionner l'ID de l'objet O
  2. déterminer le plan A comme la référence
  3. avoir l'ID des ces 4 faces C D E F, et que ces faces dans ce plan soient reconnues comme des lignes. Si l'ID d'un Edge n'existe pas, il me faut les 8 extrémités/sommet de lignes (dont 4 sont confondus dans le cas présent)
0 J'aime
Message 8 sur 15

Charles.Piro
Advisor
Advisor

Salut,

 

ce que tu me décrit est tout a fait possible. Maintenant cela va demander du travail car il faut détecter la face de ton objet qui est parallèle à ta vue puis en déduire les faces dont tu souhaite obtenir les contours.

Tu souhaite développer ton outil sous quelle forme (Macro, Dynamo, Plugin) ? Et en quel langage ?

 

N'hésite pas à poster les points de ton code qui te pose problème pour que l'on puisse t'aider à avancer.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 9 sur 15

jfbrigaud
Mentor
Mentor

Bonjour,

 

    Je ne sais pas si c'est exactement ce que vous recherchez mais je viens de faire un script qui permet de créer un nuage de révision en fonction de la sélection d'une face. cela vous permettra de vous faire une idée des possibilités de Dynamo. Ci-joint un exemple de script (fait en 10 mn).  

Les entrées :

  1. Sélection de la face.
  2. Sélection de la valeur de décalage du nuage par rapport à la face.
  3. Sélection de la vue où tracer le nuage.
  4. Sélection de la révision.

Nuage.jpgNuage2.jpg


Jean-François Brigaud

EESignature

Message 10 sur 15

lmillet3216
Enthusiast
Enthusiast

Merci pour la réponse, justement comment détecter la face parallèle à la coupe ? Est ce que Revit est capable de reconnaitre les faces toutes colinéaires au plan de référence ? ou faut-il faire un test/calcul mathématiques

 

Comment une fois que cela est fait déterminer les 4 faces hors plan ? Qu'aura-t-on en sortie si les edgeloop ne contiennent pas d'ID ?...

 

Je n'ai pas encore précisement la forme mais j'imagine qu'il pourrait s'agir d'un plug-in éventuellement une macro ou un dynamo, je ne sais pas encore en quel langage le coder. Que me conseilles-tu ?

0 J'aime
Message 11 sur 15

lmillet3216
Enthusiast
Enthusiast

Bonjour Jean-Francois,

 

Merci pour la réponse, en effet le résultat est très proche de ce que je souhaite obtenir. En revanche la manière pour y parvenir est différente, je ne souhaite pas sélectionner en 2 phases, la face, et le plan. Mais sélectionner simplement l'ID de mon objet et qu'il détecte automatiquement, dans une coupe donnée (que je ne détermine pas manuellement, mais automatiquement), la face de l'objet et les 4 contours.

 

1) Sélectionner l'ID de l'objet

2) Dans toutes les coupes de mon modèle qui contiennent cet objet : identifier la face colinéaire à celle du plan de coupe

3) Cela permet donc de pouvoir identifier les 4 faces hors plan, il s'agit donc des 4 contours EDGELOOP

4) placer un nuage dans les coupes

a. Sélection de la valeur de décalage du nuage par rapport à la face.

b. Sélection de la révision.

 

En somme je souhaite automatiser le processus que tu as déjà créé mais qui reste trop manuel.

0 J'aime
Message 12 sur 15

jfbrigaud
Mentor
Mentor

Bonjour,

 

         Cela est sans doute possible mais demande un travail de développement assez conséquent. Je te conseille de te rapprocher d’un développeur professionnel.


Jean-François Brigaud

EESignature

0 J'aime
Message 13 sur 15

lmillet3216
Enthusiast
Enthusiast

Il est prévu que je me fasse aider par un développeur pro, mais je voulais savoir si mon projet était réalisable et réaliste, a priori oui d'après les éléments que vous me communiquez.

Je voudrais juste entrer dans le détail de savoir comment identifier la face colinéaire (=parallèle) à mon plan de coupe, il s'agirait plutot d'un test mathématiques ou existe-t-il une relation entre un référence de plan et les faces (edgeloop) dans revit ?

0 J'aime
Message 14 sur 15

Charles.Piro
Advisor
Advisor
Solution acceptée

Salut,

 

Voici comment procéder :

- Déterminer (à partir des propriété) la normale de la vue active

- Sélection de l'objet souhaité

- Récupérer toutes les faces qui composent l'élément

- Pour chaque face vérifier l'orientation de celle-ci (propriété disponible dans l'API) et ne conserver que les faces perpendiculaires à la vue

- Pour les faces conservées, récupérer les contours (Edges) et ne conserver que les points

- Supprimer les points ne doublons (en fonction de la vue)

- Réaliser le nuage de révision dans la vue active suivant les points conservés.

 

Pour déterminer les faces/lignes/points à conserver, il faudra effectivement utilisé des formules mathématiques.

 

😉



PIRO Charles
Developer

PIRO CIE
Linkedin


Message 15 sur 15

lmillet3216
Enthusiast
Enthusiast

Bonjour, @Charles.Piro @jfbrigaud 

 

avec la formule : 

 

public double GetAlphaAngleOfView(Autodesk.Revit.DB.View view)
{
return XYZ.BasisX.AngleOnPlaneTo(view.RightDirection,XYZ.BasisZ);
}

 

je cherche à obtenir l'angle de la coupe sur une vue en plan.

 

Révélation

De sorte que si la coupe est selon x : α=0°

et si la coupe est selon y : α=90°

Et pour la coupe violette, 0°<α<90°

 

lmillet3216_0-1684827283907.png

 

Je cherche donc à savoir s'il existe dans Revit une "vue en plan absolue" dans laquelle j'aurai toute les coupes de mon projet (quel que soit leur niveau z d'implantation) et qui permettrait de calculer cet angle α pour toutes les coupes sur une seule vue de référence.

 

J'espère avoir été clair dans ma requête.

0 J'aime