From f624c55d7b75ccbe3fdfef0db141fdbe1f6b383a Mon Sep 17 00:00:00 2001 From: anv Date: Tue, 27 Apr 2021 21:33:54 +0300 Subject: [PATCH 1/2] 0032331: Visualization - Exception when trying to display some surfaces using iVtk with VTK 9 Updated memory allocation for vtkPolyData to use more suited method for VTK versions after 9.0 --- src/IVtkDraw/IVtkDraw_Interactor.cxx | 7 +++ src/IVtkTools/IVtkTools_SubPolyDataFilter.cxx | 50 ++++++++++++++++++- 2 files changed, 56 insertions(+), 1 deletion(-) diff --git a/src/IVtkDraw/IVtkDraw_Interactor.cxx b/src/IVtkDraw/IVtkDraw_Interactor.cxx index f9f68c37b6..1b68c959f5 100644 --- a/src/IVtkDraw/IVtkDraw_Interactor.cxx +++ b/src/IVtkDraw/IVtkDraw_Interactor.cxx @@ -20,6 +20,13 @@ #include #else #include + +// Preventing naming collisions between +// GLX and VTK versions 9.0 and above +#ifdef AllValues +#undef AllValues +#endif + #include #include #endif diff --git a/src/IVtkTools/IVtkTools_SubPolyDataFilter.cxx b/src/IVtkTools/IVtkTools_SubPolyDataFilter.cxx index 26ded68af5..bd289d2b51 100644 --- a/src/IVtkTools/IVtkTools_SubPolyDataFilter.cxx +++ b/src/IVtkTools/IVtkTools_SubPolyDataFilter.cxx @@ -87,6 +87,11 @@ int IVtkTools_SubPolyDataFilter::RequestData (vtkInformation *vtkNotUsed(theRequ // Prepare the list of ids from the set of ids. // Iterate on input cells. +#if (VTK_MAJOR_VERSION >= 9) + // Count number of different cells. + int aNbVerts = 0, aNbLines = 0, aNbPolys = 0, aNbStrips = 0; + int aNbVertPts = 0, aNbLinePts = 0, aNbPolyPts = 0, aNbStripPts = 0; +#endif if (!myIdsSet.IsEmpty()) { for (vtkIdType anI = 0; anI < aSize; anI++) @@ -95,13 +100,56 @@ int IVtkTools_SubPolyDataFilter::RequestData (vtkInformation *vtkNotUsed(theRequ { // Add a cell id to output if it's value is in the set. anIdList->InsertNextId (anI); +#if (VTK_MAJOR_VERSION >= 9) + switch (anInput->GetCellType(anI)) + { + case VTK_VERTEX: + aNbVerts++; + aNbVertPts++; + break; + case VTK_POLY_VERTEX: + aNbVerts++; + aNbVertPts += anInput->GetCell(anI)->GetNumberOfPoints(); + break; + case VTK_LINE: + aNbLines++; + aNbLinePts += 2; + break; + case VTK_POLY_LINE: + aNbLines++; + aNbLinePts += anInput->GetCell(anI)->GetNumberOfPoints(); + break; + case VTK_TRIANGLE: + aNbPolys++; + aNbPolyPts += 3; + break; + case VTK_QUAD: + aNbPolys++; + aNbPolyPts += 4; + break; + case VTK_POLYGON: + aNbPolys++; + aNbPolyPts += anInput->GetCell(anI)->GetNumberOfPoints(); + break; + case VTK_TRIANGLE_STRIP: + aNbStrips++; + aNbStripPts += anInput->GetCell(anI)->GetNumberOfPoints(); + break; + } +#endif } } } // Copy cells with their points according to the prepared list of cell ids. anOutput->GetCellData()->AllocateArrays(anInput->GetCellData()->GetNumberOfArrays()); - anOutput->Allocate(anInput, anIdList->GetNumberOfIds()); // Allocate output cells + // Allocate output cells +#if (VTK_MAJOR_VERSION >= 9) + anOutput->AllocateExact (aNbVerts, aNbVertPts, aNbLines, aNbLinePts, aNbPolys, aNbPolyPts, aNbStrips, aNbStripPts); +#else + anOutput->Allocate (anInput, anIdList->GetNumberOfIds()); +#endif + // Pass data arrays. // Create new arrays for output data vtkSmartPointer anInData = anInput->GetCellData(); -- 2.31.1 From 3a0d59614378af258b285c7a3cab66c4bb7cecd3 Mon Sep 17 00:00:00 2001 From: Roman Beranek Date: Thu, 3 Jun 2021 15:41:45 +0200 Subject: [PATCH 2/2] undef AllValues after inclusion of GL/glx.h Replicate the measure from 0032331 also for IVtkDraw.cxx and InterfaceGraphic.hxx --- src/IVtkDraw/IVtkDraw.cxx | 17 +++++++++++------ src/InterfaceGraphic/InterfaceGraphic.hxx | 4 +++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/IVtkDraw/IVtkDraw.cxx b/src/IVtkDraw/IVtkDraw.cxx index 93d4a2fd1a..84bacdc55a 100644 --- a/src/IVtkDraw/IVtkDraw.cxx +++ b/src/IVtkDraw/IVtkDraw.cxx @@ -52,6 +52,17 @@ // prevent disabling some MSVC warning messages by VTK headers #include +#ifndef _WIN32 + #include + #include + #include + #include + #include + #include + #ifdef AllValues + #undef AllValues + #endif +#endif #include #include #include @@ -75,12 +86,6 @@ #include #include #ifndef _WIN32 - #include - #include - #include - #include - #include - #include #include #include #include diff --git a/src/InterfaceGraphic/InterfaceGraphic.hxx b/src/InterfaceGraphic/InterfaceGraphic.hxx index c533f68cd5..bf02b3f397 100644 --- a/src/InterfaceGraphic/InterfaceGraphic.hxx +++ b/src/InterfaceGraphic/InterfaceGraphic.hxx @@ -39,7 +39,9 @@ #include #include #include - +#ifdef AllValues +#undef AllValues +#endif #endif #endif // __INTERFACE_GRAPHIC_HXX -- 2.31.1