00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __GEO_PrimMetaBall_H__
00021 #define __GEO_PrimMetaBall_H__
00022
00023 #include "GEO_API.h"
00024 #include <UT/UT_Vector3.h>
00025 #include "GEO_MetaPrim.h"
00026 #include "GEO_PrimSphere.h"
00027
00028 class TS_MetaEllipsoid;
00029
00030 class GEO_API GEO_PrimMetaBall : public GEO_PrimSphere, public GEO_MetaPrim
00031 {
00032 public:
00033 GEO_PrimMetaBall(GEO_Detail *d, GA_Offset offset = GA_INVALID_OFFSET);
00034 virtual ~GEO_PrimMetaBall();
00035
00036
00037 virtual int64 getMemoryUsage() const;
00038
00039 virtual void copyPrimitive(const GEO_Primitive *src,
00040 GEO_Point **ptredirect);
00041 virtual bool isDegenerate() const;
00042 virtual GEO_Primitive *copy(int preserve_shared_pts = 0) const;
00043 virtual void copyUnwiredForMerge(const GA_Primitive *src,
00044 const GA_MergeMap &map);
00045
00046
00047
00048 virtual void initTSdata();
00049 virtual TS_MetaPrimitive *getMetaPrim();
00050
00051
00052
00053
00054 virtual TS_MetaPrimitive *getNewMetaPrim();
00055
00056 virtual GEO_MetaPrim *castToMetaPrim();
00057 virtual const GEO_MetaPrim *castToMetaPrim() const;
00058
00059
00060 virtual void stashed(int onoff,
00061 GA_Offset offset = GA_INVALID_OFFSET);
00062
00063 virtual const GA_PrimitiveJSON *getJSON() const;
00064
00065 protected:
00066 GEO_PrimMetaBall(const GA_MergeMap &map,
00067 GEO_Detail &detail,
00068 GA_Offset offset,
00069 const GEO_PrimMetaBall &src);
00070
00071 static GA_PrimitiveFamilyMask buildFamilyMask()
00072 { return GEO_FAMILY_META; }
00073
00074
00075
00076
00077 static GA_IntrinsicManager::Registrar
00078 registerIntrinsics(GA_PrimitiveDefinition &defn);
00079
00080
00081
00082
00083
00084
00085
00086 virtual int localIntrinsicTupleSize(
00087 const GA_IntrinsicEval &eval) const;
00088 virtual int localGetIntrinsicS(const GA_IntrinsicEval &eval,
00089 UT_String &value) const;
00090 virtual int localGetIntrinsicSA(const GA_IntrinsicEval &eval,
00091 UT_StringArray &value) const;
00092 virtual int localGetIntrinsicI(const GA_IntrinsicEval &eval,
00093 int64 *value, GA_Size size) const;
00094 virtual int localGetIntrinsicF(const GA_IntrinsicEval &eval,
00095 fpreal *value, GA_Size size) const;
00096 virtual int localSetIntrinsicSA(const GA_IntrinsicEval &eval,
00097 const UT_StringArray &value);
00098 virtual int localSetIntrinsicSS(const GA_IntrinsicEval &eval,
00099 const char **value, GA_Size size);
00100 virtual int localSetIntrinsicI(const GA_IntrinsicEval &eval,
00101 const int64 *value, GA_Size size);
00102 virtual int localSetIntrinsicF(const GA_IntrinsicEval &eval,
00103 const fpreal *value, GA_Size size);
00104
00105
00106 virtual void copyOffsetPrimitive(const GEO_Primitive *src,
00107 int basept);
00108 virtual bool savePrivateH9(ostream &os, bool binary) const;
00109 virtual bool loadPrivateH9(UT_IStream &is);
00110
00111 private:
00112
00113 TS_MetaEllipsoid *tsData;
00114 char myStashedState;
00115 };
00116 #endif