00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __GEO_Mirror_h__
00020 #define __GEO_Mirror_h__
00021
00022 #include "GEO_API.h"
00023 #include <UT/UT_IntArray.h>
00024 #include <UT/UT_PtrArray.h>
00025
00026 class GB_PrimitiveGroup;
00027 class GEO_Detail;
00028 class UT_Vector3;
00029 class UT_Matrix3;
00030
00031
00032
00033
00034
00035
00036 class GEO_API GEO_PointRedirectArray
00037 {
00038 public:
00039 GEO_PointRedirectArray(int size)
00040 : myArray(size) { }
00041
00042 void setBase(unsigned int base) { myBase = base; }
00043 unsigned int getBase() const { return myBase; }
00044 void clear() { myArray.entries(0); }
00045
00046
00047
00048 int getSrc(int dest) const { return myArray(dest-myBase); }
00049 void setSrc(int src, int dest) { myArray[dest-myBase] = src; }
00050
00051
00052
00053 void setRaw(int src, int dest) { myArray[dest] = src; }
00054 int getRaw(int dest) { return myArray[dest]; }
00055
00056
00057 void clearAndResize(unsigned int newsize)
00058 { myArray.entries(0); myArray.resize(newsize, 0); }
00059
00060 unsigned int entries() const { return myArray.entries(); }
00061
00062
00063 private:
00064 UT_IntArray myArray;
00065 unsigned int myBase;
00066 };
00067
00068
00069
00070
00071 class GEO_API GEO_MirrorParms
00072 {
00073 public:
00074
00075
00076 enum GEO_ReverseOption {
00077 GEO_MIRROR_NO_REVERSE = 0,
00078 GEO_MIRROR_REVERSE = 1,
00079 GEO_MIRROR_REVERSE_U = 2,
00080 GEO_MIRROR_REVERSE_V = 3
00081 };
00082
00083
00084 GEO_MirrorParms(const GEO_Detail *src_gdp,
00085 const GB_PrimitiveGroup *prims_to_mirror,
00086 const UT_Vector3 &mirror_normal,
00087 const UT_Vector3 &mirror_origin,
00088 float dist,
00089 bool keep_original,
00090 GEO_ReverseOption reverse_direction,
00091 bool consolidate_seam,
00092 float consolidate_tolerance,
00093 bool mirror_fast,
00094 GEO_PointRedirectArray *dest_to_src_ptarray,
00095 UT_IntArray &newprims)
00096 : mySourceGdp(src_gdp),
00097 myPrimsToMirror(prims_to_mirror),
00098 myMirrorNormal(mirror_normal),
00099 myMirrorOrigin(mirror_origin),
00100 myDist(dist),
00101 myKeepOriginal(keep_original),
00102 myReverseDirection(reverse_direction),
00103 myConsolidateSeam(consolidate_seam),
00104 myConsolidateTolerance(consolidate_tolerance),
00105 myMirrorFast(mirror_fast),
00106 myDestToSrcPointArray(dest_to_src_ptarray),
00107 myNewPrims(newprims),
00108 myPrimBase(0),
00109 myQuadricMatrices(0)
00110 { }
00111
00112
00113 const GEO_Detail *mySourceGdp;
00114 const GB_PrimitiveGroup *myPrimsToMirror;
00115
00116 const UT_Vector3 &myMirrorNormal;
00117 const UT_Vector3 &myMirrorOrigin;
00118 float myDist;
00119 bool myKeepOriginal;
00120 GEO_ReverseOption myReverseDirection;
00121 bool myConsolidateSeam;
00122 float myConsolidateTolerance;
00123
00124
00125
00126
00127
00128
00129
00130
00131 bool myMirrorFast;
00132 GEO_PointRedirectArray *myDestToSrcPointArray;
00133
00134
00135
00136
00137 UT_IntArray &myNewPrims;
00138
00139
00140
00141
00142
00143
00144 unsigned int myPrimBase;
00145 UT_PtrArray<UT_Matrix3 *> *myQuadricMatrices;
00146 };
00147
00148 #endif