00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GDT_Position_h__
00021 #define __GDT_Position_h__
00022
00023 #include "GDT_API.h"
00024 #include <UT/UT_BitArray.h>
00025 #include <UT/UT_Vector4Array.h>
00026
00027 #include "GDT_Token.h"
00028
00029 #include "GDT_CoordinateFrames.h"
00030 #include "GDT_SymmetryTransform.h"
00031
00032 class GB_PointGroup;
00033 class GDT_TokenList;
00034 class GEO_Point;
00035
00036 class GDT_API GDT_Position : public GDT_Token
00037 {
00038 public:
00039 GDT_Position(unsigned int size) : myValues(size),
00040 myUsedEntries(size),
00041 myLow(INT_MAX),
00042 myHigh(0),
00043 myCoordinateFrames(0) {}
00044 GDT_Position(const GDT_Position &other);
00045
00046 virtual ~GDT_Position() {}
00047
00048
00049 virtual void applyDeltas(const GDT_TokenList &list,
00050 GEO_Detail &gdp,
00051 bool inverse=false) const;
00052 virtual void applyScaledDelta(GEO_Detail &gdp, GEO_Point &pt,
00053 float scale = 1.0f) const;
00054 virtual void applyScaledDeltas(GEO_Detail &gdp,
00055 float scale, const GB_PointGroup *ptgroup) const;
00056
00057 void mergePositionDeltas(const GDT_Position &other,
00058 bool inverse = false);
00059
00060
00061 virtual void zeroDeltas();
00062
00063
00064 void beginPointPositionChange(const UT_Vector4 &pos);
00065 void endPointPositionChange(const UT_Vector4 &endpos,
00066 unsigned int index);
00067
00068 virtual void resize(unsigned int size);
00069
00070 virtual unsigned int changed() const
00071 { return myUsedEntries.numBitsSet(); }
00072 virtual unsigned int entries() const
00073 { return myUsedEntries.getSize(); }
00074
00075
00076
00077
00078
00079
00080 virtual int save(ostream &os, int binary = 0) const;
00081 virtual bool load(UT_IStream &is);
00082
00083 void setCoordinateFrames(const GDT_CoordinateFrames *coords);
00084
00085 void createSymmetryDeltas(const GDT_Position &input, GDT_SymmetryTransform *transform);
00086
00087 private:
00088 UT_Vector4 mySavedPos;
00089
00090 UT_Vector4Array myValues;
00091 UT_BitArray myUsedEntries;
00092
00093
00094 int myLow;
00095 int myHigh;
00096
00097 const GDT_CoordinateFrames *myCoordinateFrames;
00098 };
00099
00100 #endif