[vtkusers] Re: bizarre spline problem

Anja Ende anja.ende at googlemail.com
Mon Nov 13 10:39:25 EST 2006


Well, right now I create my vtkParametricSpline object everytime I add a
point to it and it seems like a temporary workaround. But this is really
bizarre. I am not sure if it is a bug or now...

So, basically now my addition of points look like this:

        void KochanekSpline::PushPoint(float x, float y)
        {
            int pos = m_controlPoints->InsertNextPoint(x, y, 0.0);

            if (m_controlPoints->GetNumberOfPoints() > 1)
            {
                m_parametricSpline->Delete();
                m_parametricSpline = vtkParametricSpline::New();
                vtkKochanekSpline* xspline = vtkKochanekSpline::New();
                vtkKochanekSpline* yspline = vtkKochanekSpline::New();
                vtkKochanekSpline* zspline = vtkKochanekSpline::New();

                m_parametricSpline->SetXSpline(xspline);
                m_parametricSpline->SetYSpline(yspline);
                m_parametricSpline->SetZSpline(zspline);

                xspline->Delete();
                yspline->Delete();
                zspline->Delete();

                m_parametricSpline->SetPoints(m_controlPoints);
                m_splineSource->SetParametricFunction(m_parametricSpline);
                m_splineSource->Update();
            }
        }
So, I am creating the vtkParametricSpline object again and, of course, this
works as expected. However, terribly inefficient and a pain... It seems
these classes are not meant to be interactive...  I also tried
RemoveAllPoints() individually on all the 3 splines but no joy...

Anja

On 13/11/06, Anja Ende <anja.ende at googlemail.com> wrote:
>
> Hi,
>
> Just a follow up: Another weird problem is that the spline does not show
> up till the 4th point has been inserted and even after that is passed
> through the first, second and the fourth points...skipping the second. Of
> course, when I move the points, the spline looks fine...
>
> Anja
>
> On 13/11/06, Anja Ende <anja.ende at googlemail.com> wrote:
> >
> > Hi everyone,
> >
> > I am having a strange problem when visualizing spline data. When I
> > visualize it, my spline data does not pass through the second last point in
> > the control point collection. As I add new points interactively, it keeps
> > updating the spline but it never passes through the second last position!
> >
> > I create the spline as follows:
> >
> > m_parametricSpline = vtkParametricSpline::New();
> > m_parametricSpline->ClosedOff();
> >
> > vtkKochanekSpline* xspline = vtkKochanekSpline::New();
> > vtkKochanekSpline* yspline = vtkKochanekSpline::New();
> > vtkKochanekSpline* zspline = vtkKochanekSpline::New();
> >
> > m_parametricSpline->SetXSpline(xspline);
> > m_parametricSpline->SetYSpline(yspline);
> > m_parametricSpline->SetZSpline(zspline);
> >
> > xspline->Delete();
> > yspline->Delete();
> > zspline->Delete();
> >
> > m_splineSource = vtkParametricFunctionSource::New();
> > m_splineSource->SetUResolution(200);
> > m_splineSource->SetVResolution(200);
> > m_controlPoints = vtkPoints::New();
> >
> > The code to add the points is as follows:
> > As I add points here, the display is updated and the spline never passes
> > through the second last point.
> >
> > void KochanekSpline::PushPoint(float x, float y)
> > {
> >             int pos = m_controlPoints->InsertNextPoint(x, y, 0.0);
> >             if (m_controlPoints->GetNumberOfPoints() > 1)
> >             {
> >                 m_parametricSpline->SetPoints(0);
> >                 m_parametricSpline->SetPoints(m_controlPoints);
> >
> > m_splineSource->SetParametricFunction(m_parametricSpline);
> >                 m_splineSource->Update();
> >             }
> > }
> >
> > Now here comes the strange part... I have code that the user can
> > interact with the control points and move them around. This is pretty
> > similar to the code above as follows:
> >
> > void KochanekSpline::SetPointAtIndex(unsigned index, float x, float y)
> > {
> >             if (m_controlPoints->GetNumberOfPoints() > index)
> >             {
> >                 m_controlPoints->SetPoint(index, x, y, 0.0);
> >                 if (m_controlPoints->GetNumberOfPoints() > 1)
> >                 {
> >                     m_parametricSpline->SetPoints(0);
> >                     m_parametricSpline->SetPoints(m_controlPoints);
> >
> > m_splineSource->SetParametricFunction(m_parametricSpline);
> >                     m_splineSource->Update();
> >                 }
> >             }
> > }
> >
> > This works as intended! As soon as I click on a point, the spline now
> > passes through all the control points!!
> >
> > However, as you can see it is pretty similar to the function above! I
> > have no idea why this is happening.
> >
> > Any suggestions and help will be greatly appreciated!
> >
> > Thanks,
> > Anja
> >
> >
> >
>
>
> --
> Cheers,
>
> Anja




-- 
Cheers,

Anja
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20061113/a362645d/attachment.htm>


More information about the vtkusers mailing list