]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
MEDMEM Industrialization 2008
authoreap <eap@opencascade.com>
Wed, 14 Jan 2009 10:26:41 +0000 (10:26 +0000)
committereap <eap@opencascade.com>
Wed, 14 Jan 2009 10:26:41 +0000 (10:26 +0000)
  Form interpolation matrix in intersectors

+  template<class MyMeshType, int NB_NODES>
+  inline void getBarycentricCoordinates(const double*                   point,
+                                        typename MyMeshType::MyConnType element,
+                                        const MyMeshType&               mesh,
+                                        double*                         barycentricCoords)

src/INTERP_KERNEL/MeshUtils.hxx

index d3a151b79b57dbe421035bccd1d07306a3560d26..ff2c6074c0149fbfd0cb930f465f2c158beab162 100644 (file)
@@ -33,13 +33,36 @@ namespace INTERP_KERNEL
    * @return    pointer to an array of 3 doubles containing the coordinates of the node
    */
   template<class MyMeshType>
-  inline const double* getCoordsOfNode(int node, int element, const MyMeshType& mesh)
+  inline const double* getCoordsOfNode(int node, typename MyMeshType::MyConnType element, const MyMeshType& mesh)
   {
     typedef typename MyMeshType::MyConnType ConnType;
     const ConnType connIdx = getGlobalNumberOfNode(node, element, mesh);
     return mesh.getCoordinatesPtr()+MyMeshType::MY_SPACEDIM*connIdx;
   }
     
+  /**
+   * Returns the barycentric coordinates of a point within a triangle or tetrahedron
+   *
+   * @param      point       the point for which the barycentric coordinates are sought
+   * @param      element    an element of the mesh
+   * @param      mesh       a mesh
+   * @param     barycentricCoords an array of 3 doubles containing the coordinates of the node
+   */
+  template<class MyMeshType, int NB_NODES>
+  inline void getBarycentricCoordinates(const double*                   point,
+                                        typename MyMeshType::MyConnType element,
+                                        const MyMeshType&               mesh,
+                                        double*                         barycentricCoords)
+  {
+    std::vector<const double*> nodes( NB_NODES );
+    typedef typename MyMeshType::MyConnType ConnType;
+    for ( int node = 0; node < NB_NODES; ++node )
+    {
+      nodes[ node ] = getCoordsOfNode( node, element, mesh );
+    }
+    barycentric_coodrs( nodes, point, barycentricCoords );
+  }
+    
 }
 
 #endif