<div dir="ltr">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.<div><br></div><div>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:</div><div><br></div><div>Thanks</div><div>Ken</div><div><br></div><div><div>  //@{</div><div>  /**</div><div>   * Turn on/off orienting of input geometry.</div><div>   * When turned on, the orientation array specified</div><div>   * using SetOrientationArray() will be used.</div><div>   */</div><div>  vtkSetMacro(Orient, bool);</div><div>  vtkGetMacro(Orient, bool);</div><div>  vtkBooleanMacro(Orient, bool);</div><div>  //@}</div><div><br></div><div>  //@{</div><div>  /**</div><div>   * Orientation mode indicates if the OrientationArray provides the direction</div><div>   * vector for the orientation or the rotations around each axes. Default is</div><div>   * DIRECTION</div><div>   */</div><div>  vtkSetClampMacro(OrientationMode, int, DIRECTION, ROTATION);</div><div>  vtkGetMacro(OrientationMode, int);</div><div>  void SetOrientationModeToDirection()</div><div>    { this->SetOrientationMode(vtkGlyph3DMapper::DIRECTION); }</div><div>  void SetOrientationModeToRotation()</div><div>    { this->SetOrientationMode(vtkGlyph3DMapper::ROTATION); }</div><div>  const char* GetOrientationModeAsString();</div><div>  //@}</div><div><br></div><div>  enum OrientationModes</div><div>  {</div><div>    DIRECTION=0,</div><div>    ROTATION=1</div><div>  };</div></div><div><br></div><div><div><br></div><div>  /**</div><div>   * Tells the mapper to use an orientation array if Orient is true.</div><div>   * An orientation array is a vtkDataArray with 3 components. The first</div><div>   * component is the angle of rotation along the X axis. The second</div><div>   * component is the angle of rotation along the Y axis. The third</div><div>   * component is the angle of rotation along the Z axis. Orientation is</div><div>   * specified in X,Y,Z order but the rotations are performed in Z,X an Y.</div><div>   * This definition is compliant with SetOrientation method on vtkProp3D.</div><div>   * By using vector or normal there is a degree of freedom or rotation</div><div>   * left (underconstrained). With the orientation array, there is no degree of</div><div>   * freedom left.</div><div>   * This is convenience method. The same effect can be achieved by using</div><div>   * SetInputArrayToProcess(vtkGlyph3DMapper::ORIENTATION, 0, 0,</div><div>   * vtkDataObject::FIELD_ASSOCIATION_POINTS, orientationarrayname);</div><div>   */</div><div>  void SetOrientationArray(const char* orientationarrayname);</div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 2, 2016 at 10:18 AM, Andrea Gavana <span dir="ltr"><<a href="mailto:andrea.gavana@gmail.com" target="_blank">andrea.gavana@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Dear All,<div><br></div><div>    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.</div><div><br></div><div>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.</div><div><br></div><div>Thank you in advance.</div><div><br></div><div>Andrea.</div><div><br></div><div><br></div><div><div><font face="monospace, monospace">import vtk</font></div><div><font face="monospace, monospace">import numpy</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># First set of points - first arrow</font></div><div><font face="monospace, monospace">points1 = numpy.array([[ 11271.915, 7538.686, 6245.661],</font></div><div><font face="monospace, monospace">                       [ 11271.915, 7538.686, 5897.034]])</font></div><div><font face="monospace, monospace"><br></font></div><div><div><font face="monospace, monospace"># Second set of points - second arrow</font></div></div><div><font face="monospace, monospace">points2 = numpy.array([[ 10532.274, 9101.572, 6313.167],</font></div><div><font face="monospace, monospace">                       [ 10532.274, 9101.572, 5964.539]])</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># Create an arrow source with some attributes</font></div><div><font face="monospace, monospace">arrow_source = vtk.vtkArrowSource()</font></div><div><font face="monospace, monospace">arrow_source.SetTipRadius(0.2)</font></div><div><font face="monospace, monospace">arrow_source.SetShaftRadius(0.<wbr>075)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># Create the vtkGlyph3D</font></div><div><font face="monospace, monospace">arrow_glyph = vtk.vtkGlyph3D()</font></div><div><font face="monospace, monospace">arrow_glyph.<wbr>SetScaleModeToDataScalingOff()</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># Usual mapper</font></div><div><font face="monospace, monospace">arrow_mapper = vtk.vtkPolyDataMapper()</font></div><div><font face="monospace, monospace">arrow_mapper.<wbr>SetInputConnection(arrow_<wbr>glyph.GetOutputPort())</font></div><div><br></div><div><span style="font-family:monospace,monospace"># Usual actor</span></div><div><span style="font-family:monospace,monospace">arrow_actor = vtk.vtkActor()</span><br></div><div><font face="monospace, monospace">arrow_actor.SetMapper(arrow_<wbr>mapper)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">append_poly_data = vtk.vtkAppendPolyData()</font></div><div><br></div><div><font face="monospace, monospace"># Loop through points1 and points2</font></div><div><font face="monospace, monospace">for p in [points1, points2]:</font></div><div><br></div><div><font face="monospace, monospace">    arrow_poly_data = vtk.vtkPolyData()</font></div><div><font face="monospace, monospace">    vtk_arrow_lines = vtk.vtkCellArray()</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    vtk_arrow_lines.<wbr>InsertNextCell(2)</font></div><div><font face="monospace, monospace">    vtk_arrow_lines.<wbr>InsertCellPoint(0)</font></div><div><font face="monospace, monospace">    vtk_arrow_lines.<wbr>InsertCellPoint(1)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    vtk_arrow_points = vtk.vtkPoints()</font></div><div><font face="monospace, monospace">    # Loop through the head and tail of a single arrow</font></div><div><font face="monospace, monospace">    for j in xrange(2):</font></div><div><font face="monospace, monospace">        vtk_arrow_points.<wbr>InsertNextPoint(p[j])</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">    arrow_poly_data.SetPoints(vtk_<wbr>arrow_points)</font></div><div><font face="monospace, monospace">    arrow_poly_data.SetLines(vtk_<wbr>arrow_lines)</font></div><div><font face="monospace, monospace">    append_poly_data.AddInputData(<wbr>arrow_poly_data)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">arrow_glyph.<wbr>SetInputConnection(append_<wbr>poly_data.GetOutputPort())</font></div><div><font face="monospace, monospace">arrow_glyph.<wbr>SetSourceConnection(arrow_<wbr>source.GetOutputPort())</font></div><div><font face="monospace, monospace">arrow_glyph.SetScaleFactor(<wbr>100)</font></div><div><font face="monospace, monospace">arrow_actor.GetProperty().<wbr>SetColor(1, 1, 1)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># ------------------------------<wbr>------------------------------</font></div><div><font face="monospace, monospace"># Create the RenderWindow, Renderer and both Actors</font></div><div><font face="monospace, monospace"># ------------------------------<wbr>------------------------------</font></div><div><font face="monospace, monospace">ren = vtk.vtkRenderer()</font></div><div><font face="monospace, monospace">renWin = vtk.vtkRenderWindow()</font></div><div><font face="monospace, monospace">renWin.AddRenderer(ren)</font></div><div><font face="monospace, monospace">iren = vtk.vtkRenderWindowInteractor(<wbr>)</font></div><div><font face="monospace, monospace">iren.SetRenderWindow(renWin)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace"># add actors</font></div><div><font face="monospace, monospace">ren.AddActor(arrow_actor)</font></div><div><font face="monospace, monospace">ren.ResetCamera()</font></div><div><font face="monospace, monospace">iren.Start()</font></div><div><font face="monospace, monospace"><br></font></div><font face="monospace, monospace"><br></font></div></div>
<br>______________________________<wbr>_________________<br>
Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" rel="noreferrer" target="_blank">http://www.vtk.org/Wiki/VTK_<wbr>FAQ</a><br>
<br>
Search the list archives at: <a href="http://markmail.org/search/?q=vtkusers" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>vtkusers</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://public.kitware.com/mailman/listinfo/vtkusers" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/vtkusers</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Ken Martin PhD<div>Chairman & CFO<br>Kitware Inc.<br>28 Corporate Drive<br>Clifton Park NY 12065<br>518 371 3971<div><br></div><div><span style="font-size:10pt;font-family:Tahoma,sans-serif">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.</span></div></div></div>
</div>