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