]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
MakeTexture() moved from VISU_GaussPoints_I
authorouv <ouv@opencascade.com>
Fri, 23 Sep 2005 13:53:50 +0000 (13:53 +0000)
committerouv <ouv@opencascade.com>
Fri, 23 Sep 2005 13:53:50 +0000 (13:53 +0000)
src/PIPELINE/VISU_GaussPointsPL.cxx
src/PIPELINE/VISU_GaussPointsPL.hxx

index 85802771c67971e2d2d074369adb2ef25635e334..c3f68e914ca99d03b17aafc4a0d3ada057032daf 100644 (file)
@@ -367,3 +367,63 @@ VISU_GaussPointsPL
 {
   myPSMapper->SetImageData( theImageData );
 }
+
+//----------------------------------------------------------------------------
+vtkImageData*
+VISU_GaussPointsPL
+::MakeTexture( const char* theMainTexture, 
+              const char* theAlphaTexture )
+{
+  if( !theMainTexture || !theAlphaTexture )
+    return 0;
+
+  vtkXMLImageDataReader* aMainReader = vtkXMLImageDataReader::New();
+  vtkXMLImageDataReader* anAlphaReader = vtkXMLImageDataReader::New();
+
+  aMainReader->SetFileName( theMainTexture );
+  anAlphaReader->SetFileName( theAlphaTexture );
+
+  aMainReader->Update();
+  anAlphaReader->Update();
+
+  vtkImageData* aMainImageData = aMainReader->GetOutput();
+  vtkImageData* anAlphaImageData = anAlphaReader->GetOutput();
+
+  int* aMainImageSize = aMainImageData->GetDimensions();
+  int* anAlphaImageSize = anAlphaImageData->GetDimensions();
+  if(aMainImageSize[0] != anAlphaImageSize[0] || aMainImageSize[1] != anAlphaImageSize[1])
+    throw std::runtime_error("GaussPoints_i::MakeTexture : aMainImageSize[0] != anAlphaImageSize[0] || aMainImageSize[1] != anAlphaImageSize[1]");
+
+  int aNbCompositeComponents = 4;
+  vtkImageData* aCompositeImageData = vtkImageData::New();
+  aCompositeImageData->SetDimensions(aMainImageSize);
+  aCompositeImageData->SetScalarTypeToUnsignedChar();        
+  aCompositeImageData->SetNumberOfScalarComponents(aNbCompositeComponents);
+  aCompositeImageData->AllocateScalars();
+
+  unsigned char* aMainDataPtr = (unsigned char*)aMainImageData->GetScalarPointer();
+  unsigned char* anAlphaDataPtr = (unsigned char*)anAlphaImageData->GetScalarPointer();
+  unsigned char *aCompositeDataPtr = (unsigned char * )aCompositeImageData->GetScalarPointer();
+
+  int aNbMainComponents = aMainImageData->GetNumberOfScalarComponents();
+  int aNbAlphaComponents = anAlphaImageData->GetNumberOfScalarComponents();
+  int aCompositeSize = aMainImageSize[0] * aMainImageSize[1] * aNbCompositeComponents;
+  
+  int aMainId = 0, anAlphaId = 0, aCompositeId = 0;
+  for(; aCompositeId < aCompositeSize;)
+  {
+    aCompositeDataPtr[aCompositeId] = aMainDataPtr[aMainId];
+    aCompositeDataPtr[aCompositeId + 1] = aMainDataPtr[aMainId + 1];
+    aCompositeDataPtr[aCompositeId + 2] = aMainDataPtr[aMainId + 2];
+    aCompositeDataPtr[aCompositeId + 3] = anAlphaDataPtr[anAlphaId];
+
+    aMainId += aNbMainComponents;
+    anAlphaId += aNbAlphaComponents;
+    aCompositeId += aNbCompositeComponents;
+  }
+  aMainReader->Delete();
+  anAlphaReader->Delete();
+  aCompositeImageData->Update();
+
+  return aCompositeImageData;
+}
index 3d9cab6682a11d215151fd24e55308cc90fe1fbf..192542aeb3d10e16d20867922f38baa4d464cc59 100644 (file)
@@ -159,6 +159,11 @@ public:
   void
   SetImageData(vtkImageData* theImageData);
 
+  static
+  vtkImageData*
+  MakeTexture( const char* theMainTexture,
+              const char* theAlphaTexture );
+
 protected:
   VISU_OpenGLPointSpriteMapper* myPSMapper;
   vtkGeometryFilter* myGeomFilter;