//---------------------------------------------------------------------------- vesSourceData::Ptr vesKiwiDataConversionTools::ConvertColors(vtkUnsignedCharArray* colors) { if (colors && colors->GetNumberOfComponents() == 3) { unsigned char rgb[3]; const size_t nTuples = colors->GetNumberOfTuples(); vesSourceDataC3f::Ptr colorSourceData(new vesSourceDataC3f()); for (size_t i = 0; i < nTuples; ++i) { colors->GetTupleValue(i, rgb); vesVertexDataC3f color; color.m_color = vesVector3f(rgb[0]/255.0, rgb[1]/255.0, rgb[2]/255.0); colorSourceData->pushBack(color); } return colorSourceData; } else if (colors && colors->GetNumberOfComponents() == 4) { // Ignore alpha for now. // Currently, the shaders expect a 3 component rgb array unsigned char rgb[4]; const size_t nTuples = colors->GetNumberOfTuples(); vesSourceDataC3f::Ptr colorSourceData(new vesSourceDataC3f()); for (size_t i = 0; i < nTuples; ++i) { colors->GetTupleValue(i, rgb); vesVertexDataC3f color; color.m_color = vesVector3f(rgb[0]/255.0, rgb[1]/255.0, rgb[2]/255.0); colorSourceData->pushBack(color); } return colorSourceData; } return vesSourceDataC3f::Ptr(); }
//---------------------------------------------------------------------------- void vesKiwiDataConversionTools::SetVertexColors( vtkUnsignedCharArray* colors, vesSharedPtr<vesGeometryData> geometryData) { assert(geometryData); assert(colors); assert(colors->GetNumberOfComponents() == 3); unsigned char rgb[3]; const size_t nTuples = colors->GetNumberOfTuples(); vesSourceDataC3f::Ptr colorSourceData (new vesSourceDataC3f()); for (size_t i = 0; i < nTuples; ++i) { colors->GetTupleValue(i, rgb); vesVertexDataC3f color; color.m_color = vesVector3f(rgb[0]/255.0, rgb[1]/255.0, rgb[2]/255.0); colorSourceData->pushBack(color); } geometryData->addSource(colorSourceData); }
//---------------------------------------------------------------------------- void vesKiwiDataConversionTools::SetVertexColors(vtkDataArray* scalars, vtkScalarsToColors* scalarsToColors, vesSharedPtr<vesGeometryData> geometryData) { assert(scalars); assert(scalars->GetNumberOfComponents() == 1); assert(geometryData); double rgb[3]; const size_t nTuples = scalars->GetNumberOfTuples(); vesSourceDataC3f::Ptr colorSourceData (new vesSourceDataC3f()); for (size_t i = 0; i < nTuples; ++i) { scalarsToColors->GetColor(scalars->GetComponent(i, 0), rgb); vesVertexDataC3f color; color.m_color = vesVector3f(rgb[0], rgb[1], rgb[2]); colorSourceData->pushBack(color); } geometryData->addSource(colorSourceData); }
//---------------------------------------------------------------------------- vesSourceData::Ptr vesKiwiDataConversionTools::ConvertScalarsToColors(vtkDataArray* scalars, vtkScalarsToColors* scalarsToColors) { if (!scalars || !scalarsToColors) { return vesSourceDataC3f::Ptr(); } scalarsToColors->SetVectorModeToMagnitude(); vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::Take( scalarsToColors->MapScalars(scalars, VTK_COLOR_MODE_MAP_SCALARS, -1)); unsigned char rgb[4]; const size_t nTuples = colors->GetNumberOfTuples(); vesSourceDataC3f::Ptr colorSourceData(new vesSourceDataC3f()); for (size_t i = 0; i < nTuples; ++i) { colors->GetTupleValue(i, rgb); vesVertexDataC3f color; color.m_color = vesVector3f(rgb[0]/255.0, rgb[1]/255.0, rgb[2]/255.0); colorSourceData->pushBack(color); } return colorSourceData; }
//----------------------------------------------------------------------------- vesSharedPtr<vesGeometryData> vesKiwiDataConversionTools::ConvertPVWebData(vesSharedPtr<vesPVWebDataSet> dataset) { vesSharedPtr<vesGeometryData> geometryData = vesSharedPtr<vesGeometryData>(new vesGeometryData); geometryData->setName("PolyData"); const int numberOfVerts = dataset->m_numberOfVerts; // Todo- handle point primitives //vesPrimitive::Ptr pointPrimitive(new vesPrimitive()); //pointPrimitive->setPrimitiveType(vesPrimitiveRenderType::Points); //pointPrimitive->setIndexCount(1); //geometryData->addPrimitive(pointPrimitive); if (dataset->m_datasetType == 'M') { // verts and normals vesSourceDataP3N3f::Ptr sourceData(new vesSourceDataP3N3f()); vesVertexDataP3N3f vertexData; for (int i = 0; i < numberOfVerts; ++i) { float* vertex = dataset->vertices() + i*3; float* normal = dataset->normals() + i*3; vertexData.m_position[0] = vertex[0]; vertexData.m_position[1] = vertex[1]; vertexData.m_position[2] = vertex[2]; vertexData.m_normal[0] = normal[0]; vertexData.m_normal[1] = normal[1]; vertexData.m_normal[2] = normal[2]; sourceData->pushBack(vertexData); } geometryData->addSource(sourceData); // triangles vesSharedPtr<vesIndices<unsigned short> > triangleIndices = vesSharedPtr<vesIndices<unsigned short> >(new vesIndices<unsigned short>()); vesPrimitive::Ptr trianglesPrimitive = vesPrimitive::Ptr(new vesPrimitive()); trianglesPrimitive->setIndexCount(3); trianglesPrimitive->setIndicesValueType(vesPrimitiveIndicesValueType::UnsignedShort); trianglesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Triangles); trianglesPrimitive->setVesIndices(triangleIndices); geometryData->addPrimitive(trianglesPrimitive); for (int i = 0; i < dataset->m_numberOfIndices/3; ++i) { short* indices = dataset->indices() + i*3; triangleIndices->pushBackIndices(indices[0], indices[1], indices[2]); } } else if (dataset->m_datasetType == 'L') { // verts vesSourceDataP3f::Ptr vertexSourceData(new vesSourceDataP3f()); vesVertexDataP3f vertexData; for (int i = 0; i < numberOfVerts; ++i) { float* vertex = dataset->vertices() + i*3; vertexData.m_position[0] = vertex[0]; vertexData.m_position[1] = vertex[1]; vertexData.m_position[2] = vertex[2]; vertexSourceData->pushBack(vertexData); } geometryData->addSource(vertexSourceData); // lines vesSharedPtr<vesIndices<unsigned short> > lineIndices = vesSharedPtr<vesIndices<unsigned short> >(new vesIndices<unsigned short>()); vesPrimitive::Ptr linesPrimitive = vesPrimitive::Ptr(new vesPrimitive()); linesPrimitive->setIndexCount(2); linesPrimitive->setIndicesValueType(vesPrimitiveIndicesValueType::UnsignedShort); linesPrimitive->setPrimitiveType(vesPrimitiveRenderType::Lines); linesPrimitive->setVesIndices(lineIndices); geometryData->addPrimitive(linesPrimitive); for (int i = 0; i < dataset->m_numberOfIndices/2; ++i) { short* indices = dataset->indices() + i*2; lineIndices->pushBackIndices(indices[0], indices[1]); } } // colors float opacity = 1.0; if (dataset->m_transparency) { opacity = 0.4; } vesSourceDataC4f::Ptr colorSourceData(new vesSourceDataC4f()); vesVertexDataC4f vertColor; for (size_t i = 0; i < numberOfVerts; ++i) { unsigned char* color = dataset->colors() + i*4; vertColor.m_color = vesVector4f(color[0]/255.0, color[1]/255.0, color[2]/255.0, opacity); colorSourceData->pushBack(vertColor); } geometryData->addSource(colorSourceData); return geometryData; }