/usr/include/gmsh/directions3D.h is in libgmsh-dev 3.0.6+dfsg1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 | // Gmsh - Copyright (C) 1997-2017 C. Geuzaine, J.-F. Remacle
//
// See the LICENSE.txt file for license information. Please report all
// bugs and problems to the public mailing list <gmsh@onelab.info>.
//
// Contributor(s):
// Tristan Carrier François Henrotte
#ifndef _DIRECTION_3D_H_
#define _DIRECTION_3D_H_
#include "GFace.h"
#include "MEdge.h"
#include "MElementOctree.h"
#if defined(HAVE_ANN)
class ANNkd_tree;
#endif
#include "yamakawa.h"
#include "STensor3.h"
struct lowerThan {
bool operator() (const std::pair<int, STensor3>& lhs, const std::pair<int, STensor3>& rhs) const
{return lhs.first < rhs.first;}
};
class Frame_field{
private:
static std::vector<std::pair<SPoint3,STensor3> > field;
static std::vector<int> labels;
static std::map<MVertex*, STensor3> crossField;
static std::map<MVertex*, double> crossFieldSmoothness;
static std::map<MEdge, double, Less_Edge> crossDist;
static std::vector<MVertex*> listVertices;
#if defined(HAVE_ANN)
static ANNkd_tree* kd_tree;
static ANNkd_tree* annTree;
#endif
Frame_field();
static std::map<MVertex*, std::set<MVertex*> > vertex_to_vertices;
static std::map<MVertex*, std::set<MElement*> > vertex_to_elements;
public:
static void init_region(GRegion*);
static void init_face(GFace*);
static STensor3 search(double,double,double);
static STensor3 combine(double,double,double);
static void print_field1();
static void print_field2(GRegion*);
static void print_segment(SPoint3,SPoint3,double,double,std::ofstream&);
static int build_vertex_to_vertices(GEntity* gr, int onWhat, bool initialize=true);
static int build_vertex_to_elements(GEntity* gr, bool initialize=true);
static void build_listVertices(GEntity* gr, int dim, bool initialize=true);
static int buildAnnData(GEntity* ge, int dim);
static void deleteAnnData();
static int findAnnIndex(SPoint3 p);
static STensor3 findCross(double x, double y, double z);
static void initFace(GFace* gf);
static void initRegion(GRegion* gr, int n);
static void buildSmoothness();
static double smoothFace(GFace *gf, int n);
static double smoothRegion(GRegion *gr, int n);
static double smooth();
static double findBarycenter(std::map<MVertex*, std::set<MVertex*> >::const_iterator iter, STensor3 &m0);
static void save(const std::vector<std::pair<SPoint3, STensor3> > data, const std::string& filename);
static void saveCrossField(const std::string& filename, double scale, bool full=true);
static void continuousCrossField(GRegion *gr, GFace *gf);
static void recur_connect_vert(FILE*fi, int count, MVertex *v,STensor3 &cross, std::multimap<MVertex*,MVertex*> &v2v, std::set<MVertex*> &touched);
static void save_energy(GRegion* gr, const std::string& filename);
static void save_dist(const std::string& filename);
static void checkAnnData(GEntity* ge, const std::string& filename);
static GRegion* test();
static void clear();
};
class Size_field{
private:
static std::vector<std::pair<SPoint3,double> > field;
static std::map<MVertex*,double> boundary;
static MElementOctree* octree;
#if defined(HAVE_ANN)
static ANNkd_tree* kd_tree;
#endif
Size_field();
public:
static void init_region(GRegion*);
static void solve(GRegion*);
static double search(double,double,double);
static void print_field(GRegion*);
static GRegion* test();
static void clear();
};
class Nearest_point{
private:
static std::vector<SPoint3> field;
static std::vector<MElement*> vicinity;
#if defined(HAVE_ANN)
static ANNkd_tree* kd_tree;
#endif
Nearest_point();
public:
static void init_region(GRegion*);
static bool search(double,double,double,SVector3&);
static double T(double,double,double,double,double);
static SPoint3 closest(MElement*,SPoint3);
static double clamp(double,double,double);
static void print_field(GRegion*);
static void print_segment(SPoint3,SPoint3,std::ofstream&);
static GRegion* test();
static void clear();
};
#endif
|