Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IRayMeshIntersection.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* IRayMeshIntersection.h (C) 2000-2009 */
9/* */
10/* Calcul de l'intersection entre des segments et la surface d'un maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_IRAYMESHINTERSECTION_H
13#define ARCANE_IRAYMESHINTERSECTION_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/ArcaneTypes.h"
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22ARCANE_BEGIN_NAMESPACE
23
24/*---------------------------------------------------------------------------*/
25/*---------------------------------------------------------------------------*/
26
27class IMesh;
28
29/*---------------------------------------------------------------------------*/
30/*---------------------------------------------------------------------------*/
31/*!
32 * \brief Interface générique du calcul de l'intersection d'un rayon avec une face.
33 */
35{
36 public:
37
38 virtual ~IRayFaceIntersector() {}
39
40 public:
41
42 /*!
43 * \brief Calcul l'intersection entre un rayon et une face.
44 *
45 * \param origin position d'origine du rayon.
46 * \param direction direction du rayon.
47 * \param orig_face_local_id numéro local de la face d'origine du rayon
48 * \param face_nodes positions des noeuds de la face.
49 * \param face_local_id numéro local de la face. S'il ne s'agit
50 * pas d'une face du sous-domaine, vaut ITEM_NULL_LOCAL_ID.
51 * \param user_value valeur utilisateur à remplir par l'appelant si besoin
52 * \param distance en retour, distance d'intersection s'il y en a une
53 * \param intersection_position en retour, position du point d'intersection
54 * \return true si une intersection est trouvée, false sinon.
55 */
56 virtual bool computeIntersection(Real3 origin,Real3 direction,
57 Int32 orig_face_local_id,
58 Int32 face_local_id,
59 Real3ConstArrayView face_nodes,
60 Int32* user_value,
61 Real* distance,Real3* intersection_position) =0;
62};
63
64/*---------------------------------------------------------------------------*/
65/*---------------------------------------------------------------------------*/
66/*!
67 * \brief Calcul de l'intersection entre un ensemble de segments et la surface
68 * d'un maillage.
69 */
71{
72 public:
73
74 //! Libère les ressources
76
77 public:
78
79 //! Construit l'instance
80 virtual void build() =0;
81
82 public:
83
84 /*!
85 * \brief Calcule l'intersection.
86 *
87 * En retour, le tableau \a faces_local_id contient le numéro
88 * local de la face coupée pour chaque segment. Si un segment
89 * ne coupe pas de face, le local_id correspondant est NULL_ITEM_LOCAL_ID.
90 */
91 virtual void compute(Real3ConstArrayView segments_position,
92 Real3ConstArrayView segments_direction,
93 Int32ConstArrayView orig_faces_local_id,
94 Int32ArrayView user_values,
95 Real3ArrayView intersections,
96 RealArrayView distances,
97 Int32ArrayView faces_local_id) =0;
98
99 /*!
100 * \brief Calcule l'intersection de rayons.
101 *
102 * Calcul l'intersection des rayons de la familly \a ray_family
103 * avec la surface du maillage. La position et la direction
104 * des rayons est donnée par les variables \a rays_position
105 * et \a rays_direction. Le tableau \a rays_orig_face contient
106 * le numéro local de la face dont le rayon est originaire. Ce tableau
107 * est utilisé dans le IRayFaceIntersector.
108 *
109 * En retour \a rays_face contiendra pour chaque rayon le localId()
110 * de la face intersectée
111 * ou NULL_ITEM_LOCAL_ID si un rayon n'intersecte aucune face.
112 * Le tableau \a rays_intersection contient en retour la position
113 * du point d'intersection et \a rays_distance la distance du
114 * point d'intersection par rapport à l'origine du rayon.
115 * Le tableau \a user_values est remplit en retour par
116 * le IRayFaceIntersector
117 *
118 * En parallèle, les rayons de la famille sont échangés
119 * entre sous-domaines pour qu'un rayon se trouve dans le
120 * même sous-domaine que celui propriétaire de la face
121 * intersectée.
122 * Si un rayon n'intersecte pas de face, il reste dans
123 * ce sous-domaine.
124 */
125 virtual void compute(IItemFamily* ray_family,
126 VariableParticleReal3& rays_position,
127 VariableParticleReal3& rays_direction,
128 VariableParticleInt32& rays_orig_face,
129 VariableParticleInt32& user_values,
130 VariableParticleReal3& intersections,
131 VariableParticleReal& distances,
132 VariableParticleInt32& rays_face) =0;
133
134 /*!
135 * \brief Positionne le callback d'intersection.
136 *
137 * Cela permet à l'appelant de spécifier sa méthode de calcul
138 * d'intersection d'un rayon avec une face. Si cette méthode n'est
139 * pas appelée, un intersecteur par défaut est utilisé.
140 */
141 virtual void setFaceIntersector(IRayFaceIntersector* intersector) =0;
142
143 //! Intersecteur utilisé (0 si aucun spécifié)
145};
146
147/*---------------------------------------------------------------------------*/
148/*---------------------------------------------------------------------------*/
149
150ARCANE_END_NAMESPACE
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155#endif
156
Interface d'une famille d'entités.
Interface générique du calcul de l'intersection d'un rayon avec une face.
virtual bool computeIntersection(Real3 origin, Real3 direction, Int32 orig_face_local_id, Int32 face_local_id, Real3ConstArrayView face_nodes, Int32 *user_value, Real *distance, Real3 *intersection_position)=0
Calcul l'intersection entre un rayon et une face.
Calcul de l'intersection entre un ensemble de segments et la surface d'un maillage.
virtual void build()=0
Construit l'instance.
virtual void compute(IItemFamily *ray_family, VariableParticleReal3 &rays_position, VariableParticleReal3 &rays_direction, VariableParticleInt32 &rays_orig_face, VariableParticleInt32 &user_values, VariableParticleReal3 &intersections, VariableParticleReal &distances, VariableParticleInt32 &rays_face)=0
Calcule l'intersection de rayons.
virtual IRayFaceIntersector * faceIntersector()=0
Intersecteur utilisé (0 si aucun spécifié)
virtual void setFaceIntersector(IRayFaceIntersector *intersector)=0
Positionne le callback d'intersection.
virtual ~IRayMeshIntersection()
Libère les ressources.
virtual void compute(Real3ConstArrayView segments_position, Real3ConstArrayView segments_direction, Int32ConstArrayView orig_faces_local_id, Int32ArrayView user_values, Real3ArrayView intersections, RealArrayView distances, Int32ArrayView faces_local_id)=0
Calcule l'intersection.
Variable scalaire sur un type d'entité du maillage.
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
Vue modifiable d'un tableau d'un type T.
Vue constante d'un tableau de type T.