Select Git revision
3D_Mesh.cpp
Forked from
gmsh / gmsh
Source project has a limited visibility.
-
Christophe Geuzaine authored
drawing. We are still very slow, though: - we should preprocess the mesh to draw large triangle/line strips - we should store the normals (and NOT IN A SET!!) - we should store the elements in a structure allowing a faster traversal - we should do all this in single precision The same remarks apply for the post-processing stuff. Worse, in post-pro, due to Get_Coord and SaturateValues, we basically copy ALL THE DATA SET at least one per drawing, even when we don't have to (no Raise/Offset/Saturate)... This is horrible, and makes us lose all the advantage of the fast list_PointerFast stuff I designed in the forst place. Ahhh, the cost of generality...
Christophe Geuzaine authoreddrawing. We are still very slow, though: - we should preprocess the mesh to draw large triangle/line strips - we should store the normals (and NOT IN A SET!!) - we should store the elements in a structure allowing a faster traversal - we should do all this in single precision The same remarks apply for the post-processing stuff. Worse, in post-pro, due to Get_Coord and SaturateValues, we basically copy ALL THE DATA SET at least one per drawing, even when we don't have to (no Raise/Offset/Saturate)... This is horrible, and makes us lose all the advantage of the fast list_PointerFast stuff I designed in the forst place. Ahhh, the cost of generality...
BasisFactory.h 2.30 KiB
// Gmsh - Copyright (C) 1997-2014 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@geuz.org>.
#ifndef BASISFACTORY_H
#define BASISFACTORY_H
#include "JacobianBasis.h"
#include "FuncSpaceData.h"
class nodalBasis;
class MetricBasis;
class GradientBasis;
class bezierBasis;
class BasisFactory
{
private:
static std::map<int, nodalBasis*> fs;
static std::map<int, MetricBasis*> ms;
static std::map<FuncSpaceData, JacobianBasis*> js;
static std::map<FuncSpaceData, bezierBasis*> bs;
static std::map<FuncSpaceData, GradientBasis*> gs;
public:
// Caution: the returned pointer can be NULL
// Nodal
static const nodalBasis* getNodalBasis(int tag);
// Jacobian
// Warning: bases returned by BasisFactory::getJacobianBasis(int tag) are the
// only safe bases for using Bezier on the jacobian determinant!
static const JacobianBasis* getJacobianBasis(FuncSpaceData);
static const JacobianBasis* getJacobianBasis(int tag, int order) {
const int type = ElementType::ParentTypeFromTag(tag);
if (type != TYPE_PYR)
return getJacobianBasis(FuncSpaceData(true, tag, order));
else
return getJacobianBasis(FuncSpaceData(true, tag, false, order+1, order));
}
static const JacobianBasis* getJacobianBasis(int tag) {
const int order = JacobianBasis::jacobianOrder(tag);
const int type = ElementType::ParentTypeFromTag(tag);
if (type != TYPE_PYR)
return getJacobianBasis(FuncSpaceData(true, tag, order));
else
return getJacobianBasis(FuncSpaceData(true, tag, false, order+2, order));
}
// Metric
static const MetricBasis* getMetricBasis(int tag);
// Gradients
static const GradientBasis* getGradientBasis(FuncSpaceData);
static const GradientBasis* getGradientBasis(int tag, int order) {
return getGradientBasis(FuncSpaceData(true, tag, order));
}
// Bezier
static const bezierBasis* getBezierBasis(FuncSpaceData);
static const bezierBasis* getBezierBasis(int parentTag, int order) {
int primaryTag = ElementType::getTag(parentTag, 1);
return getBezierBasis(FuncSpaceData(true, primaryTag, order));
}
static const bezierBasis* getBezierBasis(int tag) {
return getBezierBasis(FuncSpaceData(tag));
}
static void clearAll();
};
#endif