Main Page | Class Hierarchy | Class List | Directories | File List | Class Members

SurfaceGenerator.h

00001 
00006 #ifndef __SURFACEGENERATOR__H__
00007 #define __SURFACEGENERATOR__H__
00008 
00009 #include <maya/MObject.h>
00010 #include <maya/MPoint.h>
00011 #include <maya/MTransformationMatrix.h>
00012 #include <maya/MString.h>
00013 #include <maya/MPxNode.h>
00014 #include <maya/MPlug.h>
00015 #include <maya/MTypeId.h>
00016 #include <maya/MFnMatrixAttribute.h>
00017 #include <maya/MFnNumericAttribute.h>
00018 #include <maya/MFnUnitAttribute.h>
00019 #include <maya/MFnCompoundAttribute.h>
00020 #include <maya/MDistance.h>
00021 #include <maya/MPointArray.h>
00022 #include <maya/MIntArray.h>
00023 #include <maya/MFnTypedAttribute.h>
00024 #include <maya/MFnMesh.h>
00025 #include <maya/MFnMeshData.h>
00026 #include <maya/MFnEnumAttribute.h>
00027 #include <maya/MGlobal.h>
00028 #include <maya/MDoubleArray.h>
00029 #include <maya/MDGModifier.h>
00030 
00031 #include <map>
00032 #include <vector>
00033 
00034 
00035 #include "ImplicitFunction.h"
00036 #include "ImplicitSphere.h"
00037 
00043 typedef enum SurfaceCase {
00045         Inside = 0,
00046         
00048         Outside = 1,
00049         
00051         OnSurface = 2
00052 };
00053                 
00055 
00059 typedef struct CORNER {
00061         MPoint point;
00062         
00064         double value; 
00065         
00067         SurfaceCase scase;
00068 }; 
00069 
00071 
00076 typedef struct CUBE {
00078         CORNER *corners[8];
00079         
00081         SurfaceCase scase;
00082 } ;
00083 
00085 
00088 typedef struct IMPSPHERE {
00090         MDistance r;
00091         
00093         float w;
00094         
00096         MTransformationMatrix m;
00097 } ;
00098 
00099 
00101 
00120 class SurfaceGenerator
00121                 : public MPxNode
00122         {
00123         public:
00124                 
00126 
00138                 virtual MStatus compute(const MPlug& plug, MDataBlock& data);
00139         
00141 
00147         static void *creator();
00148         
00150 
00156         static MStatus initialize();
00157         
00159 
00171         static MPoint interpolate(double isolevel,CORNER *p1, CORNER *p2);
00172         
00174 
00197         static int polygoniseTri(CUBE cube, double iso, int v0, int v1, int v2, int v3);
00198                 
00200 
00211         static int polygonise(CUBE cube, double iso);
00212                 
00214 
00220         static int indexToVertex(MPoint p);
00221 
00222     public:
00223         
00225 
00228         static const MTypeId typeId;
00229         
00231 
00234         static const MString typeName;
00235                 
00237 
00241         static MObject ellipsoid_Radius;
00242         
00244 
00249         static MObject ellipsoid_TWorldMatrix;
00250         
00252 
00257         static MObject ellipsoid_Weight;
00258                 
00260 
00265                 static MObject ellipsoid_BBoxMin;
00266                 
00268 
00273                 static MObject ellipsoid_BBoxMax;
00274                 
00276 
00280         static MObject algorithm;
00281         
00283 
00287         static MObject isolevel;
00288                 
00290 
00295         static MObject tessellation;
00296 
00297         
00299 
00304         static MObject out_mesh;
00305         
00306     private:
00308 
00312         static MPointArray vertexArray;
00313         
00315 
00319         static MIntArray        polygonCount;
00320         
00322 
00325         static MIntArray        polygonConnects;
00326         
00327         //vectors for all the points and cubes
00328         
00330 
00333         static std::vector<CORNER> allPoints;
00334         
00336 
00339         static std::vector<CUBE> cubes;
00340         
00342 
00345         static std::vector<int> activeIS;
00346                 
00348 
00352                 static std::map<int,ImplicitSphere*> implicit;
00353         };
00354 
00355 #endif

Generated on Mon Jun 13 03:18:00 2005 for ImplicitFunctions by  doxygen 1.4.1