mirror of
https://github.com/OpenFOAM/ThirdParty-6.git
synced 2025-12-08 06:57:43 +00:00
216 lines
7.5 KiB
C++
216 lines
7.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkWebGLDataSet.cxx
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
|
|
#include "vtkWebGLDataSet.h"
|
|
|
|
#include "vtkObjectFactory.h"
|
|
#include "vtkWebGLExporter.h"
|
|
|
|
vtkStandardNewMacro(vtkWebGLDataSet);
|
|
|
|
std::string vtkWebGLDataSet::GetMD5()
|
|
{
|
|
return this->MD5;
|
|
}
|
|
|
|
vtkWebGLDataSet::vtkWebGLDataSet()
|
|
{
|
|
this->NumberOfVertices = 0;
|
|
this->NumberOfPoints = 0;
|
|
this->NumberOfIndexes = 0;
|
|
this->vertices = NULL;
|
|
this->normals = NULL;
|
|
this->indexes = NULL;
|
|
this->points = NULL;
|
|
this->tcoords = NULL;
|
|
this->colors = NULL;
|
|
this->binary = NULL;
|
|
this->binarySize = 0;
|
|
this->hasChanged = false;
|
|
}
|
|
|
|
vtkWebGLDataSet::~vtkWebGLDataSet()
|
|
{
|
|
delete[] this->vertices;
|
|
delete[] this->normals;
|
|
delete[] this->indexes;
|
|
delete[] this->points;
|
|
delete[] this->tcoords;
|
|
delete[] this->colors;
|
|
delete[] this->binary;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetVertices(float* v, int size)
|
|
{
|
|
delete[] this->vertices;
|
|
this->vertices = v;
|
|
this->NumberOfVertices = size;
|
|
this->webGLType = wTRIANGLES;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetIndexes(short* i, int size)
|
|
{
|
|
delete[] this->indexes;
|
|
this->indexes = i;
|
|
this->NumberOfIndexes = size;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetNormals(float* n)
|
|
{
|
|
if (this->normals) delete[] this->normals;
|
|
this->normals = n;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetColors(unsigned char* c)
|
|
{
|
|
if (this->colors) delete[] this->colors;
|
|
this->colors = c;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetPoints(float* p, int size)
|
|
{
|
|
if (this->points) delete[] this->points;
|
|
this->points = p;
|
|
this->NumberOfPoints = size;
|
|
this->webGLType = wLINES;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetTCoords(float *t)
|
|
{
|
|
if (this->tcoords) delete[] this->tcoords;
|
|
this->tcoords = t;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
unsigned char* vtkWebGLDataSet::GetBinaryData()
|
|
{
|
|
this->hasChanged = false;
|
|
return this->binary;
|
|
}
|
|
|
|
int vtkWebGLDataSet::GetBinarySize()
|
|
{
|
|
return this->binarySize;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetMatrix(float* m)
|
|
{
|
|
this->Matrix = m;
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::GenerateBinaryData()
|
|
{
|
|
if (this->NumberOfIndexes == 0 && this->webGLType != wPOINTS)
|
|
{
|
|
return;
|
|
}
|
|
int size=0, pos=0, total=0;
|
|
delete[] this->binary;
|
|
this->binarySize = 0;
|
|
|
|
if(this->webGLType == wLINES)
|
|
{
|
|
pos = sizeof(pos);
|
|
size = this->NumberOfPoints*sizeof(this->points[0]);
|
|
|
|
//Calculate the size used by each data
|
|
total = sizeof(pos) + 1 + sizeof(this->NumberOfPoints) + size*3 //Size, Type, NumberOfPoints, Points
|
|
+ sizeof(this->colors[0])*this->NumberOfPoints*4 + sizeof(this->NumberOfIndexes) //Color, NumberOfIndex
|
|
+ this->NumberOfIndexes*sizeof(this->indexes[0]) + sizeof(this->Matrix[0])*16; //Index, Matrix
|
|
this->binary = new unsigned char[total];
|
|
memset(this->binary,0,total);
|
|
|
|
this->binary[pos++] = 'L';
|
|
memcpy(&this->binary[pos], &this->NumberOfPoints, sizeof(this->NumberOfPoints)); pos+=sizeof(this->NumberOfPoints); //Points
|
|
memcpy(&this->binary[pos], this->points, size*3); pos+=size*3;
|
|
memcpy(&this->binary[pos], this->colors, sizeof(this->colors[0])*this->NumberOfPoints*4); pos+=sizeof(this->colors[0])*this->NumberOfPoints*4;
|
|
memcpy(&this->binary[pos], &this->NumberOfIndexes, sizeof(this->NumberOfIndexes)); pos+=sizeof(this->NumberOfIndexes);
|
|
memcpy(&this->binary[pos], this->indexes, this->NumberOfIndexes*sizeof(this->indexes[0])); pos+=this->NumberOfIndexes*sizeof(this->indexes[0]);
|
|
memcpy(&this->binary[pos], this->Matrix, sizeof(this->Matrix[0])*16); pos+=sizeof(this->Matrix[0])*16; //Matrix
|
|
|
|
memcpy(&this->binary[0], &pos, sizeof(pos));
|
|
this->binarySize = total;
|
|
}
|
|
else if (this->webGLType == wTRIANGLES)
|
|
{
|
|
pos = sizeof(pos);
|
|
size = sizeof(this->vertices[0])*this->NumberOfVertices;
|
|
|
|
//Calculate the size used by each data
|
|
total = sizeof(pos) + 1 + sizeof(this->NumberOfVertices) + size*(3+3) //Size, Type, VertCount, Vert, Normal
|
|
+ sizeof(this->colors[0])*this->NumberOfVertices*4 + sizeof(this->NumberOfIndexes) //Color, IndicCount
|
|
+ this->NumberOfIndexes*sizeof(this->indexes[0]) + sizeof(this->Matrix[0])*16; //Index, Matrix
|
|
if (this->tcoords) total += size*2; //TCoord
|
|
this->binary = new unsigned char[total];
|
|
memset(this->binary,0,total);
|
|
|
|
this->binary[pos++] = 'M';
|
|
memcpy(&this->binary[pos], &this->NumberOfVertices, sizeof(this->NumberOfVertices)); pos+=sizeof(this->NumberOfVertices); //VertCount
|
|
memcpy(&this->binary[pos], this->vertices, size*3); pos+=size*3; //Vertices
|
|
memcpy(&this->binary[pos], this->normals, size*3); pos+=size*3; //Normals
|
|
memcpy(&this->binary[pos], this->colors, sizeof(this->colors[0])*this->NumberOfVertices*4); pos+=sizeof(this->colors[0])*this->NumberOfVertices*4;//Colors
|
|
memcpy(&this->binary[pos], &this->NumberOfIndexes, sizeof(this->NumberOfIndexes)); pos+=sizeof(this->NumberOfIndexes); //IndCount
|
|
memcpy(&this->binary[pos], this->indexes, this->NumberOfIndexes*sizeof(this->indexes[0])); pos+=this->NumberOfIndexes*sizeof(this->indexes[0]);
|
|
memcpy(&this->binary[pos], this->Matrix, sizeof(this->Matrix[0])*16); pos+=sizeof(this->Matrix[0])*16; //Matrix
|
|
if (this->tcoords) memcpy(&this->binary[pos], this->tcoords, size*2); pos+=size*2; //TCoord
|
|
|
|
memcpy(&this->binary[0], &pos, sizeof(pos));
|
|
this->binarySize = total;
|
|
}
|
|
else if (this->webGLType == wPOINTS)
|
|
{
|
|
pos = sizeof(pos);
|
|
size = this->NumberOfPoints*sizeof(this->points[0]);
|
|
|
|
//Calculate the size used by each data
|
|
total = sizeof(pos) + 1 + sizeof(this->NumberOfPoints) + size*3 //Size, Type, NumberOfPoints, Points
|
|
+ sizeof(this->colors[0])*this->NumberOfPoints*4 + sizeof(this->Matrix[0])*16; //Color, Matrix
|
|
this->binary = new unsigned char[total];
|
|
memset(this->binary,0,total);
|
|
|
|
this->binary[pos++] = 'P';
|
|
memcpy(&this->binary[pos], &this->NumberOfPoints, sizeof(this->NumberOfPoints)); pos+=sizeof(this->NumberOfPoints); //Points
|
|
memcpy(&this->binary[pos], this->points, size*3); pos+=size*3;
|
|
memcpy(&this->binary[pos], this->colors, sizeof(this->colors[0])*this->NumberOfPoints*4); pos+=sizeof(this->colors[0])*this->NumberOfPoints*4;
|
|
memcpy(&this->binary[pos], this->Matrix, sizeof(this->Matrix[0])*16); pos+=sizeof(this->Matrix[0])*16; //Matrix
|
|
|
|
memcpy(&this->binary[0], &pos, sizeof(pos));
|
|
this->binarySize = total;
|
|
}
|
|
vtkWebGLExporter::ComputeMD5((unsigned char*)this->binary, this->binarySize, this->MD5);
|
|
this->hasChanged = true;
|
|
}
|
|
|
|
void vtkWebGLDataSet::SetType(WebGLObjectTypes t)
|
|
{
|
|
this->webGLType = t;
|
|
}
|
|
|
|
bool vtkWebGLDataSet::HasChanged()
|
|
{
|
|
return this->hasChanged;
|
|
}
|
|
|
|
void vtkWebGLDataSet::PrintSelf(ostream& os, vtkIndent indent)
|
|
{
|
|
this->Superclass::PrintSelf(os, indent);
|
|
}
|