Arcane  v3.16.6.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-2025 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-2025 */
9/* */
10/* Calcul de l'intersection entre des segments et la surface d'un maillage. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_CORE_IRAYMESHINTERSECTION_H
13#define ARCANE_CORE_IRAYMESHINTERSECTION_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Interface générique du calcul de l'intersection d'un rayon avec une face.
29 */
31{
32 public:
33
34 virtual ~IRayFaceIntersector() {}
35
36 public:
37
38 /*!
39 * \brief Calcul l'intersection entre un rayon et une face.
40 *
41 * \param origin position d'origine du rayon.
42 * \param direction direction du rayon.
43 * \param orig_face_local_id numéro local de la face d'origine du rayon
44 * \param face_nodes positions des noeuds de la face.
45 * \param face_local_id numéro local de la face. S'il ne s'agit
46 * pas d'une face du sous-domaine, vaut ITEM_NULL_LOCAL_ID.
47 * \param user_value valeur utilisateur à remplir par l'appelant si besoin
48 * \param distance en retour, distance d'intersection s'il y en a une
49 * \param intersection_position en retour, position du point d'intersection
50 * \return true si une intersection est trouvée, false sinon.
51 */
52 virtual bool computeIntersection(Real3 origin, Real3 direction,
53 Int32 orig_face_local_id,
54 Int32 face_local_id,
55 Real3ConstArrayView face_nodes,
56 Int32* user_value,
57 Real* distance, Real3* intersection_position) = 0;
58};
59
60/*---------------------------------------------------------------------------*/
61/*---------------------------------------------------------------------------*/
62/*!
63 * \brief Calcul de l'intersection entre un ensemble de segments et la surface
64 * d'un maillage.
65 */
67{
68 public:
69
70 //! Libère les ressources
71 virtual ~IRayMeshIntersection() = default;
72
73 public:
74
75 //! Construit l'instance
76 virtual void build() = 0;
77
78 public:
79
80 /*!
81 * \brief Calcule l'intersection.
82 *
83 * En retour, le tableau \a faces_local_id contient le numéro
84 * local de la face coupée pour chaque segment. Si un segment
85 * ne coupe pas de face, le local_id correspondant est NULL_ITEM_LOCAL_ID.
86 */
87 virtual void compute(Real3ConstArrayView segments_position,
88 Real3ConstArrayView segments_direction,
89 Int32ConstArrayView orig_faces_local_id,
90 Int32ArrayView user_values,
91 Real3ArrayView intersections,
92 RealArrayView distances,
93 Int32ArrayView faces_local_id) = 0;
94
95 /*!
96 * \brief Calcule l'intersection de rayons.
97 *
98 * Calcul l'intersection des rayons de la famille \a ray_family
99 * avec la surface du maillage. La position et la direction
100 * des rayons est donnée par les variables \a rays_position
101 * et \a rays_direction. Le tableau \a rays_orig_face contient
102 * le numéro local de la face dont le rayon est originaire. Ce tableau
103 * est utilisé dans le IRayFaceIntersector.
104 *
105 * En retour \a rays_face contiendra pour chaque rayon le localId()
106 * de la face intersectée
107 * ou NULL_ITEM_LOCAL_ID si un rayon n'intersecte aucune face.
108 * Le tableau \a rays_intersection contient en retour la position
109 * du point d'intersection et \a rays_distance la distance du
110 * point d'intersection par rapport à l'origine du rayon.
111 * Le tableau \a user_values est remplit en retour par
112 * le IRayFaceIntersector
113 *
114 * En parallèle, les rayons de la famille sont échangés
115 * entre sous-domaines pour qu'un rayon se trouve dans le
116 * même sous-domaine que celui propriétaire de la face
117 * intersectée.
118 * Si un rayon n'intersecte pas de face, il reste dans
119 * ce sous-domaine.
120 */
121 virtual void compute(IItemFamily* ray_family,
122 VariableParticleReal3& rays_position,
123 VariableParticleReal3& rays_direction,
124 VariableParticleInt32& rays_orig_face,
125 VariableParticleInt32& user_values,
126 VariableParticleReal3& intersections,
127 VariableParticleReal& distances,
128 VariableParticleInt32& rays_face) = 0;
129
130 /*!
131 * \brief Positionne le callback d'intersection.
132 *
133 * Cela permet à l'appelant de spécifier sa méthode de calcul
134 * d'intersection d'un rayon avec une face. Si cette méthode n'est
135 * pas appelée, un intersecteur par défaut est utilisé.
136 */
137 virtual void setFaceIntersector(IRayFaceIntersector* intersector) = 0;
138
139 //! Intersecteur utilisé (0 si aucun spécifié)
141};
142
143/*---------------------------------------------------------------------------*/
144/*---------------------------------------------------------------------------*/
145
146} // namespace Arcane
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151#endif
152
Déclarations des types généraux de Arcane.
Interface d'une famille d'entités.
Definition IItemFamily.h:84
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 ~IRayMeshIntersection()=default
Libère les ressources.
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 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.
Classe gérant un vecteur de réel de dimension 3.
Definition Real3.h:132
MeshVariableScalarRefT< Particle, Real3 > VariableParticleReal3
Grandeur particulaire de type coordonnées.
MeshVariableScalarRefT< Particle, Int32 > VariableParticleInt32
Grandeur particulaire de type entier 32 bits.
MeshVariableScalarRefT< Particle, Real > VariableParticleReal
Grandeur particulaire de type réel.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
ConstArrayView< Real3 > Real3ConstArrayView
Equivalent C d'un tableau à une dimension de Real3.
Definition UtilsTypes.h:583
ArrayView< Real3 > Real3ArrayView
Equivalent C d'un tableau à une dimension de Real3.
Definition UtilsTypes.h:554
ConstArrayView< Int32 > Int32ConstArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:569
ArrayView< Int32 > Int32ArrayView
Equivalent C d'un tableau à une dimension d'entiers 32 bits.
Definition UtilsTypes.h:540
double Real
Type représentant un réel.
ArrayView< Real > RealArrayView
Equivalent C d'un tableau à une dimension de réels.
Definition UtilsTypes.h:546
std::int32_t Int32
Type entier signé sur 32 bits.