00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GU_Duplicate__
00021 #define __GU_Duplicate__
00022
00023 #include "GU_API.h"
00024
00025 class UT_Matrix4;
00026 class UT_String;
00027 class UT_Interrupt;
00028 class GB_PrimitiveGroup;
00029 class GB_PointGroup;
00030 class GU_Detail;
00031 class GEO_AttributeHandleList;
00032
00033 typedef int (*GU_DuplicateTransformCallback)(UT_Matrix4 &, int copynum,
00034 void *data);
00035
00036 typedef int (*GU_DuplicateGroupNameCallback)(UT_String &, void *data);
00037
00038 class GU_API GU_DuplicateParms {
00039 public:
00040 GU_DuplicateParms();
00041 ~GU_DuplicateParms();
00042
00043 void setKeepVectorLength(bool onoff) { myKeepFlag = onoff; }
00044 void setPreserveGroups(bool onoff) { myPreserveGroups = onoff; }
00045 void setTransformCallback(GU_DuplicateTransformCallback callback)
00046 {
00047 myXformCallback = callback;
00048 }
00049 void setGroupNameCallback(GU_DuplicateGroupNameCallback callback)
00050 {
00051 myGNameCallback = callback;
00052 }
00053
00054
00055
00056 void setSource(const GU_Detail *inputgdp, const GU_Detail *dupgdp)
00057 {
00058 myInputSource = inputgdp;
00059 myDuplicateSource = dupgdp;
00060 }
00061
00062 void duplicate(GU_Detail *gdp, int ncopies,
00063 bool changed, void *data = 0);
00064
00065 private:
00066
00067 void transform(GU_Detail *gdp, bool changed,
00068 const UT_Matrix4 &xform, GB_PrimitiveGroup *grp,
00069 int primstart, int primend,
00070 int ptstart, int ptend,
00071 GEO_AttributeHandleList &pthandles,
00072 GEO_AttributeHandleList &vtxhandles,
00073 GEO_AttributeHandleList &primhandles,
00074 GEO_AttributeHandleList &ptvectors,
00075 GEO_AttributeHandleList &vtxvectors,
00076 GEO_AttributeHandleList &primvectors);
00077
00078 void doDuplicate(GU_Detail *gdp, int ncopies, bool changed,
00079 void *data, UT_Interrupt *boss);
00080
00081 GU_DuplicateTransformCallback myXformCallback;
00082 GU_DuplicateGroupNameCallback myGNameCallback;
00083
00084 const GU_Detail *myInputSource;
00085 const GU_Detail *myDuplicateSource;
00086
00087 bool myKeepFlag;
00088 bool myPreserveGroups;
00089 };
00090
00091 #endif
00092