[vtk-developers] vtkCleanPolyData on textured surfaces

Tim Hutton T.Hutton at eastman.ucl.ac.uk
Thu Sep 30 10:55:34 EDT 2004


Michael,

Yes, of course I will check for tcoords (plus the user will have specified 
that they want tcoords to be queried). And, yes, a user-specifiable 
tolerance on the tcoords would be a good idea too.

But I'm wondering really whether anyone else has a desire for this kind of 
thing, and whether adding functionality to vtkCleanPolyData is the right 
thing to do.

Thanks,

Tim.

At 08:15 30/09/2004 -0400, Michael Halle wrote:
>Hi Tim,
>
>Looks like your code assumes the model has texture coordinates.
>Furthermore, it does a direct C compare of the coordinates; because
>of floating point error, you probably want some sort of error
>allowed.
>
>--Michael Halle
>mhalle @ bwh.harvard.edu
>
>On Sep 30, 2004, at 7:28 AM, Tim Hutton wrote:
>
>>A couple of times the users list has mentioned that when you run 
>>vtkCleanPolyData on textured surfaces, the texture sometimes gets broken. 
>>This happens when two points are merged (because they are in the same 
>>place), ignoring the fact that they have different tcoords.
>>
>>The result of this problem is shown here:
>>http://www.eastman.ucl.ac.uk/~thutton/VTK/tcoords_merged_problem.jpg (23k)
>>
>>The solution I'm using at the moment is to alter two bits of code in 
>>vtkCleanPolyData, where the polygons and poly strips are merged (code below).
>>
>>Perhaps a better alternative would be to have this functionality as an 
>>option in vtkPointLocator, however what gets  passed to InsertUniquePoint 
>>is just a double[3] and thus there is no easy way for the locator to 
>>access the tcoords.
>>
>>So, I'm seeking advice on whether to:
>>
>>a) add the code as an option (IgnoreTextureCoordinates=1 by default to 
>>keep current functionality) to vtkCleanPolyData.
>>b) derive a new class from vtkCleanPolyData (means duplicating much of 
>>the code of Execute())
>>c) implement some way for the vtkPointLocator to check the tcoords if desired
>>d) implement nothing, but tell vtkusers about my workaround.
>>
>>The idea could be generalized to other point data, for example to not 
>>merge two vertices if they had different scalars, however I suspect that 
>>this wouldn't be of use to anyone.
>>
>>Thankyou for your time.
>>
>>Tim
>>
>>------------------------------------
>>OLD CODE: (at lines 337 and 423 in revision 1.74 of vtkCleanPolyData.cxx)
>>
>>else if ( this->Locator->InsertUniquePoint(newx, ptId) )
>>   {
>>   outputPD->CopyData(inputPD,pts[i],ptId);
>>   }
>>
>>------------------------------------
>>REPLACEMENT CODE:
>>
>>else
>>   {
>>     ptId = this->Locator->IsInsertedPoint(newx);
>>     if(ptId!=-1)
>>     {
>>         // a point exists at this location - only insert our point if 
>> tcoords differ
>>         float *t1,*t2;
>>         t1 = inputPD->GetTCoords()->GetTuple(pts[i]);
>>         t2 = outputPD->GetTCoords()->GetTuple(ptId);
>>         if(t1[0]!=t2[0] || t1[1]!=t2[1])
>>         {
>>           // insert the point, this vertex is duplicated
>>           ptId = this->Locator->InsertNextPoint(newx); // note that this 
>> is not InsertUniquePoint
>>           outputPD->CopyData(inputPD,pts[i],ptId);
>>         }
>>     }
>>     else
>>     {
>>       // this point hasn't been seen already, so add it
>>       ptId = this->Locator->InsertNextPoint(newx);
>>       outputPD->CopyData(inputPD,pts[i],ptId);
>>     }
>>   }
>>
>>------------------------------------
>>
>>
>>_______________________________________________
>>vtk-developers mailing list
>>vtk-developers at vtk.org
>>http://www.vtk.org/mailman/listinfo/vtk-developers
>
>_______________________________________________
>vtk-developers mailing list
>vtk-developers at vtk.org
>http://www.vtk.org/mailman/listinfo/vtk-developers
>





More information about the vtk-developers mailing list