[vtkusers] vtkBooleanOperationPolyDataFilter, issue & question

Rémi Blanc rblanc33 at gmail.com
Wed Mar 14 08:49:26 EDT 2012


Hi all,

I have a small issue, and one question about 
vtkBooleanOperationPolyDataFilter.

Issue:

I experienced compilation errors when including 
vtkBooleanOperationPolyDataFilter.h within a project, under Windows and 
using Visual Studio 2008 (Express)
It seems to be related to the enumeration definition (line 53)
   enum OperationType
   {
     UNION=0,
     INTERSECTION,
     DIFFERENCE
   };
Actually, the problem apparently comes from the fact that the name 
DIFFERENCE is already used somewhere in windows standard includes 
(winuser.h  there is a    #define DIFFERENCE 11)
I tried to #undef it before including 
vtkBooleanOperationPolyDataFilter.h but it doesn't seem to change anything.
The only workaround I found yet is to replace DIFFERENCE by e.g. 
SETDIFFERENCE in the filter.

Would someone have a better solution? (besides changing the OS and 
compiler...)



Question:

After doing so, I could successfully test the filter with various meshes.
It works perfectly well for meshes created from the various 
vtk___Sources (which is already a great help for my project!)
However, I obtain spurious results when working on 'manually' generated 
meshes, such as simple cubes defined with 8 points and 12 triangles (see 
code below)
What are the requirements for the input meshes?
and how should I define my custom meshes so they are compatible with the 
filter?


Thanks,

Rémi Blanc



     double W1 = 5, H1 = 4, D1 = 2;
     double W2 = 2, H2 = 5, D2 = 4;
     points1->InsertNextPoint(-W1,-H1,-D1); 
points1->InsertNextPoint(-W1, H1,-D1); points1->InsertNextPoint( W1, 
H1,-D1); points1->InsertNextPoint( W1,-H1,-D1);
     points1->InsertNextPoint(-W1,-H1, D1); 
points1->InsertNextPoint(-W1, H1, D1); points1->InsertNextPoint( W1, H1, 
D1); points1->InsertNextPoint( W1,-H1, D1);
     points2->InsertNextPoint(-W2,-H2,-D2); 
points2->InsertNextPoint(-W2, H2,-D2); points2->InsertNextPoint( W2, 
H2,-D2); points2->InsertNextPoint( W2,-H2,-D2);
     points2->InsertNextPoint(-W2,-H2, D2); 
points2->InsertNextPoint(-W2, H2, D2); points2->InsertNextPoint( W2, H2, 
D2); points2->InsertNextPoint( W2,-H2, D2);

     vtkIdType tri[3];
     //'lower' faces
     tri[0] = 0; tri[1] = 1; tri[2] = 2;                
cells1->InsertNextCell(3, tri);
     tri[0] = 0; tri[1] = 2; tri[2] = 3;                
cells1->InsertNextCell(3, tri);
     //side faces
     tri[0] = 0; tri[1] = 1; tri[2] = 5;                
cells1->InsertNextCell(3, tri);
     tri[0] = 0; tri[1] = 5; tri[2] = 4;                
cells1->InsertNextCell(3, tri);
     tri[0] = 1; tri[1] = 2; tri[2] = 6;                
cells1->InsertNextCell(3, tri);
     tri[0] = 1; tri[1] = 6; tri[2] = 5;                
cells1->InsertNextCell(3, tri);
     tri[0] = 2; tri[1] = 3; tri[2] = 7;                
cells1->InsertNextCell(3, tri);
     tri[0] = 2; tri[1] = 7; tri[2] = 6;                
cells1->InsertNextCell(3, tri);
     tri[0] = 0; tri[1] = 7; tri[2] = 3;                
cells1->InsertNextCell(3, tri);
     tri[0] = 0; tri[1] = 4; tri[2] = 7;                
cells1->InsertNextCell(3, tri);
     //'upper' face
     tri[0] = 4; tri[1] = 5; tri[2] = 6;                
cells1->InsertNextCell(3, tri);
     tri[0] = 4; tri[1] = 7; tri[2] = 6;                
cells1->InsertNextCell(3, tri);

     obj1->SetPoints(points1); obj2->SetPoints(points2);
     cells1->Squeeze();
     obj1->SetPolys(cells1);   obj2->SetPolys(cells1);



More information about the vtkusers mailing list