Lots of Actors

Peter Hansen peter at engcorp.com
Tue Feb 10 16:33:34 EST 2004


Yi-Yu Chou wrote:
> 
> I want to use line segments to display a 3D vector field.
> However, my progrm becomes very slow when displaying this vector field if
> the number of lin segments is very huge. Is there any better method to do
> it ?
> Thanks in advance !!!
> 
> Below is my code :
> line = []
> line_mapper = []
> self.line_actor = []
> for i in range(0, vf_points.num):
>         line.append(vtkLineSource())
>         line[i].SetPoint1(vf_points.x[i],vf_points.y[i],vf_points.z[i])
>         line[i].SetPoint2(vf_points.x[i] + vf.vx[i],vf_points.y[i] +
> vf.vy[i],vf_points.z[i] + vf.vz[i])
>         line_mapper.append(vtkPolyDataMapper())
>         line_mapper[i].SetInput(line[i].GetOutput())
>         self.line_actor.append(vtkActor())
>         self.line_actor[i].SetMapper(line_mapper[i])
>         self.line_actor[i].GetProperty().SetLineWidth(1)
>         self.line_actor[i].GetProperty().SetColor(0,1,1)
>         self.line_actor[i].PickableOff()
>         self.tar_renderer.AddActor(self.line_actor[i])

What makes you think the above code, specifically, is the cause of the
slowness?  It doesn't look to me as though the above code is actually
doing the rendering, but merely setting things up to be rendered.  On
the other hand, without any idea what a tar_renderer is, or anything
else about the code, it's hard to tell.

If the above is really the part that needs to be optimized, and only
profiling or something like that will tell you, you could save at least
a tiny bit of time by binding a local variable to self.line_actor[i] and
using that in subsequent lines in place of the longer form, which 
involves a dictionary lookup (on self) and an index operation repeatedly.

I'd look for more points of concern, but it doesn't seem productive
unless you have evidence that this is really the bottleneck in your
code.

-Peter



More information about the Python-list mailing list