00001 /*
00002 File: MRVertex.h
00003
00004 Function:
00005
00006 Author: Andrew Willmott, originally from code by Michael Garland,
00007 but a lot's changed since then =).
00008
00009 Copyright: (c) 1997-2000, Andrew Willmott
00010 */
00011
00012 #ifndef __MRVertex__
00013 #define __MRVertex__
00014
00015 #include "gcl/Geometry.h"
00016 #include "gcl/Colour.h"
00017 #include "cl/Flags.h"
00018 #include "cl/NArray.h"
00019
00020 class MRModel;
00021 class MRVertex;
00022 class MRCodes;
00023
00024 struct FaceIdx
00025 {
00026 Int v[3];
00027 };
00028
00029 typedef NArray<FaceIdx> FaceIdxArray;
00030 typedef NArray<MRVertex> MRVertexes;
00031 typedef NArray<MRCodes> MRCodesList;
00032 typedef NArray<UInt32> TreeCodes;
00033 typedef NArray<Flags8> MRFlagsList;
00034
00035 enum MRV_Flags
00036 {
00037 MRV_Active = 0x0001,
00038 MRV_Inside = 0x0002,
00039 MRV_FaceActive = 0x0004,
00040 MRV_End
00041 };
00042
00043 class MRVertex
00044 {
00045 public:
00046 MRVertex();
00047
00048 Bool IsLeaf() { return(child[0] < 0); }
00049 Bool IsRoot() { return(parent < 0); }
00050
00051 Void SetContraction(
00052 MRVertexes &vertices,
00053 Int iv,
00054 MRFlagsList &flags,
00055 Int child0,
00056 Int child1,
00057 Int face0,
00058 Int face1,
00059 GCLReal err
00060 );
00061
00062 Bool CanContract(Int iv, MRFlagsList &flags);
00063 Bool CanExpand(Int iv, MRFlagsList &flags);
00064
00065 Void Contract(Int iv, MRFlagsList &flags);
00066 Void Expand(Int iv, MRFlagsList &flags);
00067
00068 Void PrintID();
00069
00070 Void PullProps(MRVertexes &vertices);
00071 // pull face properties up the vertex tree.
00072
00073 // fields
00074
00075 Int parent;
00076 Int child[2];
00077 Int face[2];
00078
00079 Byte level;
00080 Vector areaNormal;
00081 };
00082
00083 class MRCodes
00084 {
00085 public:
00086 MRCodes();
00087
00088 Void AdjustVertices(MRVertexes &vertices, MRFlagsList &flags,
00089 Int faceIndexes[3], Int leafIndexes[3]);
00090
00091 // set properties of face.
00092
00093 // fields
00094 UInt32 treeCode[3];
00095 };
00096
00097
00122 Void MRSetupHierarchy(
00123 MRVertexes &vertices,
00124 Int iv,
00125 TreeCodes &treeCodes,
00126 Int &height,
00127 Int level,
00128 Int treeCode
00129 );
00130
00131 #endif
00132