QuadSetGeometryAlgorithms.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef SOFA_COMPONENT_TOPOLOGY_QUADSETGEOMETRYALGORITHMS_H
00026 #define SOFA_COMPONENT_TOPOLOGY_QUADSETGEOMETRYALGORITHMS_H
00027
00028 #include <sofa/component/topology/EdgeSetGeometryAlgorithms.h>
00029
00030 namespace sofa
00031 {
00032 namespace component
00033 {
00034 namespace topology
00035 {
00036 using core::componentmodel::topology::BaseMeshTopology;
00037 typedef BaseMeshTopology::QuadID QuadID;
00038 typedef BaseMeshTopology::Quad Quad;
00039 typedef BaseMeshTopology::SeqQuads SeqQuads;
00040 typedef BaseMeshTopology::VertexQuads VertexQuads;
00041 typedef BaseMeshTopology::EdgeQuads EdgeQuads;
00042 typedef BaseMeshTopology::QuadEdges QuadEdges;
00043
00047 template < class DataTypes >
00048 class QuadSetGeometryAlgorithms : public EdgeSetGeometryAlgorithms<DataTypes>
00049 {
00050 public:
00051 typedef typename DataTypes::VecCoord VecCoord;
00052 typedef typename DataTypes::Real Real;
00053 typedef typename DataTypes::Coord Coord;
00054
00055 QuadSetGeometryAlgorithms()
00056 : EdgeSetGeometryAlgorithms<DataTypes>()
00057 { }
00058
00059 virtual ~QuadSetGeometryAlgorithms() {}
00060
00064 Real computeQuadArea(const unsigned int i) const;
00065
00069 void computeQuadArea( BasicArrayInterface<Real> &ai) const;
00070
00074 Real computeRestQuadArea(const unsigned int i) const;
00075
00079 defaulttype::Vec<3,double> computeQuadNormal(const unsigned int ind_q);
00080
00085 bool is_quad_in_plane(const unsigned int ind_q, const unsigned int ind_p,
00086 const defaulttype::Vec<3,Real>& plane_vect);
00087
00090 void writeMSHfile(const char *filename);
00091 };
00092
00093 template< class Real>
00094 bool is_point_in_quad(const defaulttype::Vec<3,Real>& p, const defaulttype::Vec<3,Real>& a,
00095 const defaulttype::Vec<3,Real>& b, const defaulttype::Vec<3,Real>& c,
00096 const defaulttype::Vec<3,Real>& d);
00097
00098 void snapping_test_quad(double epsilon, double alpha0, double alpha1, double alpha2, double alpha3,
00099 bool& is_snap_0, bool& is_snap_1, bool& is_snap_2, bool& is_snap_3);
00100
00101 template< class Real>
00102 inline Real areaProduct(const defaulttype::Vec<3,Real>& a, const defaulttype::Vec<3,Real>& b);
00103
00104 template< class Real>
00105 inline Real areaProduct(const defaulttype::Vec<2,Real>& a, const defaulttype::Vec<2,Real>& b );
00106
00107 template< class Real>
00108 inline Real areaProduct(const defaulttype::Vec<1,Real>& , const defaulttype::Vec<1,Real>& );
00109
00110 }
00111
00112 }
00113
00114 }
00115
00116 #endif