00001 #ifndef VCG_USED_TYPES_H
00002 #define VCG_USED_TYPES_H
00003
00004 #include <string>
00005 #include <vcg/space/point3.h>
00006 #include <vcg/container/derivation_chain.h>
00007
00008 #include <vcg/simplex/vertex/base.h>
00009 #include <vcg/simplex/face/base.h>
00010 #include <vcg/simplex/edge/base.h>
00011 #include <vcg/connectors/hedge.h>
00012
00013 namespace vcg{
00014
00015
00016
00017 struct _Vertex;
00018 struct _Edge ;
00019 struct _Face ;
00020 struct _HEdge ;
00021
00022 struct DummyTypes{
00023 typedef _Vertex VertexType;
00024 typedef _Edge EdgeType;
00025 typedef _Face FaceType;
00026 typedef char TetraType;
00027 typedef _HEdge HEdgeType;
00028
00029 typedef vcg::Point3<bool> CoordType;
00030 typedef char ScalarType;
00031
00032 typedef VertexType * VertexPointer;
00033 typedef EdgeType * EdgePointer ;
00034 typedef FaceType * FacePointer ;
00035 typedef TetraType * TetraPointer ;
00036 typedef HEdgeType * HEdgePointer ;
00037
00038 static void Name(std::vector<std::string> & ){}
00039 template < class LeftV>
00040 void ImportData(const LeftV & ) {}
00041 };
00042
00043 template <class A>
00044 struct Use{
00045 template <class T> struct AsVertexType: public T{typedef A VertexType; typedef VertexType * VertexPointer ;};
00046 template <class T> struct AsEdgeType: public T{typedef A EdgeType; typedef EdgeType * EdgePointer ;};
00047 template <class T> struct AsFaceType: public T{typedef A FaceType; typedef FaceType * FacePointer ;};
00048 template <class T> struct AsTetraType: public T{typedef A TetraType; typedef TetraType * TetraPointer ;};
00049 template <class T> struct AsHEdgeType: public T{typedef A HEdgeType; typedef HEdgeType * HEdgePointer ;};
00050 };
00051
00052 template <template <typename> class A = DefaultDeriver, template <typename> class B = DefaultDeriver,
00053 template <typename> class C = DefaultDeriver, template <typename> class D = DefaultDeriver,
00054 template <typename> class E = DefaultDeriver, template <typename> class F = DefaultDeriver,
00055 template <typename> class G = DefaultDeriver, template <typename> class H = DefaultDeriver >
00056 class UsedTypes: public Arity12<DummyTypes,
00057 Use< Vertex <UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsVertexType,
00058 Use< Edge <UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsEdgeType,
00059 Use< Face <UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsFaceType,
00060 Use< HEdge <UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsHEdgeType,
00061 A, B, C, D, E, F, G, H
00062 > {
00063 };
00064
00065
00066
00067
00068
00069 struct _UsedTypes: public UsedTypes<
00070 Use<_Vertex>::AsVertexType,
00071 Use<_Edge >::AsEdgeType,
00072 Use<_Face >::AsFaceType,
00073 Use<_HEdge >::AsHEdgeType
00074 >{};
00075
00076 struct _Vertex: public Vertex<_UsedTypes>{};
00077 struct _Edge : public Edge<_UsedTypes>{};
00078 struct _Face : public Face<_UsedTypes>{};
00079 struct _HEdge : public HEdge<_UsedTypes>{};
00080
00081 };
00082
00083 #endif // USED_TYPES_H