<div dir="ltr">This is a good idea!</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jun 30, 2015 at 3:24 PM, David Thompson <span dir="ltr"><<a href="mailto:david.thompson@kitware.com" target="_blank">david.thompson@kitware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hmmm. I think this would be a good time to use vtkMappedDataArray to create a version of the control point coordinates with 3 components that divides x, y, and z by the homogeneous coordinate. The vtkStructuredGrid's vtkPoints instance would own the vtkMappedDataArray, which would own a reference to the 4-component array (also owned by the PointData() of the vtkStructuredGrid).<br>
<br>
That will make rendering the control polygon easy and let GetDimensions() return the correct value. Just make sure that you call SetDimensions() before setting the vtkPoints array to be the vtkMappedDataArray.<br>
<span class="HOEnZb"><font color="#888888"><br>
        David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
> On Jun 30, 2015, at 3:19 PM, Lin M <<a href="mailto:majcjc@gmail.com">majcjc@gmail.com</a>> wrote:<br>
><br>
> Yes, I can store it in PointData(), but splineData->GetDimensions(numControlPointsPerAxis) will not return the correct number of control points. It will return {0,0,0} if we hold the control points in PointData(). Though we can also hold a simple 1*3 array in vtkFieldData just like we store the length of knot vectors.<br>
><br>
> On Tue, Jun 30, 2015 at 2:10 PM, David Thompson <<a href="mailto:david.thompson@kitware.com">david.thompson@kitware.com</a>> wrote:<br>
> Hi Lin,<br>
><br>
> > I didn't separate the homogenous coordinate with point coordinates but stored them all in a vtkDataArray with 4 components per tuple just as you suggest. In this way, vtkStructuredGrid cannot hold them as vtkPoints. The current API is like<br>
> ><br>
> > void vtkNURBSPatchAdaptor::GetPatchShape(vtkUnstructuredGrid* outputSp, vtkDataArray* ctrlPts, int* ctrlPtsNum)<br>
> > the outputSp holds the surface mesh, ctrlPts and ctrlPtsNum hold information and data of nurbs control points, and the vtkSturcturedGrid only holds knot vectors and length.<br>
><br>
> Actually, the vtkStructuredGrid can hold the control points as PointData() (as opposed to Point  coordinates). There is no constraint on the number of components per tuple. The idea is to access the control points and knot data like this:<br>
><br>
>   vtkStructuredGrid* splineData;<br>
>   vtkDataArray* controlPoints = splineData->GetPointData()->GetArrayByName("control polygon");<br>
>   vtkDataArray* knotVector = splineData->GetFieldData()->GetArrayByName("knot vector");<br>
>   int numControlPointsPerAxis[3];<br>
>   splineData->GetDimensions(numControlPointsPerAxis);<br>
><br>
> That way all of the spline data is grouped into one dataset; it's just that the splineData's vtkPoints would not hold the control points. We could also store additional information in the arrays of splineData->GetFieldData(). For example, flags indicating which axes (if any) were periodic could be stored in a separate field-data array since there is no constraint on the number of components or tuples of field-data arrays.<br>
><br>
> Does that make sense?<br>
><br>
>         David<br>
><br>
><br>
<br>
</div></div></blockquote></div><br></div>