[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