00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _I_QUADRIC_GEO_H_
00017 #define _I_QUADRIC_GEO_H_
00018
00019
00020 #include <maya/MMatrix.h>
00021 #include <maya/MPxSurfaceShape.h>
00022 #include <maya/MFnTransform.h>
00023 #include <maya/MFnNumericAttribute.h>
00024 #include <maya/MFnEnumAttribute.h>
00025
00026
00027 #include <GL/gl.h>
00028
00029
00030 #include <error_checker.h>
00031
00032
00036 class IQuadric : public MPxSurfaceShape {
00037
00038 friend class IQuadricUI;
00039
00040 public:
00041
00043 IQuadric();
00044
00045
00046 virtual ~IQuadric();
00047
00048 public:
00049
00051 virtual void postConstructor();
00052
00055 virtual MStatus compute( const MPlug& , MDataBlock& );
00056
00057 public:
00058
00062 virtual bool getInternalValue( const MPlug& p, MDataHandle& data_block);
00063
00067 virtual bool setInternalValue( const MPlug& p, MDataHandle& data_block);
00068
00069 public:
00070
00072 virtual bool isBounded() const;
00073
00075 virtual MBoundingBox boundingBox() const;
00076
00077 public:
00078
00080 static void* creator();
00081
00083 static MStatus initialize();
00084
00087 MStatus updateValues( const MMatrix& transform);
00088
00090 void updateGUIValues();
00091
00095
00097 void getParameter( MMatrix& matrix, double& max_distance, bool& is_limited) const;
00098
00099 private:
00100
00101
00102
00104 static const unsigned int NumParameter = 10;
00105
00108 float parameter[NumParameter];
00109
00112 MMatrix params_ws;
00113
00115 static MObject params_node[NumParameter];
00116
00118 static MFnNumericAttribute params_gui[NumParameter];
00119
00121 float max_distance;
00122
00124 static MObject max_dist_node;
00125
00127 static MFnNumericAttribute max_dist_gui;
00128
00130 bool is_limited;
00131
00133 static MObject is_limited_node;
00134
00136 static MFnEnumAttribute is_limited_gui;
00137
00138 public:
00139
00140
00141 static MTypeId id;
00142 };
00143
00144
00145
00146
00147
00148
00149
00150 #endif // #ifndef _I_QUADRIC_GEO_H_
00151