[vtkusers] vtkArrowSource and vtkGlyph3D

Ken Martin ken.martin at kitware.com
Fri Dec 2 10:29:59 EST 2016


Be aware Glyph3D is a filter and will actually generate all those arrows in
memory. Glyph3DMapper is a mapper and uses OpenGL tricks to render the same
arrow lots of times.

Both classes place a glyph at the location of each input point. The
orientation is controlled by a different array in your point data ala the
comments below:

Thanks
Ken

  //@{
  /**
   * Turn on/off orienting of input geometry.
   * When turned on, the orientation array specified
   * using SetOrientationArray() will be used.
   */
  vtkSetMacro(Orient, bool);
  vtkGetMacro(Orient, bool);
  vtkBooleanMacro(Orient, bool);
  //@}

  //@{
  /**
   * Orientation mode indicates if the OrientationArray provides the
direction
   * vector for the orientation or the rotations around each axes. Default
is
   * DIRECTION
   */
  vtkSetClampMacro(OrientationMode, int, DIRECTION, ROTATION);
  vtkGetMacro(OrientationMode, int);
  void SetOrientationModeToDirection()
    { this->SetOrientationMode(vtkGlyph3DMapper::DIRECTION); }
  void SetOrientationModeToRotation()
    { this->SetOrientationMode(vtkGlyph3DMapper::ROTATION); }
  const char* GetOrientationModeAsString();
  //@}

  enum OrientationModes
  {
    DIRECTION=0,
    ROTATION=1
  };


  /**
   * Tells the mapper to use an orientation array if Orient is true.
   * An orientation array is a vtkDataArray with 3 components. The first
   * component is the angle of rotation along the X axis. The second
   * component is the angle of rotation along the Y axis. The third
   * component is the angle of rotation along the Z axis. Orientation is
   * specified in X,Y,Z order but the rotations are performed in Z,X an Y.
   * This definition is compliant with SetOrientation method on vtkProp3D.
   * By using vector or normal there is a degree of freedom or rotation
   * left (underconstrained). With the orientation array, there is no
degree of
   * freedom left.
   * This is convenience method. The same effect can be achieved by using
   * SetInputArrayToProcess(vtkGlyph3DMapper::ORIENTATION, 0, 0,
   * vtkDataObject::FIELD_ASSOCIATION_POINTS, orientationarrayname);
   */
  void SetOrientationArray(const char* orientationarrayname);


On Fri, Dec 2, 2016 at 10:18 AM, Andrea Gavana <andrea.gavana at gmail.com>
wrote:

> Dear All,
>
>     I am trying to combine a vtkArrowSource and vtkGlyph3D. I have been
> (naively) thinking that by specifying a polydata with two points (start and
> end) and assigning its points to the vtkGlyph3D I would obtain an arrow
> that starts at the start point and end at the end point.
>
> I have created a small, self-contained following Python script to
> demonstrate what I mean - I get 4 arrows, one at each point I define,
> instead of two arrows. What am I missing? Any suggestion is more than
> welcome.
>
> Thank you in advance.
>
> Andrea.
>
>
> import vtk
> import numpy
>
> # First set of points - first arrow
> points1 = numpy.array([[ 11271.915, 7538.686, 6245.661],
>                        [ 11271.915, 7538.686, 5897.034]])
>
> # Second set of points - second arrow
> points2 = numpy.array([[ 10532.274, 9101.572, 6313.167],
>                        [ 10532.274, 9101.572, 5964.539]])
>
> # Create an arrow source with some attributes
> arrow_source = vtk.vtkArrowSource()
> arrow_source.SetTipRadius(0.2)
> arrow_source.SetShaftRadius(0.075)
>
> # Create the vtkGlyph3D
> arrow_glyph = vtk.vtkGlyph3D()
> arrow_glyph.SetScaleModeToDataScalingOff()
>
> # Usual mapper
> arrow_mapper = vtk.vtkPolyDataMapper()
> arrow_mapper.SetInputConnection(arrow_glyph.GetOutputPort())
>
> # Usual actor
> arrow_actor = vtk.vtkActor()
> arrow_actor.SetMapper(arrow_mapper)
>
> append_poly_data = vtk.vtkAppendPolyData()
>
> # Loop through points1 and points2
> for p in [points1, points2]:
>
>     arrow_poly_data = vtk.vtkPolyData()
>     vtk_arrow_lines = vtk.vtkCellArray()
>
>     vtk_arrow_lines.InsertNextCell(2)
>     vtk_arrow_lines.InsertCellPoint(0)
>     vtk_arrow_lines.InsertCellPoint(1)
>
>     vtk_arrow_points = vtk.vtkPoints()
>     # Loop through the head and tail of a single arrow
>     for j in xrange(2):
>         vtk_arrow_points.InsertNextPoint(p[j])
>
>     arrow_poly_data.SetPoints(vtk_arrow_points)
>     arrow_poly_data.SetLines(vtk_arrow_lines)
>     append_poly_data.AddInputData(arrow_poly_data)
>
>
> arrow_glyph.SetInputConnection(append_poly_data.GetOutputPort())
> arrow_glyph.SetSourceConnection(arrow_source.GetOutputPort())
> arrow_glyph.SetScaleFactor(100)
> arrow_actor.GetProperty().SetColor(1, 1, 1)
>
> # ------------------------------------------------------------
> # Create the RenderWindow, Renderer and both Actors
> # ------------------------------------------------------------
> ren = vtk.vtkRenderer()
> renWin = vtk.vtkRenderWindow()
> renWin.AddRenderer(ren)
> iren = vtk.vtkRenderWindowInteractor()
> iren.SetRenderWindow(renWin)
>
> # add actors
> ren.AddActor(arrow_actor)
> ren.ResetCamera()
> iren.Start()
>
>
>
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/
> opensource/opensource.html
>
> Please keep messages on-topic and check the VTK FAQ at:
> http://www.vtk.org/Wiki/VTK_FAQ
>
> Search the list archives at: http://markmail.org/search/?q=vtkusers
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/vtkusers
>
>


-- 
Ken Martin PhD
Chairman & CFO
Kitware Inc.
28 Corporate Drive
Clifton Park NY 12065
518 371 3971

This communication, including all attachments, contains confidential and
legally privileged information, and it is intended only for the use of the
addressee.  Access to this email by anyone else is unauthorized. If you are
not the intended recipient, any disclosure, copying, distribution or any
action taken in reliance on it is prohibited and may be unlawful. If you
received this communication in error please notify us immediately and
destroy the original message.  Thank you.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20161202/4b64c872/attachment.html>


More information about the vtkusers mailing list