Hi,<br><br>Sorry to bring this up right before the branch, but I have a bugfix for vtkPointSet I'd like to squeeze in. If I don't hear any objections I'll commit it, 100% tests pass after the patch. Here is the bug demonstrated in python:<br>
<br>from vtk import *<br><br>p1 = vtkPolyData()<br>p2 = vtkPolyData()<br>s = vtkSphereSource()<br>s.Update()<br><br>p1.DeepCopy(s.GetOutput())<br>print p1.GetNumberOfPoints()<br><br>p1.DeepCopy(p2)<br>print p1.GetNumberOfPoints()<br>
<br><br>this prints:<br>50<br>50<br><br>but I claim it should print:<br>50<br>0<br><br>Attached is my patch. Below is the current implementation of vtkPointSet::DeepCopy and after that my new version. The bug is that 'this->Points->DeepCopy' becomes a no-op when the pointset-to-copy has null vtkPoints.<br>
<br>//----------------------------------------------------------------------------<br>void vtkPointSet::DeepCopy(vtkDataObject *dataObject)<br>{<br> vtkPointSet *pointSet = vtkPointSet::SafeDownCast(dataObject);<br><br> if ( pointSet != NULL )<br>
{<br> if (this->Points == NULL)<br> {<br> if ( pointSet->GetPoints() != NULL )<br> {<br> this->Points = pointSet->GetPoints()->NewInstance();<br> this->Points->SetDataType(pointSet->GetPoints()->GetDataType());<br>
this->Points->Register(this);<br> this->Points->Delete();<br> }<br> else<br> {<br> this->Points = vtkPoints::New();<br> this->Points->Register(this);<br>
this->Points->Delete();<br> }<br> }<br> this->Points->DeepCopy(pointSet->GetPoints());<br> }<br><br> // Do superclass<br> this->vtkDataSet::DeepCopy(dataObject);<br>}<br><br>//----------------------------------------------------------------------------<br>
void vtkPointSet::DeepCopy(vtkDataObject *dataObject)<br>{<br> vtkPointSet *pointSet = vtkPointSet::SafeDownCast(dataObject);<br><br> if ( pointSet != NULL )<br> {<br> vtkPoints* newPoints;<br> vtkPoints* pointsToCopy = pointSet->GetPoints();<br>
if (pointsToCopy)<br> {<br> newPoints = pointsToCopy->NewInstance();<br> newPoints->SetDataType(pointsToCopy->GetDataType());<br> newPoints->DeepCopy(pointsToCopy);<br> }<br> else<br>
{<br> newPoints = vtkPoints::New();<br> }<br> this->SetPoints(newPoints);<br> newPoints->Delete();<br> }<br><br> // Do superclass<br> this->vtkDataSet::DeepCopy(dataObject);<br>}<br><br>
<br>Pat<br><br><br><br><br>