[774] | 1 | #include "GeoMeshSimpSequence.h"
|
---|
| 2 |
|
---|
| 3 | using namespace Geometry;
|
---|
| 4 | using namespace std;
|
---|
| 5 |
|
---|
[1526] | 6 | //---------------------------------------------------------------------------
|
---|
| 7 | // Constructor.
|
---|
| 8 | //---------------------------------------------------------------------------
|
---|
| 9 | MeshSimplificationSequence::MeshSimplificationSequence()
|
---|
[774] | 10 | {
|
---|
[1526] | 11 | meshName = "";
|
---|
[774] | 12 | }
|
---|
| 13 |
|
---|
[1526] | 14 | MeshSimplificationSequence::~MeshSimplificationSequence()
|
---|
[774] | 15 | {
|
---|
| 16 | }
|
---|
| 17 |
|
---|
[1526] | 18 | //---------------------------------------------------------------------------
|
---|
| 19 | // Loads mesh simplification sequence.
|
---|
| 20 | //---------------------------------------------------------------------------
|
---|
| 21 | void MeshSimplificationSequence::Load(Serializer &s)
|
---|
[774] | 22 | {
|
---|
[1526] | 23 | // Loads a simplification sequence from a file.
|
---|
| 24 | char buffer[256];
|
---|
| 25 | unsigned int modVertex;
|
---|
| 26 | char name[256];
|
---|
[774] | 27 |
|
---|
[1526] | 28 | // Read mesh name.
|
---|
[1009] | 29 | if (s.ReadData(buffer,256) != NULL)
|
---|
[774] | 30 | {
|
---|
| 31 | sscanf(buffer,"%s",&name);
|
---|
[1526] | 32 |
|
---|
| 33 | meshName = new char[strlen(name)];
|
---|
| 34 |
|
---|
[774] | 35 | strcpy(meshName,name);
|
---|
| 36 | }
|
---|
| 37 |
|
---|
[1526] | 38 | // Read steps data.
|
---|
[1009] | 39 | while (s.ReadData(buffer,256) != NULL)
|
---|
[774] | 40 | {
|
---|
| 41 | Geometry::MeshSimplificationSequence::Step simplifstep;
|
---|
| 42 |
|
---|
[1526] | 43 | // New step.
|
---|
| 44 | sscanf( buffer,
|
---|
| 45 | "%u %u %u %u %u %f %f %f &",
|
---|
| 46 | &simplifstep.mV1,
|
---|
| 47 | &simplifstep.mV0,
|
---|
| 48 | &simplifstep.mT0,
|
---|
| 49 | &simplifstep.mT1,
|
---|
| 50 | &simplifstep.obligatory,
|
---|
| 51 | &simplifstep.x,
|
---|
| 52 | &simplifstep.y,
|
---|
| 53 | &simplifstep.z);
|
---|
[774] | 54 |
|
---|
[1526] | 55 | buffer[strlen(buffer)-1] = '\0';
|
---|
| 56 |
|
---|
[774] | 57 | char *ptr1;
|
---|
| 58 |
|
---|
[1526] | 59 | ptr1 = strtok(buffer,"&");
|
---|
| 60 | ptr1 = strtok(NULL,"&");
|
---|
| 61 |
|
---|
| 62 | if (ptr1 != NULL)
|
---|
[774] | 63 | {
|
---|
| 64 | char *ptr;
|
---|
[1526] | 65 |
|
---|
| 66 | ptr = strtok(ptr1," ");
|
---|
[774] | 67 |
|
---|
[1526] | 68 | while (ptr != NULL )
|
---|
[774] | 69 | {
|
---|
[1526] | 70 | modVertex = (unsigned int)atoi(ptr);
|
---|
| 71 |
|
---|
[774] | 72 | simplifstep.mModfaces.push_back(modVertex);
|
---|
[1526] | 73 |
|
---|
| 74 | ptr = strtok(NULL," ");
|
---|
[774] | 75 | }
|
---|
| 76 | }
|
---|
[1526] | 77 |
|
---|
[774] | 78 | mSteps.push_back(simplifstep);
|
---|
| 79 | }
|
---|
| 80 | }
|
---|
| 81 |
|
---|
[1526] | 82 | //---------------------------------------------------------------------------
|
---|
| 83 | // Saves simplification sequence.
|
---|
| 84 | //---------------------------------------------------------------------------
|
---|
[1007] | 85 | void MeshSimplificationSequence::Save(Serializer &s)
|
---|
[774] | 86 | {
|
---|
[1526] | 87 | // Stores the simplification sequence in a file.
|
---|
[774] | 88 | char simp[256];
|
---|
| 89 |
|
---|
[1526] | 90 | // Name of the mesh.
|
---|
[774] | 91 | sprintf(simp,"%s\n",meshName);
|
---|
| 92 | s.WriteData(simp,sizeof(char),strlen(simp));
|
---|
| 93 |
|
---|
[1526] | 94 | // For each step.
|
---|
| 95 | for (unsigned int i = 0; i < mSteps.size(); i++)
|
---|
[774] | 96 | {
|
---|
| 97 | Geometry::MeshSimplificationSequence::Step paso = mSteps.operator [](i);
|
---|
[1526] | 98 |
|
---|
| 99 | sprintf(simp,
|
---|
| 100 | "%u %u %u %u %u %f &",
|
---|
| 101 | paso.mV0,
|
---|
| 102 | paso.mV1,
|
---|
| 103 | paso.mT0,
|
---|
| 104 | paso.mT1,
|
---|
| 105 | paso.obligatory,
|
---|
| 106 | paso.x);
|
---|
| 107 |
|
---|
| 108 | // Write step.
|
---|
[774] | 109 | s.WriteData(simp,sizeof(char),strlen(simp));
|
---|
[1526] | 110 |
|
---|
| 111 | // Triangles modified.
|
---|
| 112 | for (unsigned int j = 0; j < paso.mModfaces.size(); j++)
|
---|
[774] | 113 | {
|
---|
| 114 | sprintf(simp," %u",paso.mModfaces.operator [](j));
|
---|
| 115 | s.WriteData(simp,sizeof(char),strlen(simp));
|
---|
| 116 | }
|
---|
[1526] | 117 |
|
---|
| 118 | // New line.
|
---|
[774] | 119 | s.WriteData("\n",sizeof(char),1);
|
---|
| 120 | }
|
---|
| 121 | }
|
---|
| 122 |
|
---|
[1526] | 123 | //---------------------------------------------------------------------------
|
---|
| 124 | // Puts mesh name.
|
---|
| 125 | //---------------------------------------------------------------------------
|
---|
| 126 | void MeshSimplificationSequence::putMeshName(char *name)
|
---|
[774] | 127 | {
|
---|
[1526] | 128 | meshName = name;
|
---|
[774] | 129 | }
|
---|
| 130 |
|
---|
[1526] | 131 | //---------------------------------------------------------------------------
|
---|
| 132 | // Gets mesh name.
|
---|
| 133 | //---------------------------------------------------------------------------
|
---|
| 134 | char *MeshSimplificationSequence::getMeshName(void)
|
---|
[774] | 135 | {
|
---|
| 136 | return meshName;
|
---|
| 137 | }
|
---|
[1526] | 138 |
|
---|