00001 /*************************************************************************** 00002 *cr 00003 *cr (C) Copyright 1995-2019 The Board of Trustees of the 00004 *cr University of Illinois 00005 *cr All Rights Reserved 00006 *cr 00007 ***************************************************************************/ 00008 00009 #ifndef ISOCONTOUR_H 00010 #define ISOCONTOUR_H 00011 00012 #include "BaseMolecule.h" 00013 #include "ResizeArray.h" 00014 00016 typedef struct { 00017 float x; 00018 float y; 00019 } XY; 00020 00022 typedef struct { 00023 XY p[2]; 00024 } LINE; 00025 00027 typedef struct { 00028 XY p[4]; 00029 float val[4]; 00030 int cubeindex; 00031 } SQUARECELL; 00032 00034 class IsoContour { 00035 public: 00036 int numtriangles; 00037 ResizeArray<float> v; 00038 ResizeArray<int> f; 00039 const VolumetricData * vol; 00040 float xax[3], yax[3], zax[3]; 00041 00042 public: 00043 IsoContour(); 00044 00046 int compute(const VolumetricData *, float isovalue, int step); 00047 00048 void clear(); 00049 00050 /* private: */ 00051 public: 00052 int DoCell(int x, int y, int z, float isovalue, int step); 00053 int Polygonise(const SQUARECELL grid, const float isolevel, LINE *lines); 00054 void VertexInterp(float isolevel, const SQUARECELL grid, int ind1, int ind2, XY *vert); 00055 }; 00056 00057 00058 #if defined(ISOCONTOUR_INTERNAL) 00059 00060 static int edgeTable[16]={ 00061 0x0 , 0x109, 0x203, 0x30a, 0x406, 0x50f, 0x605, 0x70c, 00062 0x70c, 0x605, 0x50f, 0x406, 0x30a, 0x203, 0x109, 0x0 }; 00063 00064 int lineTable[16][16] = 00065 {{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00066 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00067 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00068 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00069 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00070 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00071 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00072 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00073 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00074 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00075 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00076 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00077 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00078 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00079 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, 00080 {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}}; 00081 00082 #endif 00083 00084 #endif